From 06967ceb604b20b824df16db2d585e3bc9a5220a Mon Sep 17 00:00:00 2001 From: Changwoo Park Date: Tue, 16 May 2023 19:41:23 +0900 Subject: [PATCH] =?UTF-8?q?[MC9]=20[LIB]=20-=20MC9=20PV=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=20=EB=B0=8F=20=EC=88=98=EC=8B=A0=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=20=20=E3=84=B4=20500ms=20=EB=A7=88?= =?UTF-8?q?=EB=8B=A4=20=EC=9A=94=EC=B2=AD=20=ED=9B=84,=2010ms=20=EB=A7=88?= =?UTF-8?q?=EB=8B=A4=20=EC=9D=91=EB=8B=B5=20=ED=99=95=EC=9D=B8=20=20=20?= =?UTF-8?q?=E3=84=B4=20=EC=88=98=EC=8B=A0=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EB=AF=B8=EC=9E=91=EC=84=B1=20-=20Library?= =?UTF-8?q?=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FC_InferfaceBoard/FC_InferfaceBoard.ino | 83 +++++++++++++----------- FC_InferfaceBoard/GPIO.ino | 14 ++++ FC_InferfaceBoard/MC9.ino | 65 +++++++++++++++++++ FC_InferfaceBoard/Processes.ino | 26 +++++++- FC_InferfaceBoard/TCPIP - Write Read.vi | Bin 21570 -> 35194 bytes FC_InferfaceBoard/Utils.ino | 18 ++--- FC_InferfaceBoard/periodics.ino | 34 ++++++++++ libraries/Scitech/SC_AI.cpp | 27 -------- libraries/Scitech/SC_AI.h | 7 -- libraries/Scitech/SC_MC9.cpp | 32 --------- libraries/Scitech/SC_MC9.h | 15 ----- 11 files changed, 192 insertions(+), 129 deletions(-) create mode 100644 FC_InferfaceBoard/GPIO.ino create mode 100644 FC_InferfaceBoard/MC9.ino create mode 100644 FC_InferfaceBoard/periodics.ino delete mode 100644 libraries/Scitech/SC_AI.cpp delete mode 100644 libraries/Scitech/SC_AI.h delete mode 100644 libraries/Scitech/SC_MC9.cpp delete mode 100644 libraries/Scitech/SC_MC9.h diff --git a/FC_InferfaceBoard/FC_InferfaceBoard.ino b/FC_InferfaceBoard/FC_InferfaceBoard.ino index 15f6ff5..891bdb3 100644 --- a/FC_InferfaceBoard/FC_InferfaceBoard.ino +++ b/FC_InferfaceBoard/FC_InferfaceBoard.ino @@ -3,13 +3,16 @@ #include // ?? -#include "SC_AI.h" // Differential analog input collector -#include "SC_MC9.h" // MC9 Tempreture Controller +//#include "SC_AI.h" // Differential analog input collector +//#include "SC_MC9.h" // MC9 Tempreture Controller #define RcvOK "OK\r\n" #define RcvErr "ER\r\n" #define MODE_DEBUG false +String demuxCMD(String command, String* rightPart); +int demuxNum(String rightPart, unsigned int data[]); + // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network. // gateway and subnet are optional: @@ -33,9 +36,14 @@ bool connection = false; char buffer[1024]; int Size_AI = 16; -int AI_VALUES[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; +int Values_AI[16]; +int Size_PV = 8; +int Values_PV[8]; + +String Buf_485; +bool Wait_485; +int Wait_485_cnt; + int msCnt = 0; unsigned long timer = 0; @@ -47,8 +55,8 @@ void setup() { TCPIP_setup(mac, ip, gateway, subnet); // scitech korea Library - SC_AI_setup(); - SC_MC9_setup(); + GPIO_setup(); + MC9_setup(); // Timer set MsTimer2::set(10, periodic_10ms); @@ -77,7 +85,8 @@ void loop() { webReponse(); client = server.available(); - + //Prcss_SV(); + //delay(100); if (client) { // check if client is connected Serial.println("Client Connected!!!"); @@ -90,31 +99,49 @@ void loop() { // check for command byte if (client.available() > 0) { char c; + bool cr = false; String command; String cmd; unsigned int data[32]; + String message; int dataSize; busy = true; // Read message by byte while ((c = client.read())) { - // Read data until LF or CR - if((c != 10) && (c != 13)){ - command += c; + + // Read data until CR or LF + if((c != 13) && (c != 10)){ + command += c; }else{ break; - } + } } - cmd = demuxCMD(command, data, &dataSize); + // -------------------- Process CMD -------------------- // + cmd = demuxCMD(command, &message); if(cmd=="AI"){ client.print(Prcss_AI()); + }else if(cmd=="AO"){ + dataSize = demuxNum(message, data); client.print(Prcss_AO(data, dataSize)); - }else{ - client.print(RcvErr); + }else if(cmd=="PV"){ + client.print(Prcss_PV()); + }else if(cmd=="SV"){ + client.print(Prcss_SV()); + + }else if(cmd=="RS"){ + client.print(Prcss_RS(message)); + + }//else if(cmd==""){ + + //} + else{ + client.print(cmd + " " + RcvErr); + } @@ -141,7 +168,7 @@ void loop() { Serial.println("Client Disconnected..."); } - + } @@ -154,32 +181,10 @@ void TCPIP_setup(byte mac[], IPAddress ip, IPAddress gateway, IPAddress subnet){ web.begin(); } -void periodic_10ms(){ - - - msCnt += 10; - if(!busy){ - - SC_AI(AI_VALUES, Size_AI); - - // periodic_1s - if (msCnt > 1000){ - msCnt = 0; - periodic_1s(); - } - } - -} - -void periodic_1s(){ - - //AnalogIn_Print(); -} - void AnalogIn_Print(){ for (int i = 0; i < Size_AI; i++) { - Serial.print(AI_VALUES[i]); + Serial.print(Values_AI[i]); Serial.print("\t"); } Serial.println(); diff --git a/FC_InferfaceBoard/GPIO.ino b/FC_InferfaceBoard/GPIO.ino new file mode 100644 index 0000000..89087ab --- /dev/null +++ b/FC_InferfaceBoard/GPIO.ino @@ -0,0 +1,14 @@ +int aipin[] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15}; + +void GPIO_setup(){ + +} + +void read_analog(int arr[], int size){ + int i = 0; + + for(i = 0 ; i < size ; i++){ + arr[i] = analogRead(aipin[i]); + } + +} \ No newline at end of file diff --git a/FC_InferfaceBoard/MC9.ino b/FC_InferfaceBoard/MC9.ino new file mode 100644 index 0000000..e1db381 --- /dev/null +++ b/FC_InferfaceBoard/MC9.ino @@ -0,0 +1,65 @@ +// Sample communication Code for RS 485 Shield with Arduino Mega 2560 +#define RS485_OE_1 22 //RS485 CH#1 Output Enable => pin 22 for CH#1 +#define Snd_485 HIGH +#define Rcv_485 LOW + +void MC9_setup(){ + Serial1.setTimeout(300); + Serial1.begin(9600); + pinMode(RS485_OE_1, OUTPUT); + delay(10); + digitalWrite(RS485_OE_1, Rcv_485); +} + +void read_mc9_req(){ + if(!Wait_485){ + String command = "10DRS,03,0011C7\r\n"; + + // Send request to return pv data + digitalWrite(RS485_OE_1, Snd_485); delay(5); + Serial1.print(command); + Serial1.flush(); + digitalWrite(RS485_OE_1, Rcv_485); delay(5); + Wait_485 = true; + Wait_485_cnt = 0; + } +} + +void read_mc9(int arr[], int size){ + char c; + String message; + + // Timeout code + if(Wait_485){ + Wait_485_cnt++; + if(Wait_485_cnt > 200){ // Timeout = periodic(10ms) x 200 = 2sec + Wait_485 = false; + Wait_485_cnt = 0; + } + } + // Receive pv data + while(Wait_485 && (Serial1.available() > 0)) { + c = Serial1.read(); + Buf_485 += c; + Serial.print(c, HEX); + Serial.print(" "); + + if(c == '\n'){ + message = Buf_485; + Buf_485 = ""; + Wait_485 = false; + Wait_485_cnt = 0; + } + } + + if(message != ""){ + Serial.println(message); + } + +} + +void write_mc9(int arr[], int size){ + cli();//stop interrupts + Serial1.print("485 Write^^"); //Serial Write ADC_Value to RS-485 Bus + sei();//allow interrupts +} \ No newline at end of file diff --git a/FC_InferfaceBoard/Processes.ino b/FC_InferfaceBoard/Processes.ino index a87dde4..c906066 100644 --- a/FC_InferfaceBoard/Processes.ino +++ b/FC_InferfaceBoard/Processes.ino @@ -3,7 +3,7 @@ String Prcss_AI(){ String str = ""; for (int i = 0; i < Size_AI; i++) { char formattedNumber[5]; // 4자리 숫자 + 널 종료 문자 - sprintf(formattedNumber, "%04X", AI_VALUES[i]); // 4자리로 고정된 형식의 문자열 생성 + sprintf(formattedNumber, "%04X", Values_AI[i]); // 4자리로 고정된 형식의 문자열 생성 str += formattedNumber; // 형식화된 문자열 추가 //str += String(AI_VALUES[i]); str += ','; @@ -22,3 +22,27 @@ String Prcss_AO(unsigned int data[], int dataSize){ Serial.println(str); return RcvOK; } + +String Prcss_RS(String message){ + Serial.println(message); + return RcvOK; +} + +String Prcss_PV(){ + + String str = "PV "; + digitalWrite(RS485_OE_1, Snd_485); + Serial1.print("485 Read!!"); //Serial Write ADC_Value to RS-485 Bus + str += RcvOK; + return str; +} + +String Prcss_SV(){ + + String str = "SV "; + + + str += RcvOK; + return str; +} + diff --git a/FC_InferfaceBoard/TCPIP - Write Read.vi b/FC_InferfaceBoard/TCPIP - Write Read.vi index 5709c640b6c6705bed639e8003f182f5d6f49044..5ea2f966ba55d497d2d2bbcbc5251fb39b678758 100644 GIT binary patch delta 27028 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%0D{unrlG5#`a-Ht6QP*MW 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

