|
|
|
@ -22,9 +22,16 @@ String msg_MC9_PV_read(int addr){
|
|
|
|
|
message += "0";
|
|
|
|
|
}
|
|
|
|
|
message += String(addr); // Address
|
|
|
|
|
message += "DRS,08,0001"; // Data Read Seris 08 data from 0001(PV) ch
|
|
|
|
|
message += sumMC9(message); // Check Sum
|
|
|
|
|
message = "" + message; // Start with STX
|
|
|
|
|
|
|
|
|
|
if(addr < NX4_ADDR){ //MC9
|
|
|
|
|
message += "DRS,08,0001"; // Data Read Seris 08 data from 0001(PV) ch
|
|
|
|
|
message += sumMC9(message); // Check Sum
|
|
|
|
|
message = "" + message; // Start with STX
|
|
|
|
|
}else{ //NX4, only 1 Ch
|
|
|
|
|
message += "DRS,01,0001"; // Data Read Seris 08 data from 0001(PV) ch
|
|
|
|
|
message += sumMC9(message); // Check Sum
|
|
|
|
|
message = "" + message; // Start with STX
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return message;
|
|
|
|
|
}
|
|
|
|
@ -36,9 +43,16 @@ String msg_MC9_SV_read(int addr){
|
|
|
|
|
message += "0";
|
|
|
|
|
}
|
|
|
|
|
message += String(addr); // Address
|
|
|
|
|
message += "DRS,08,0011"; // Data Read Seris 08 data from 0001(SV) ch
|
|
|
|
|
message += sumMC9(message); // Check Sum
|
|
|
|
|
message = "" + message; // Start with STX
|
|
|
|
|
|
|
|
|
|
if(addr < NX4_ADDR){ //MC9
|
|
|
|
|
message += "DRS,08,0011"; // Data Read Seris 08 data from 0001(SV) ch
|
|
|
|
|
message += sumMC9(message); // Check Sum
|
|
|
|
|
message = "" + message; // Start with STX
|
|
|
|
|
}else{ //NX4, only 1 Ch
|
|
|
|
|
message += "DRS,01,0002"; // Data Read Seris 08 data from 0001(PV) ch
|
|
|
|
|
message += sumMC9(message); // Check Sum
|
|
|
|
|
message = "" + message; // Start with STX
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return message;
|
|
|
|
|
}
|
|
|
|
@ -46,7 +60,7 @@ String msg_MC9_SV_read(int addr){
|
|
|
|
|
int msg_MC9_SV_set_1(unsigned int data[], int dataSize){
|
|
|
|
|
String message = "";
|
|
|
|
|
int lp0, lp1;
|
|
|
|
|
|
|
|
|
|
int addr;
|
|
|
|
|
if(dataSize > 16){
|
|
|
|
|
dataSize = 16;
|
|
|
|
|
}
|
|
|
|
@ -58,26 +72,58 @@ int msg_MC9_SV_set_1(unsigned int data[], int dataSize){
|
|
|
|
|
lp1 = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(RS485_1_Addr[0] != 0){
|
|
|
|
|
if(RS485_1_Addr[0] < 10){
|
|
|
|
|
addr = RS485_1_Addr[0];
|
|
|
|
|
if(addr != 0){
|
|
|
|
|
if(addr < 10){
|
|
|
|
|
message += "0";
|
|
|
|
|
}
|
|
|
|
|
message = String(RS485_1_Addr[0]);
|
|
|
|
|
message += "DWR,0" + String(lp0) + ",";
|
|
|
|
|
for(int i=0 ; i<lp0 ; i++){
|
|
|
|
|
message = String(addr);
|
|
|
|
|
|
|
|
|
|
if(addr < NX4_ADDR){ //MC9
|
|
|
|
|
message += "DWR,0" + String(lp0) + ",";
|
|
|
|
|
for(int i=0 ; i<lp0 ; i++){
|
|
|
|
|
char hexStr[5]; // Buffer to hold the hexadecimal string (4 characters + null terminator)
|
|
|
|
|
sprintf(hexStr, "%04X", data[i]); // Format as 4 digit uppercase hexadecimal
|
|
|
|
|
|
|
|
|
|
message += MC9_CH[i] + 1; // ZONE 1
|
|
|
|
|
message += ",";
|
|
|
|
|
message += String(hexStr);
|
|
|
|
|
if(i != (lp0-1)){
|
|
|
|
|
message += ",";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
message += sumMC9(message);
|
|
|
|
|
message = "" + message + CRLF;
|
|
|
|
|
if(write_buff_first(Buff_485_1_Wr, message)){
|
|
|
|
|
numOf485_1++;
|
|
|
|
|
}
|
|
|
|
|
}else{ //NX4, only 1 Ch
|
|
|
|
|
char hexStr[5]; // Buffer to hold the hexadecimal string (4 characters + null terminator)
|
|
|
|
|
sprintf(hexStr, "%04X", data[i]); // Format as 4 digit uppercase hexadecimal
|
|
|
|
|
String messageRate = message;
|
|
|
|
|
|
|
|
|
|
message += MC9_CH[i] + 1; // ZONE 1
|
|
|
|
|
message += ",";
|
|
|
|
|
//SV Message
|
|
|
|
|
message += "DWS,01,0301,";
|
|
|
|
|
sprintf(hexStr, "%04X", data[0]); // Format as 4 digit uppercase hexadecimal
|
|
|
|
|
message += String(hexStr);
|
|
|
|
|
if(i != (lp0-1)){
|
|
|
|
|
message += ",";
|
|
|
|
|
message += sumMC9(message);
|
|
|
|
|
message = "" + message + CRLF;
|
|
|
|
|
if(write_buff_first(Buff_485_1_Wr, message)){
|
|
|
|
|
numOf485_1++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Up,Down Rate Message
|
|
|
|
|
messageRate += "DWS,02,0108,";
|
|
|
|
|
sprintf(hexStr, "%04X", data[1]); // Format as 4 digit uppercase hexadecimal
|
|
|
|
|
messageRate += String(hexStr) + "," + String(hexStr);
|
|
|
|
|
messageRate += sumMC9(messageRate);
|
|
|
|
|
messageRate = "" + messageRate + CRLF;
|
|
|
|
|
|
|
|
|
|
if(write_buff_first(Buff_485_1_Wr, messageRate)){
|
|
|
|
|
numOf485_1++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
message += sumMC9(message);
|
|
|
|
|
message = "" + message + CRLF;
|
|
|
|
|
write_buff_first(Buff_485_1_Wr, message);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if((RS485_1_Addr[1] != 0) && (lp1>0)){
|
|
|
|
@ -100,7 +146,9 @@ int msg_MC9_SV_set_1(unsigned int data[], int dataSize){
|
|
|
|
|
message += sumMC9(message);
|
|
|
|
|
message = "" + message + CRLF;
|
|
|
|
|
|
|
|
|
|
write_buff_first(Buff_485_1_Wr, message);
|
|
|
|
|
if(write_buff_first(Buff_485_1_Wr, message)){
|
|
|
|
|
numOf485_1++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
@ -146,7 +194,9 @@ int msg_MC9_AT_set_1(unsigned int data[], int dataSize){
|
|
|
|
|
message += sumMC9(message);
|
|
|
|
|
message = "" + message + CRLF;
|
|
|
|
|
|
|
|
|
|
write_buff_first(Buff_485_1_Wr, message);
|
|
|
|
|
if(write_buff_first(Buff_485_1_Wr, message)){
|
|
|
|
|
numOf485_1++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
message = "";
|
|
|
|
@ -174,7 +224,9 @@ int msg_MC9_AT_set_1(unsigned int data[], int dataSize){
|
|
|
|
|
}
|
|
|
|
|
message += sumMC9(message);
|
|
|
|
|
message = "" + message + CRLF;
|
|
|
|
|
write_buff_first(Buff_485_1_Wr, message);
|
|
|
|
|
if(write_buff_first(Buff_485_1_Wr, message)){
|
|
|
|
|
numOf485_1++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
@ -182,7 +234,8 @@ int msg_MC9_AT_set_1(unsigned int data[], int dataSize){
|
|
|
|
|
int msg_MC9_SV_set_2(unsigned int data[], int dataSize){
|
|
|
|
|
String message = "";
|
|
|
|
|
int lp0, lp1;
|
|
|
|
|
|
|
|
|
|
int addr;
|
|
|
|
|
|
|
|
|
|
if(dataSize > 16){
|
|
|
|
|
dataSize = 16;
|
|
|
|
|
}
|
|
|
|
@ -194,26 +247,59 @@ int msg_MC9_SV_set_2(unsigned int data[], int dataSize){
|
|
|
|
|
lp1 = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(RS485_2_Addr[0] != 0){
|
|
|
|
|
if(RS485_2_Addr[0] < 10){
|
|
|
|
|
addr = RS485_2_Addr[0];
|
|
|
|
|
if(addr != 0){
|
|
|
|
|
if(addr < 10){
|
|
|
|
|
message += "0";
|
|
|
|
|
}
|
|
|
|
|
message = String(RS485_2_Addr[0]);
|
|
|
|
|
message += "DWR,0" + String(lp0) + ",";
|
|
|
|
|
for(int i=0 ; i<lp0 ; i++){
|
|
|
|
|
char hexStr[5]; // Buffer to hold the hexadecimal string (4 characters + null terminator)
|
|
|
|
|
sprintf(hexStr, "%04X", data[i]); // Format as 4 digit uppercase hexadecimal
|
|
|
|
|
message = String(addr);
|
|
|
|
|
|
|
|
|
|
message += MC9_CH[i] + 1; // ZONE 1
|
|
|
|
|
message += ",";
|
|
|
|
|
message += String(hexStr);
|
|
|
|
|
if(i != (lp0-1)){
|
|
|
|
|
if(addr < NX4_ADDR){ //MC9
|
|
|
|
|
message += "DWR,0" + String(lp0) + ",";
|
|
|
|
|
for(int i=0 ; i<lp0 ; i++){
|
|
|
|
|
char hexStr[5]; // Buffer to hold the hexadecimal string (4 characters + null terminator)
|
|
|
|
|
sprintf(hexStr, "%04X", data[i]); // Format as 4 digit uppercase hexadecimal
|
|
|
|
|
|
|
|
|
|
message += MC9_CH[i] + 1; // ZONE 1
|
|
|
|
|
message += ",";
|
|
|
|
|
message += String(hexStr);
|
|
|
|
|
if(i != (lp0-1)){
|
|
|
|
|
message += ",";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
message += sumMC9(message);
|
|
|
|
|
message = "" + message + CRLF;
|
|
|
|
|
if(write_buff_first(Buff_485_2_Wr, message)){
|
|
|
|
|
numOf485_2++;
|
|
|
|
|
}
|
|
|
|
|
}else{ //NX4, only 1 Ch
|
|
|
|
|
char hexStr[5]; // Buffer to hold the hexadecimal string (4 characters + null terminator)
|
|
|
|
|
String messageRate = message;
|
|
|
|
|
|
|
|
|
|
//SV Message
|
|
|
|
|
message += "DWS,01,0301,";
|
|
|
|
|
sprintf(hexStr, "%04X", data[0]); // Format as 4 digit uppercase hexadecimal
|
|
|
|
|
message += String(hexStr);
|
|
|
|
|
message += sumMC9(message);
|
|
|
|
|
message = "" + message + CRLF;
|
|
|
|
|
if(write_buff_first(Buff_485_2_Wr, message)){
|
|
|
|
|
numOf485_2++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Up,Down Rate Message
|
|
|
|
|
messageRate += "DWS,02,0108,";
|
|
|
|
|
sprintf(hexStr, "%04X", data[1]); // Format as 4 digit uppercase hexadecimal
|
|
|
|
|
messageRate += String(hexStr) + "," + String(hexStr);
|
|
|
|
|
messageRate += sumMC9(messageRate);
|
|
|
|
|
messageRate = "" + messageRate + CRLF;
|
|
|
|
|
if(write_buff_first(Buff_485_2_Wr, messageRate)){
|
|
|
|
|
numOf485_2++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
message += sumMC9(message);
|
|
|
|
|
message = "" + message + CRLF;
|
|
|
|
|
write_buff_first(Buff_485_2_Wr, message);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if((RS485_2_Addr[1] != 0) && (lp1>0)){
|
|
|
|
@ -235,7 +321,9 @@ int msg_MC9_SV_set_2(unsigned int data[], int dataSize){
|
|
|
|
|
}
|
|
|
|
|
message += sumMC9(message);
|
|
|
|
|
message = "" + message + CRLF;
|
|
|
|
|
write_buff_first(Buff_485_2_Wr, message);
|
|
|
|
|
if(write_buff_first(Buff_485_2_Wr, message)){
|
|
|
|
|
numOf485_2++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
@ -281,7 +369,9 @@ int msg_MC9_AT_set_2(unsigned int data[], int dataSize){
|
|
|
|
|
}
|
|
|
|
|
message += sumMC9(message);
|
|
|
|
|
message = "" + message + CRLF;
|
|
|
|
|
write_buff_first(Buff_485_2_Wr, message);
|
|
|
|
|
if(write_buff_first(Buff_485_2_Wr, message)){
|
|
|
|
|
numOf485_2++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
message = "";
|
|
|
|
@ -309,7 +399,9 @@ int msg_MC9_AT_set_2(unsigned int data[], int dataSize){
|
|
|
|
|
}
|
|
|
|
|
message += sumMC9(message);
|
|
|
|
|
message = "" + message + CRLF;
|
|
|
|
|
write_buff_first(Buff_485_2_Wr, message);
|
|
|
|
|
if(write_buff_first(Buff_485_2_Wr, message)){
|
|
|
|
|
numOf485_2++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
@ -340,6 +432,10 @@ int saveMC9_1(String message){
|
|
|
|
|
for(int i = 0 ; i < RS485_1_Rcv_size ; i++){
|
|
|
|
|
RS485_1_Values_PV[i + idx*8] = data[i];
|
|
|
|
|
}
|
|
|
|
|
}else if(latest_sent_msg_1.indexOf("DRS,01,0001") != -1){ // if sent message is PV CMD
|
|
|
|
|
//rcv_10_PV = true;
|
|
|
|
|
RS485_1_Rcv_PV[idx] = true;
|
|
|
|
|
RS485_1_Values_PV[0] = data[0];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(latest_sent_msg_1.indexOf("DRS,08,0011") != -1){ // if sent message is SV CMD
|
|
|
|
@ -348,11 +444,15 @@ int saveMC9_1(String message){
|
|
|
|
|
for(int i = 0 ; i < RS485_1_Rcv_size ; i++){
|
|
|
|
|
RS485_1_Values_SV[i + idx*8] = data[i];
|
|
|
|
|
}
|
|
|
|
|
}else if(latest_sent_msg_1.indexOf("DRS,01,0002") != -1){ // if sent message is PV CMD
|
|
|
|
|
//rcv_10_PV = true;
|
|
|
|
|
RS485_1_Rcv_SV[idx] = true;
|
|
|
|
|
RS485_1_Values_SV[0] = data[0];
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
Serial.println("error 485 read");
|
|
|
|
|
Serial.println("485_1: unknown message recived");
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -379,22 +479,31 @@ int saveMC9_2(String message){
|
|
|
|
|
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++){
|
|
|
|
|
for(int i = 0 ; i < RS485_2_Rcv_size ; i++){
|
|
|
|
|
RS485_2_Values_PV[i + idx*8] = data[i];
|
|
|
|
|
}
|
|
|
|
|
}else if(latest_sent_msg_2.indexOf("DRS,01,0001") != -1){ // if sent message is PV CMD
|
|
|
|
|
//rcv_10_PV = true;
|
|
|
|
|
RS485_2_Rcv_PV[idx] = true;
|
|
|
|
|
RS485_2_Values_PV[0] = data[0];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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++){
|
|
|
|
|
for(int i = 0 ; i < RS485_2_Rcv_size ; i++){
|
|
|
|
|
RS485_2_Values_SV[i + idx*8] = data[i];
|
|
|
|
|
}
|
|
|
|
|
}else if(latest_sent_msg_2.indexOf("DRS,01,0002") != -1){ // if sent message is PV CMD
|
|
|
|
|
//rcv_10_PV = true;
|
|
|
|
|
RS485_2_Rcv_SV[idx] = true;
|
|
|
|
|
RS485_2_Values_SV[0] = data[0];
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
Serial.println("error 485 read");
|
|
|
|
|
Serial.println("485_2: unknown message recived");
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -478,7 +587,11 @@ int parseMC9(const String& message, int& addr, String& mode, int data[8], int& c
|
|
|
|
|
|
|
|
|
|
// Check the parsed status and the number of extracted elements
|
|
|
|
|
if (strcmp(statusC, "OK") != 0 || ret != 12) {
|
|
|
|
|
int ret = sscanf(message.c_str(), "%2s%3s,%2s,%4x%2x",
|
|
|
|
|
addrC, modeC, statusC, &dataC[0], &crcC);
|
|
|
|
|
if (strcmp(statusC, "OK") != 0 || ret != 5) {
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Copy data to the output parameters
|
|
|
|
|