From 5b16385aa5076d58073535e1c65128cfe2dd00a7 Mon Sep 17 00:00:00 2001 From: Changwoo Park Date: Wed, 20 Dec 2023 17:03:35 +0900 Subject: [PATCH] =?UTF-8?q?[IFB=5Fv2]=20-=20ENC28J60=20Ethernet=20?= =?UTF-8?q?=EA=B8=B0=EB=B0=98=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20-?= =?UTF-8?q?=20485=20=EB=91=90=EA=B0=9C=20=EC=82=AC=EC=9A=A9=ED=95=A0=20?= =?UTF-8?q?=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=20-=20LabView=20=EB=9D=BC=EC=9D=B4=EB=B8=8C?= =?UTF-8?q?=EB=9F=AC=EB=A6=AC=EB=8A=94=20=EB=91=90=EB=B2=88=EC=A7=B8=20485?= =?UTF-8?q?=20=EC=82=AC=EC=9A=A9=ED=95=A8=EC=88=98=20=EB=AF=B8=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20-=20LabView=20=EC=9D=98=20=EA=B8=80=EB=A1=9C?= =?UTF-8?q?=EB=B2=8C=20=EB=B3=80=EC=88=98=20=EB=B3=84=EB=8F=84=20=EC=84=A0?= =?UTF-8?q?=EC=96=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FC_InterfaceBoard/Ethernet.ino | 44 +--- FC_InterfaceBoard/FC_InterfaceBoard.h | 78 +++++-- FC_InterfaceBoard/FC_InterfaceBoard.ino | 32 ++- FC_InterfaceBoard/MC9.ino | 269 ++++++++++++++++++++---- FC_InterfaceBoard/Periodics.ino | 54 ++--- FC_InterfaceBoard/Processes.ino | 71 ++++--- FC_InterfaceBoard/RS485.ino | 103 +++++++-- Labview/IFB_CMD.vi | Bin 31479 -> 24539 bytes Labview/IF_Loop.vi | Bin 11039 -> 12707 bytes Labview/global_IFB.vi | Bin 0 -> 14414 bytes Labview/serialTest.vi | Bin 0 -> 9514 bytes test_ENC28J60/test_ENC28J60.ino | 17 ++ 12 files changed, 485 insertions(+), 183 deletions(-) create mode 100644 Labview/global_IFB.vi create mode 100644 Labview/serialTest.vi diff --git a/FC_InterfaceBoard/Ethernet.ino b/FC_InterfaceBoard/Ethernet.ino index d821470..658a1df 100644 --- a/FC_InterfaceBoard/Ethernet.ino +++ b/FC_InterfaceBoard/Ethernet.ino @@ -1,16 +1,24 @@ void Ethernet_setup(){ + + /* byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x00 }; IPAddress ip(192, 168, 20, 177); IPAddress gateway(192, 168, 20, 1); IPAddress subnet(255, 255, 255, 0); + */ + uint8_t mac[6] = {MACADDRESS}; + uint8_t myIP[4] = {MYIPADDR}; + uint8_t myMASK[4] = {MYIPMASK}; + uint8_t myDNS[4] = {MYDNS}; + uint8_t myGW[4] = {MYGW}; // Mac as unique value by change last byte from ip last value. - mac[5] = ip[3] & 0xFF; + //mac[5] = ip[3] & 0xFF; // initialize the ethernet device - Ethernet.begin(mac, ip, gateway, subnet); + Ethernet.begin(mac,myIP,myDNS,myGW,myMASK); // start listening for clients server.begin(); - web.begin(); + //web.begin(); // Report address Serial.print("MAC>>"); @@ -28,36 +36,6 @@ void Ethernet_setup(){ Serial.println(Ethernet.localIP()); } -void webReponse(){ - EthernetClient webClient = web.available(); - if (webClient) { - Serial.println("Web client connected"); - while (webClient.connected()) { - if (webClient.available()) { - // 웹 브라우저에서 요청이 도착한 경우 - String request = webClient.readStringUntil('\r'); - //Serial.println(request); - webClient.flush(); - - // 웹 브라우저에 출력할 문구 작성 - String response = "HTTP/1.1 200 OK\r\n"; - response += "Content-Type: text/html\r\n\r\n"; - response += ""; - response += Prcss_AI_Read(); - //response += "

Hello, World!

"; - response += ""; - - // 문구를 웹 브라우저로 전송 - webClient.print(response); - delay(1); - - // 클라이언트 연결 종료 - webClient.stop(); - } - } - } - -} String demuxCMD(String command, String* rightPart) { diff --git a/FC_InterfaceBoard/FC_InterfaceBoard.h b/FC_InterfaceBoard/FC_InterfaceBoard.h index de147d4..1f20ba9 100644 --- a/FC_InterfaceBoard/FC_InterfaceBoard.h +++ b/FC_InterfaceBoard/FC_InterfaceBoard.h @@ -1,12 +1,37 @@ #include "Arduino.h" #include // MsTimer2 v1.1 -#include // Ethernet2 v1.0.4 +//#include // Ethernet2 v1.0.4 +// for ENC28J60 +#include +#include +#include +// ------------------ #include "GP8403.h" +#define VERSION "23-12-20 09:57" +#define COMMENT "MC9: 2x2=4" + +#define AI_RANGE 10 +#define AI_AVG_SIZE 20 + +/* ---------- Ethernet (ENC) ---------- */ +#define MACADDRESS 0x00,0x01,0x02,0x03,0x04,0x05 +#define MYIPADDR 192,168,20,177 +#define MYIPMASK 255,255,255,0 +#define MYDNS 192,168,20,1 +#define MYGW 192,168,20,1 +#define LISTENPORT 5025 + + +/* ---------- Init ---------- */ +bool Init_AO = false; +bool Init_MC9 = false; + /* ---------- Periodics ---------- */ // Flags bool T_1ms = false; bool T_2ms = false; +bool T_4ms = false; bool T_5ms = false; bool T_10ms = false; bool T_20ms = false; @@ -21,8 +46,6 @@ bool T_5000ms = false; // Datas int msCnt = 0; unsigned long timer = 0; -#define AI_AVG_SIZE 50 -#define AI_RANGE 8 /* ---------- Arduino Mega 2560 Basic IO ---------- */ // Pins @@ -56,13 +79,10 @@ DFRobot_GP8403 AO_14(&Wire,0x5F); // Data Storage int RngAO[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -/* ---------- Ethernet (Ethernet Sheld2) ---------- */ -// Ethernet Client +/* ---------- Ethernet (ENC28J60) ---------- */ EthernetClient client; -// SCPI defaults to port 5025 -EthernetServer server(5025); -// HTTP defaults to port 5025 -EthernetServer web(80); +EthernetServer server = EthernetServer(LISTENPORT); + unsigned long lastDataReceivedTime; unsigned long timeoutPeriod = 5000; // 이더넷 타임아웃 시간 (5초) @@ -71,17 +91,21 @@ bool State_eth = false; HardwareSerial* Serials[] = {&Serial1, &Serial2}; -const int BUFF_SIZE = 1024; +const int BUFF_SIZE = 512; char Buff_Eth_Rd[BUFF_SIZE] = {0}; char Buff_485_1_Wr[BUFF_SIZE] = {0}; char Buff_485_1_Rd[BUFF_SIZE] = {0}; char Buff_485_2_Wr[BUFF_SIZE] = {0}; char Buff_485_2_Rd[BUFF_SIZE] = {0}; -String latest_sent_msg; +String latest_sent_msg_1; int numOf485 = 0; int returnTime = 0; +String latest_sent_msg_2; +int numOf485_2 = 0; +int returnTime_2 = 0; + /* ---------- RS485 ---------- */ // 485 CH 1 bool Wait_485_1; @@ -96,9 +120,9 @@ int RS485_1_Values_SV[8*2]; // 485 CH 2 bool Wait_485_2; int Wait_485_2_cnt; -int RS485_2_Addr[2]; -bool RS485_2_Rcv_PV[2]; -bool RS485_2_Rcv_SV[2]; +int RS485_2_Addr[2] = {0,0}; +bool RS485_2_Rcv_PV[2] = {false, false}; +bool RS485_2_Rcv_SV[2] = {false, false}; int RS485_2_Rcv_size = 8; int RS485_2_Values_PV[8*2]; int RS485_2_Values_SV[8*2]; @@ -112,10 +136,13 @@ String Prcss_AI_Read(); String Prcss_AO_Write(unsigned int data[], int dataSize); String Prcss_PV_Read(); String Prcss_SV_Read(); -String Prcss_SV_Write(unsigned int data[], int dataSize); -String Prcss_AT_Write(unsigned int data[], int dataSize); +String Prcss_SV_Write_1(unsigned int data[], int dataSize); +String Prcss_AT_Write_1(unsigned int data[], int dataSize); +String Prcss_SV_Write_2(unsigned int data[], int dataSize); +String Prcss_AT_Write_2(unsigned int data[], int dataSize); String Prcss_RngAO(unsigned int data[], int dataSize); -String Prcss_ChMC9(unsigned int data[], int dataSize); +String Prcss_ChMC9_1(unsigned int data[], int dataSize); +String Prcss_ChMC9_2(unsigned int data[], int dataSize); //Ethernet void Ethernet_setup(); @@ -125,8 +152,10 @@ int demuxNum(String rightPart, unsigned int data[]); //RS485 void RS485_setup(); -void send_485(); -int recieve_485(); +void send_485_1(); +void send_485_2(); +int recieve_485_1(); +int recieve_485_2(); void recieve_485_0(); //GPIO @@ -136,10 +165,13 @@ void read_digital(); //MC9 void setupMC9_1(int i, int data); -String msg_MC9_PV(int addr); -String msg_MC9_SV(int addr); -int saveMC9(String message); -int timeoutMC9(); +void setupMC9_2(int i, int data); +String msg_MC9_PV_read(int addr); +String msg_MC9_SV_read(int addr); +int saveMC9_1(String message); +int saveMC9_2(String message); +int timeoutMC9_1(); +int timeoutMC9_2(); int parseMC9(const String& message, int& addr, String& mode, int data[8], int& crc); String sumMC9(String input); diff --git a/FC_InterfaceBoard/FC_InterfaceBoard.ino b/FC_InterfaceBoard/FC_InterfaceBoard.ino index adf0f47..92fb71a 100644 --- a/FC_InterfaceBoard/FC_InterfaceBoard.ino +++ b/FC_InterfaceBoard/FC_InterfaceBoard.ino @@ -10,11 +10,16 @@ String IdeSerial; // for 485_0 + + + void setup() { // Serial setup (Debug) Serial.begin(9600); - Serial.println("Start!"); - + Serial.print("Version ::: "); + Serial.println(VERSION); + Serial.print("Comment ::: "); + Serial.println(COMMENT); // modules setup (init.) Ethernet_setup(); GPIO_setup(); @@ -87,11 +92,20 @@ void loop() { // MC9 else if(cmd=="SV_1!"){ dataSize = demuxNum(cmdData, data); - client.print(Prcss_SV_Write(data, dataSize)); + client.print(Prcss_SV_Write_1(data, dataSize)); }else if(cmd=="AT_1!"){ dataSize = demuxNum(cmdData, data); - client.print(Prcss_AT_Write(data, dataSize)); + client.print(Prcss_AT_Write_1(data, dataSize)); + + } + else if(cmd=="SV_2!"){ + dataSize = demuxNum(cmdData, data); + client.print(Prcss_SV_Write_2(data, dataSize)); + + }else if(cmd=="AT_2!"){ + dataSize = demuxNum(cmdData, data); + client.print(Prcss_AT_Write_2(data, dataSize)); } // Init @@ -101,11 +115,15 @@ void loop() { }else if(cmd=="RngAO!"){ dataSize = demuxNum(cmdData, data); client.print(Prcss_RngAO(data, dataSize)); - + Init_AO = true; }else if(cmd=="ChMC9_1!"){ dataSize = demuxNum(cmdData, data); - client.print(Prcss_ChMC9(data, dataSize)); - + client.print(Prcss_ChMC9_1(data, dataSize)); + Init_MC9 = true; + }else if(cmd=="ChMC9_2!"){ + dataSize = demuxNum(cmdData, data); + client.print(Prcss_ChMC9_2(data, dataSize)); + Init_MC9 = true; } // Extra diff --git a/FC_InterfaceBoard/MC9.ino b/FC_InterfaceBoard/MC9.ino index d4364c6..a90e6e8 100644 --- a/FC_InterfaceBoard/MC9.ino +++ b/FC_InterfaceBoard/MC9.ino @@ -7,10 +7,15 @@ const int MC9_CH[] = {1000, 1008, 1016, 1024, 1100, 1108, 1116, 1124}; void setupMC9_1(int i, int data){ RS485_1_Addr[i] = data; - Serial.println("MC9 No."+ String(i) + " 's address set as " + String(data)); + Serial.println("MC9_1 No."+ String(i) + " 's address set as " + String(data)); } +void setupMC9_2(int i, int data){ + RS485_2_Addr[i] = data; -String msg_MC9_PV(int addr){ + Serial.println("MC9_2 No."+ String(i) + " 's address set as " + String(data)); +} + +String msg_MC9_PV_read(int addr){ String message = ""; if(addr < 10){ @@ -24,7 +29,7 @@ String msg_MC9_PV(int addr){ return message; } -String msg_MC9_SV(int addr){ +String msg_MC9_SV_read(int addr){ String message = ""; if(addr < 10){ @@ -38,10 +43,13 @@ String msg_MC9_SV(int addr){ return message; } -int msg_MC9_SV_set(unsigned int data[], int dataSize){ +int msg_MC9_SV_set_1(unsigned int data[], int dataSize){ String message = ""; int lp0, lp1; + if(dataSize > 16){ + dataSize = 16; + } if(dataSize > 8){ lp0 = 8; lp1 = dataSize; @@ -49,7 +57,7 @@ int msg_MC9_SV_set(unsigned int data[], int dataSize){ lp0 = dataSize; lp1 = 0; } - + if(RS485_1_Addr[0] != 0){ if(RS485_1_Addr[0] < 10){ message += "0"; @@ -91,13 +99,14 @@ int msg_MC9_SV_set(unsigned int data[], int dataSize){ } message += sumMC9(message); message = "" + message + CRLF; + write_buff_first(Buff_485_1_Wr, message); } return 0; } -int msg_MC9_AT_set(unsigned int data[], int dataSize){ +int msg_MC9_AT_set_1(unsigned int data[], int dataSize){ String message = ""; bool at[16]; @@ -108,7 +117,7 @@ int msg_MC9_AT_set(unsigned int data[], int dataSize){ for (int i = 0; i < 16; i++) { at[i] = (bitRead(data0, i) ? HIGH : LOW); } - + lp0 = 8; lp1 = 8; @@ -126,7 +135,6 @@ int msg_MC9_AT_set(unsigned int data[], int dataSize){ }else{ atFlag = "0000"; // Auto Tuen Off } - message += "0302,"; // Ch No cmd. message += "000" + String(i+1) + ","; // Ch No. message += "0501,"; // AT cmd. @@ -137,6 +145,7 @@ int msg_MC9_AT_set(unsigned int data[], int dataSize){ } message += sumMC9(message); message = "" + message + CRLF; + write_buff_first(Buff_485_1_Wr, message); } @@ -167,11 +176,146 @@ int msg_MC9_AT_set(unsigned int data[], int dataSize){ message = "" + message + CRLF; write_buff_first(Buff_485_1_Wr, message); } + return 0; +} + +int msg_MC9_SV_set_2(unsigned int data[], int dataSize){ + String message = ""; + int lp0, lp1; + + if(dataSize > 16){ + dataSize = 16; + } + if(dataSize > 8){ + lp0 = 8; + lp1 = dataSize; + }else{ + lp0 = dataSize; + lp1 = 0; + } + + if(RS485_2_Addr[0] != 0){ + if(RS485_2_Addr[0] < 10){ + message += "0"; + } + message = String(RS485_2_Addr[0]); + message += "DWR,0" + String(lp0) + ","; + for(int i=0 ; i0)){ + if(RS485_2_Addr[1] < 10){ + message += "0"; + } + message = String(RS485_2_Addr[1]); + message += "DWR,0" + String(lp1-8) + ","; + for(int i=8 ; i0)){ + if(RS485_1_Addr[1] < 10){ + message += "0"; + } + message += String(RS485_2_Addr[1]); + message += "DWR,16,"; + for(int i=0 ; i<8 ; i++){ + String atFlag; + if(at[i+8]){ + atFlag = "0001"; + }else{ + atFlag = "0000"; + } + + message += "0302,"; // Ch No cmd. + message += "000" + String(i+1) + ","; // Ch No. + message += "0501,"; // AT cmd. + message += atFlag; // AT flag + if(i != 7){ + message += ","; + } + } + message += sumMC9(message); + message = "" + message + CRLF; + write_buff_first(Buff_485_2_Wr, message); + } + + return 0; +} + +int saveMC9_1(String message){ int addr; int idx = -1; String mode; @@ -190,7 +334,7 @@ int saveMC9(String message){ return -1; } - if(latest_sent_msg.indexOf("DRS,08,0001") != -1){ // if sent message is PV CMD + if(latest_sent_msg_1.indexOf("DRS,08,0001") != -1){ // if sent message is PV CMD //rcv_10_PV = true; RS485_1_Rcv_PV[idx] = true; for(int i = 0 ; i < RS485_1_Rcv_size ; i++){ @@ -198,7 +342,7 @@ int saveMC9(String message){ } } - if(latest_sent_msg.indexOf("DRS,08,0011") != -1){ // if sent message is SV CMD + if(latest_sent_msg_1.indexOf("DRS,08,0011") != -1){ // if sent message is SV CMD //rcv_10_SV = true; RS485_1_Rcv_SV[idx] = true; for(int i = 0 ; i < RS485_1_Rcv_size ; i++){ @@ -213,7 +357,49 @@ int saveMC9(String message){ } } -int timeoutMC9(){ +int saveMC9_2(String message){ + int addr; + int idx = -1; + String mode; + int data[8]; + int crc; + + if (!parseMC9(message, addr, mode, data, crc)) { + for(int i=0 ; i < 2 ; i++){ // RS485_1 has two rooms for two MC9s + if(RS485_2_Addr[i] == addr){ + idx = i; + break; + } + } + + if(idx < 0){ + return -1; + } + + if(latest_sent_msg_2.indexOf("DRS,08,0001") != -1){ // if sent message is PV CMD + //rcv_10_PV = true; + RS485_2_Rcv_PV[idx] = true; + for(int i = 0 ; i < RS485_1_Rcv_size ; i++){ + RS485_2_Values_PV[i + idx*8] = data[i]; + } + } + + if(latest_sent_msg_2.indexOf("DRS,08,0011") != -1){ // if sent message is SV CMD + //rcv_10_SV = true; + RS485_2_Rcv_SV[idx] = true; + for(int i = 0 ; i < RS485_1_Rcv_size ; i++){ + RS485_2_Values_SV[i + idx*8] = data[i]; + } + } + return 0; + + } else { + Serial.println("error 485 read"); + return -1; + } +} + +int timeoutMC9_1(){ int addr; int idx = -1; String msg, mode, cmd; @@ -222,12 +408,12 @@ int timeoutMC9(){ int crc; // Message parsing - msg = latest_sent_msg.substring(1); + msg = latest_sent_msg_1.substring(1); sscanf(msg.c_str(), "%2d%3s", &addr, &dummy); - Serial.print("485 not responced... (Timeout) Req msg : " + latest_sent_msg); + //230721 Serial.print("485 not responced... (Timeout) Req msg : " + latest_sent_msg_1); - if (latest_sent_msg.indexOf("DRS") != -1) { + if (latest_sent_msg_1.indexOf("DRS") != -1) { for(int i=0 ; i < 2 ; i++){ // RS485_1 has two rooms for two MC9s // Find idx of array if(RS485_1_Addr[i] == addr){ @@ -236,23 +422,38 @@ int timeoutMC9(){ } } - // If not matched, return error - if(idx < 0){ + return 0; + + } else { Serial.println(); return -1; - } + } - if(latest_sent_msg.indexOf("DRS,08,0001") != -1){ // if sent message is PV CMD - RS485_1_Rcv_PV[idx] = false; - Serial.print(" >> PV @"); - Serial.println(idx); - } - if(latest_sent_msg.indexOf("DRS,08,0011") != -1){ // if sent message is SV CMD - RS485_1_Rcv_SV[idx] = false; - - Serial.print(" >> SV @"); - Serial.println(idx); +} + +int timeoutMC9_2(){ + int addr; + int idx = -1; + String msg, mode, cmd; + char dummy[4]; + int data[8]; + int crc; + // Message parsing + + msg = latest_sent_msg_2.substring(1); + sscanf(msg.c_str(), "%2d%3s", &addr, &dummy); + + //230721 Serial.print("485 not responced... (Timeout) Req msg : " + latest_sent_msg_1); + + if (latest_sent_msg_2.indexOf("DRS") != -1) { + for(int i=0 ; i < 2 ; i++){ // RS485_1 has two rooms for two MC9s + // Find idx of array + if(RS485_2_Addr[i] == addr){ + idx = i; + break; + } } + return 0; } else { @@ -260,18 +461,6 @@ int timeoutMC9(){ return -1; } - /* - if(latest_sent_msg == MC9_10_PV){ - //rcv_10_PV = false; - } - if(latest_sent_msg == MC9_10_SV){ - //rcv_10_SV = false; - - }else { - Serial.println("error 485 read"); - return -1; - } - */ } int parseMC9(const String& message, int& addr, String& mode, int data[8], int& crc) { diff --git a/FC_InterfaceBoard/Periodics.ino b/FC_InterfaceBoard/Periodics.ino index cc1cb05..97de960 100644 --- a/FC_InterfaceBoard/Periodics.ino +++ b/FC_InterfaceBoard/Periodics.ino @@ -1,17 +1,18 @@ void Periodic_run(){ if(T_1ms){ - // Read Arduino AI // read_analog(); T_1ms = false; } if(T_2ms){ - // Read Arduino AI read_analog(); // runtime of 1.xxx ms @8ch T_2ms = false; } + if(T_4ms){ + //read_analog(); + T_4ms = false; + } if(T_5ms){ - // Read Arduino AI //read_analog(); // runtime of 2.048012 ms @16ch T_5ms = false; } @@ -20,13 +21,11 @@ void Periodic_run(){ T_10ms = false; } if(T_20ms){ - // send and recieve RS485 - send_485(); - recieve_485(); + send_485_1(); + recieve_485_1(); T_20ms = false; } if(T_50ms){ - // Read Arduino DI read_digital(); T_50ms = false; } @@ -39,41 +38,23 @@ void Periodic_run(){ T_200ms = false; } if(T_500ms){ - // RS485 recieve (for developing) - recieve_485_0(); + + recieve_485_0(); // RS485 recieve (for developing) T_500ms = false; } if(T_1000ms){ + + T_1000ms = false; + } + if(T_2000ms){ // Read MC9 PV for(int i=0 ; i < 2 ; i++){ if(RS485_1_Addr[i] > 0){ - write_buff(Buff_485_1_Wr, msg_MC9_PV(RS485_1_Addr[i])); + write_buff(Buff_485_1_Wr, msg_MC9_PV_read(RS485_1_Addr[i])); } } - /* -float sum_AI = 0.0f; - float factor = 1.0f / AI_AVG_SIZE; - String str = "AI?:"; - for (int i = 0; i < Size_AI; i++) { - int sum_AI = 0; - for(int j = 0; j < AI_AVG_SIZE; j++) { - sum_AI += (float) Recent_AI[i][j] * factor; - } - sum_AI *= 100.0f; // convert the sum to an integer representation - unsigned int integer_part = (unsigned int)sum_AI; - char formattedNumber[5]; // 4자리 숫자 + 널 종료 문자 - //sprintf(formattedNumber, "%04X", Values_AI[i]); // 4자리로 고정된 형식의 문자열 생성 - sprintf(formattedNumber, "%04X", integer_part); // 4자리로 고정된 형식의 문자열 생성 - str += formattedNumber; // 형식화된 문자열 추가 - str += ','; - } - Serial.println(str); - */ - T_1000ms = false; - } - if(T_2000ms){ - if(numOf485 > 0){ + if(numOf485 > 10){ Serial.print("----- remain 485 buff : "); // For Serial.println(numOf485); // Debugging } @@ -83,7 +64,7 @@ float sum_AI = 0.0f; // Read MC9 SV for(int i=0 ; i < 2 ; i++){ if(RS485_1_Addr[i] > 0){ - write_buff(Buff_485_1_Wr, msg_MC9_SV(RS485_1_Addr[i])); + //write_buff(Buff_485_1_Wr, msg_MC9_SV_read(RS485_1_Addr[i])); } } T_5000ms = false; @@ -94,9 +75,12 @@ void timer_1ms(){ msCnt += 1; T_1ms = true; - if (msCnt % 4 == 0){ + if (msCnt % 2 == 0){ T_2ms = true; } + if (msCnt % 4 == 0){ + T_4ms = true; + } if (msCnt % 5 == 0){ T_5ms = true; } diff --git a/FC_InterfaceBoard/Processes.ino b/FC_InterfaceBoard/Processes.ino index 917d5cb..db32027 100644 --- a/FC_InterfaceBoard/Processes.ino +++ b/FC_InterfaceBoard/Processes.ino @@ -1,5 +1,6 @@ String Prcss_ALL_Read(){ String str = ""; + char formattedNumber[5]; // 4자리 숫자 + 널 종료 문자 float factor = 1.0f / AI_AVG_SIZE; str += "AI?:"; @@ -12,7 +13,6 @@ String Prcss_ALL_Read(){ sum_AI *= 50.0f; // convert the sum to an integer representation, Transfer data max(0xFFFF): 65,535. Each data max(10bit ADC): 1024. 1024 x 50 = 51,200 unsigned int integer_part = (unsigned int)sum_AI; - char formattedNumber[5]; // 4자리 숫자 + 널 종료 문자 //sprintf(formattedNumber, "%04X", Values_AI[i]); // 4자리로 고정된 형식의 문자열 생성 sprintf(formattedNumber, "%04X", integer_part); // 4자리로 고정된 형식의 문자열 생성 str += formattedNumber; // 형식화된 문자열 추가 @@ -21,7 +21,7 @@ String Prcss_ALL_Read(){ str += RcvOK; str += "DI?:"; - char formattedNumber[5]; + sprintf(formattedNumber, "%04X", Values_DI); str += formattedNumber; str += ','; @@ -29,7 +29,6 @@ String Prcss_ALL_Read(){ str += "PV_1?:"; for (int i = 0; i < RS485_1_Rcv_size*2; i++) { - char formattedNumber[5]; int rcv = int(RS485_1_Rcv_PV[i/RS485_1_Rcv_size]); sprintf(formattedNumber, "%04X", RS485_1_Values_PV[i] * rcv); @@ -41,7 +40,6 @@ String Prcss_ALL_Read(){ str += "SV_1?:"; for (int i = 0; i < RS485_1_Rcv_size*2; i++) { - char formattedNumber[5]; int rcv = int(RS485_1_Rcv_SV[i/RS485_1_Rcv_size]); sprintf(formattedNumber, "%04X", RS485_1_Values_SV[i] * rcv); @@ -50,6 +48,11 @@ String Prcss_ALL_Read(){ } str += RcvOK; + str += "INIT?:"; + sprintf(formattedNumber, "%04X", ((unsigned int)(Init_AO & Init_MC9))); + str += formattedNumber; + str += ','; + str += RcvOK; return str + FIN; } @@ -83,44 +86,43 @@ String Prcss_AO_Write(unsigned int data[], int dataSize){ return str + FIN; } -String Prcss_SV_Write(unsigned int data[], int dataSize){ - String str = "SV!:"; +String Prcss_SV_Write_1(unsigned int data[], int dataSize){ + String str = "SV_1!:"; + + msg_MC9_SV_set_1(data, dataSize); + + str += RcvOK; + Serial.println(str); + return str + FIN; +} + +String Prcss_AT_Write_1(unsigned int data[], int dataSize){ + String str = "AT_1!:"; - msg_MC9_SV_set(data, dataSize); + msg_MC9_AT_set_1(data, dataSize); str += RcvOK; return str + FIN; } -String Prcss_AT_Write(unsigned int data[], int dataSize){ - String str = "AT!:"; +String Prcss_SV_Write_2(unsigned int data[], int dataSize){ + String str = "SV_2!:"; - msg_MC9_AT_set(data, dataSize); + msg_MC9_SV_set_2(data, dataSize); str += RcvOK; return str + FIN; } -/* -String Prcss_AT_Write(bool onOff){ - String str = "AT!:"; - String message, cmd; - - cmd = "10DWR,02,0302,0001,0501,"; - if(onOff){ - cmd += "0001"; - }else{ - cmd += "0000"; - } - - message = cmd; - message += sumMC9(message); - message = "" + message + CRLF; - write_buff_first(Buff_485_Wr, message); + +String Prcss_AT_Write_2(unsigned int data[], int dataSize){ + String str = "AT_2!:"; + + msg_MC9_AT_set_2(data, dataSize); str += RcvOK; return str + FIN; } -*/ + String Prcss_RngAO(unsigned int data[], int dataSize){ String str = "RngAO!:"; int rng = 0; @@ -139,8 +141,8 @@ String Prcss_RngAO(unsigned int data[], int dataSize){ return str + FIN; } -String Prcss_ChMC9(unsigned int data[], int dataSize){ - String str = "ChMC9!:"; +String Prcss_ChMC9_1(unsigned int data[], int dataSize){ + String str = "ChMC9_1!:"; int d = 20; for(int i=0 ; i 25){ // Timeout = periodic(20ms) x 20 = 400 msec + if(Wait_485_1_cnt > 40){ // Timeout = periodic(20ms) x 25 = 500 msec //Serial.println("485 not responced... (Timeout)"); - timeoutMC9(); - //if((latest_sent_msg == MC9_10_PV) ||(latest_sent_msg == MC9_10_SV)){ - - /* - if((latest_sent_msg == msg_MC9_PV(10)) || (latest_sent_msg == msg_MC9_SV(10))){ - timeoutMC9(); - } - */ - latest_sent_msg = ""; + timeoutMC9_1(); + + latest_sent_msg_1 = ""; Wait_485_1 = false; Wait_485_1_cnt = 0; numOf485--; - return -1; } } @@ -71,8 +85,8 @@ int recieve_485(){ String message = read_buff(Buff_485_1_Rd); if(message != ""){ numOf485--; - if(latest_sent_msg.indexOf("DRS") != -1){ - saveMC9(message); + if(latest_sent_msg_1.indexOf("DRS") != -1){ + saveMC9_1(message); } else{ Serial.print("----- 485 rcv : "); @@ -85,6 +99,45 @@ int recieve_485(){ return 0; } +int recieve_485_2(){ + // Timeout code + if(Wait_485_2){ + Wait_485_2_cnt++; + if(Wait_485_2_cnt > 40){ // Timeout = periodic(20ms) x 25 = 500 msec + //Serial.println("485 not responced... (Timeout)"); + timeoutMC9_2(); + + latest_sent_msg_2 = ""; + Wait_485_2 = false; + Wait_485_2_cnt = 0; + numOf485--; + + return -1; + } + } + // Receive pv data + while(Wait_485_2 && (Serial2.available() > 0)) { + char c = Serial2.read(); + write_buff_c(Buff_485_2_Rd, c); + } + + String message = read_buff(Buff_485_2_Rd); + if(message != ""){ + numOf485--; + if(latest_sent_msg_2.indexOf("DRS") != -1){ + saveMC9_2(message); + } + else{ + Serial.print("----- 485 rcv : "); + Serial.println(message); + } + Wait_485_2 = false; + Wait_485_2_cnt = 0; + } + + return 0; +} + /* For Test from PC */ void recieve_485_0(){ @@ -102,3 +155,21 @@ void recieve_485_0(){ IdeSerial = ""; } } + +void send_temp(bool F){ + + String message = "TEST"; + if(F) { + message += CRLF; + message += " with CRLF"; + message += CRLF; + } + + digitalWrite(RS485_OE_1, Snd_485); delay(5); + Serial1.print(message); + returnTime = millis(); + Serial1.flush(); + digitalWrite(RS485_OE_1, Rcv_485); delay(5); + + +} diff --git a/Labview/IFB_CMD.vi b/Labview/IFB_CMD.vi index 72d466c5e433ab27b81d1aef7c37043f69179e23..f83bb186b7af7739f8d3091d5a088a21a0f7d3d8 100644 GIT binary patch delta 18866 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 delta 9241 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 MQEe@CNpI)>2Qi>=9smFU literal 0 HcmV?d00001 diff --git a/Labview/serialTest.vi b/Labview/serialTest.vi new file mode 100644 index 0000000000000000000000000000000000000000..652785c2fd6639b000c081be8d70a5fd6425eea5 GIT binary patch literal 9514 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 a$UkG_;KpENo^~FN)+o50rx&pE=l=mQYCZq} literal 0 HcmV?d00001 diff --git a/test_ENC28J60/test_ENC28J60.ino b/test_ENC28J60/test_ENC28J60.ino index 196a45f..be02cf4 100644 --- a/test_ENC28J60/test_ENC28J60.ino +++ b/test_ENC28J60/test_ENC28J60.ino @@ -31,9 +31,26 @@ EthernetServer server = EthernetServer(LISTENPORT); void setup() { Serial.begin(9600); + Serial.println("Serial Done"); Ethernet.begin(mac,myIP,myDNS,myGW,myMASK); // start listening for clients server.begin(); + + + // Report address + Serial.print("MAC>>"); + for (int i = 0; i < 6; i++) { + if (mac[i] < 16) { + Serial.print("0"); + } + Serial.print(mac[i], HEX); + if (i < 5) { + Serial.print(":"); + } + } + Serial.println(); + Serial.print("IP >>"); + Serial.println(Ethernet.localIP()); } void loop() {