6rSAeA~%siYN}r3$)dzaZ}q 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 delta 13262 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 1000){ + msCnt = 0; + } + } +} diff --git a/libraries/Scitech/SC_AI.cpp b/libraries/Scitech/SC_AI.cpp deleted file mode 100644 index e397b9c..0000000 --- a/libraries/Scitech/SC_AI.cpp +++ /dev/null @@ -1,27 +0,0 @@ -/* - History: - 20230504 - V0.2 - 20230504 - V0.1 init. -*/ - -#include - -#include -int aipin[] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15}; -void SC_AI_setup(){ - -} - - -void SC_AI(int arr[], int size){ - //cli();//stop interrupts - - int i = 0; - for(i = 0 ; i < size ; i++){ - arr[i] = analogRead(aipin[i]); - } - - - //sei();//allow interrupts -} - diff --git a/libraries/Scitech/SC_AI.h b/libraries/Scitech/SC_AI.h deleted file mode 100644 index 46f34ea..0000000 --- a/libraries/Scitech/SC_AI.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef SC_AI_h -#define SC_AI_h - -void SC_AI_setup(); -void SC_AI(int arr[], int size); - -#endif diff --git a/libraries/Scitech/SC_MC9.cpp b/libraries/Scitech/SC_MC9.cpp deleted file mode 100644 index 9dd62d7..0000000 --- a/libraries/Scitech/SC_MC9.cpp +++ /dev/null @@ -1,32 +0,0 @@ -/* - History: - 20230504 - V0.2 - 20230504 - V0.1 init. -*/ - -#include - -#include -//#include - -void SC_MC9_setup(){ - Serial1.begin(9600); - pinMode(RS485_OE_1, OUTPUT); - delay(10); - digitalWrite(RS485_OE_1, HIGH); -} - - -void SC_MC9_read(int arr[], int size){ - - cli();//stop interrupts - Serial1.print("485 Read!!"); //Serial Write ADC_Value to RS-485 Bus - sei();//allow interrupts - -} - -void SC_MC9_write(int arr[], int size){ - cli();//stop interrupts - Serial1.print("485 Write^^"); //Serial Write ADC_Value to RS-485 Bus - sei();//allow interrupts -} \ No newline at end of file diff --git a/libraries/Scitech/SC_MC9.h b/libraries/Scitech/SC_MC9.h deleted file mode 100644 index 0af6355..0000000 --- a/libraries/Scitech/SC_MC9.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef SC_MC9_h -#define SC_MC9_h - -// Sample communication Code for RS 485 Shield with Arduino Mega 2560 -#define RS485_OE_1 24 //RS485 CH#1 Output Enable => pin 24 for CH#1 -#define RS485_OE_2 26 //RS485 CH#2 Output Enable => pin 26 for CH#2 -#define Snd_485 HIGH -#define Rcv_485 LOW - - -void SC_MC9_setup(); -void SC_MC9_read(int arr[], int size); -void SC_MC9_write(int arr[], int size); - -#endif