#include // Timer #include #include // ?? #define CRLF "\r\n" #define RcvOK "OK\r\n" #define RcvErr "ER\r\n" #define MODE_DEBUG false String IdeSerial; const int BUFF_SIZE = 512; char Buff_Eth_Rd[BUFF_SIZE] = {0}; char Buff_485_Wr[BUFF_SIZE] = {0}; char Buff_485_Rd[BUFF_SIZE] = {0}; String latest_sent_msg; int numOf485 = 0; int returnTime = 0; // ========== ========== Periodic Flags bool T_10ms = false; bool T_20ms = false; bool T_50ms = false; bool T_100ms = false; bool T_200ms = false; bool T_500ms = false; bool T_1000ms = false; bool T_2000ms = false; bool T_5000ms = false; // ========== ========== Communication // ---------- Ethernet // Ethernet Client EthernetClient client; // SCPI defaults to port 5025 EthernetServer server(5025); // HTTP defaults to port 5025 EthernetServer web(80); unsigned long lastDataReceivedTime; unsigned long timeoutPeriod = 5000; // 타임아웃 시간 (5초) bool State_eth = false; // ---------- 485 String Buf_485; bool Wait_485; int Wait_485_cnt; // ========== ========== Processing // Read Datas const int DoPin[] = { 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41}; const int DiPin[] = { 2, 3, 4, 5, 6, 7, 8, 9}; const int AiPin[] = { A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15}; int Size_DO = 16; int Size_DI = 8; int Values_DI; int Size_AI = 16; int Values_AI[16]; int Size_PV = 8; int Values_10_PV[8]; int Size_SV = 8; int Values_10_SV[8]; int msCnt = 0; unsigned long timer = 0; void setup() { // put your setup code here, to run once: Serial.begin(9600); Serial.println("Start!"); // modules setup (init.) Ethernet_setup(); GPIO_setup(); //MC9_setup(); RS485_setup(); // Timer set MsTimer2::set(10, timer_10ms); MsTimer2::start(); } void loop() { // wait for a new client: //webReponse(); client = server.available(); if (client) { String Buf_eth; String message; String cmd; String cmdData; unsigned int data[32]; int dataSize; // check if client is connected Serial.println("Client Connected!!!"); // Do What Message Command while(client.connected()){ // read data check if(client.available() > 0) { char c ;//= client.read(); while((c = client.read())) { if((c == '\n') && (Buff_Eth_Rd[strlen(Buff_Eth_Rd)-1] == '\r')){ write_buff_c(Buff_Eth_Rd, c); break; }else{ write_buff_c(Buff_Eth_Rd, c); } } // 데이터를 수신했으므로 타임아웃 타이머 초기화 lastDataReceivedTime = millis(); } message = read_buff(Buff_Eth_Rd); // If data read if(message != ""){ cmd = demuxCMD(message, &cmdData); message = ""; if(cmd=="DO!"){ dataSize = demuxNum(cmdData, data); client.print(Prcss_DO_Write(data, dataSize)); }else if(cmd=="DI?"){ client.print(Prcss_DI_Read()); }else if(cmd=="AI?"){ client.print(Prcss_AI_Read()); }else if(cmd=="AO!"){ dataSize = demuxNum(cmdData, data); client.print(Prcss_AO(data, dataSize)); }else if(cmd=="PV?"){ client.print(Prcss_PV_Read()); }else if(cmd=="SV?"){ client.print(Prcss_SV_Read()); }else if(cmd=="SV!"){ Serial.println(cmdData); dataSize = demuxNum(cmdData, data); client.print(Prcss_SV_Write(data, dataSize)); }//else if(cmd==""){ //} else{ client.print(cmd + " " + RcvErr); } message = ""; } // Debug if(MODE_DEBUG){ //Serial.print("Received command: "); //Serial.println(command); } // check Timeout if (millis() - lastDataReceivedTime > timeoutPeriod) { Serial.println("Client Disconnected... (Timeout)"); client.stop(); } Periodic_run(); } Serial.println("Client Disconnected..."); } Periodic_run(); } void AnalogIn_Print(){ for (int i = 0; i < Size_AI; i++) { Serial.print(Values_AI[i]); Serial.print("\t"); } Serial.println(); }