This demonstrates the process of communicating through ethernet to a SEL-2431 Voltage Regulator Control Panel using SEL Fast Message. Basic device commands and data cna be requested and displayed over a connected serial port. This is a basic version and full testing and documentation has yet to be completed.
Dependencies: BufferedSerial analogAverager voltageRegulator netStatReg analogMinMax CounterMinMax
Revision 17:a69f6e51b3cb, committed 2019-11-25
- Comitter:
- masterkookus
- Date:
- Mon Nov 25 15:20:50 2019 +0000
- Parent:
- 16:018bed9abe89
- Child:
- 18:69846c990e04
- Commit message:
- Updates to allow control of enables outside of defines
Changed in this revision
--- a/main.cpp Mon Oct 14 13:36:11 2019 +0000 +++ b/main.cpp Mon Nov 25 15:20:50 2019 +0000 @@ -2,7 +2,7 @@ #error [NOT_SUPPORTED] LWIP not supported for this target #endif -#define netmsgdebug +//#define netmsgdebug #include "mbed.h" #include "EthernetInterface.h" @@ -20,6 +20,7 @@ #include "analogMinMax.h" #include "counterMinMax.h" #include "netStatusReg.h" +#include "voltageRegulator.h" Ticker nettimer; Timer netDevTimers[7]; @@ -35,11 +36,11 @@ BufferedSerial sport0(sport0tx, sport0rx, sport0buff, sport0mult); // UART2 CircularBuffer<char, 256> receiveBuffer; +CircularBuffer<char, 256> unSolReceiveBuffer; CircularBuffer<char, 64> sendLength; CircularBuffer<char, 256> sendBuffer; -Thread conchkthread[2]; -Thread rxtxdatathread[5]; +Thread rxtxdatathread[4]; unsigned int currenttime=0; @@ -56,45 +57,57 @@ netDevTimers[0].reset(); setSendTick(true); } - //Server Unsolicited Message Timeout - if (netStat.bit_isset(srvIsActive)) + if (netStat.bit_isset(pollEnabled)) { - if (netDevTimers[1].read_ms()>=setservertimeout) + if (netStat.bit_isset(devOnline)) { - //netDevTimers[1].reset(); - netDevTimers[1].stop(); - netStat.bit_toset(srvCloseConnection); - } - } - if (netStat.bit_isset(devOnline)) - { - #ifdef fastDemandEnabled - //Fast Demand Poll Tick - if (netStat.bit_isset(fmdEnabled)) - { - if (netDevTimers[2].read_ms()>=setfmdemandpollinterval) + //Fast Demand Poll Tick + if (netStat.bit_isset(fmdEnabled)) { - netDevTimers[2].reset(); - netStat.bit_toset(fmdPollReq); - } - } - else - { - if (netDevTimers[2].read_ms()>=8000) - { - netDevTimers[2].reset(); - netStat.bit_toset(fmdPollReq); + if (netStat.bit_isset(fmdOnline)) + { + if (netDevTimers[2].read_ms()>=setfmdemandpollinterval) + { + netDevTimers[2].reset(); + netStat.bit_toset(fmdPollReq); + } + } + else + { + if (netDevTimers[2].read_ms()>=8000) + { + netDevTimers[2].reset(); + netStat.bit_toset(fmdPollReq); + } + } } - } - #endif - #ifdef fastMeterEnabled - //Fast Meter Poll Tick - if (netStat.bit_isset(fmEnabled)) - { - if (netDevTimers[3].read_ms()>=setfmpollinterval) + //Fast Meter Poll Tick + if (netStat.bit_isset(fmEnabled)) { - netDevTimers[3].reset(); - netStat.bit_toset(fmPollReq); + if (netStat.bit_isset(fmOnline)) + { + if (netDevTimers[3].read_ms()>=setfmpollinterval) + { + netDevTimers[3].reset(); + netStat.bit_toset(fmPollReq); + } + } + else + { + if (netDevTimers[3].read_ms()>=8000) + { + netDevTimers[3].reset(); + netStat.bit_toset(fmPollReq); + } + } + } + if (netStat.bit_isset(recEnabled)) + { + if (netDevTimers[6].read_ms()>=setDataRecInterval) + { + netStat.bit_toset(recDataFile); + netDevTimers[6].stop(); + } } } else @@ -102,25 +115,15 @@ if (netDevTimers[3].read_ms()>=8000) { netDevTimers[3].reset(); - netStat.bit_toset(fmPollReq); + netStat.bit_toset(fmCfgReq); } } - #endif - } - else - { - if (netDevTimers[3].read_ms()>=8000) - { - netDevTimers[3].reset(); - netStat.bit_toset(fmCfgReq); - } } //Fast Message Timeout if ((netStat.bit_isset(fmCfgInProg)) || (netStat.bit_isset(fmPollInProg)) || (netStat.bit_isset(fmdPollInProg))) { if (netDevTimers[4].read_ms()>=2000) { - //netDevTimers[4].reset(); netDevTimers[4].stop(); netStat.bit_toset(fmCloseConnection); netStat.bit_toset(fmTimeout); @@ -131,18 +134,12 @@ { if (netDevTimers[5].read_ms()>=net1.serMsgTimeout) { - //netDevTimers[5].reset(); netDevTimers[5].stop(); netStat.bit_toset(serCloseConnection); netStat.bit_toset(serTimeout); } } - if (netDevTimers[6].read_ms()>=setDataRecInterval) - { - netStat.bit_toset(recDataFile); - //netDevTimers[6].reset(); - netDevTimers[6].stop(); - } + } void sendCmd(char cmdNum) @@ -173,25 +170,28 @@ netStat.bit_toset(pollEnabled); #endif + #ifdef fastMeterEnabled + netStat.bit_toset(fmEnabled); + #endif + + #ifdef fastDemandEnabled + netStat.bit_toset(fmdEnabled); + #endif + + #ifdef recordDataEnabled + netStat.bit_toset(recEnabled); + #endif + net1.cltPort=setclientport; net1.srv_addr=setclientaddress; net1.srv_sock.set_blocking(false); net1.srv_sock.set_timeout(100); - net1.srv.set_blocking(false); - net1.srv.set_timeout(100); net1.sendRetryCount=0; net1.messageFailCount=0; net1.serMsgTimeout=2000; /* Open the server on ethernet stack */ net1.srv.open(eth); - - /* Bind port 23 to the server */ - net1.srvPort=setserverport; - net1.srv.bind(net1.srvPort); - - /* Can handle 5 simultaneous connections */ - net1.srv.listen(5); sport0.baud(sport0baud); } @@ -325,7 +325,7 @@ sport0.write(cbuf,clen); if (myDevice.chkMeterMsg(cbuf,clen)) { - netStat.bit_toset(fmEnabled); + netStat.bit_toset(fmOnline); clen=0; netStat.iedOnline(true); break; @@ -347,9 +347,9 @@ if ((cbuf[cbc]==0xA5) && (cbuf[cbc+1]==0xC2)) { sport0.write(cbuf,clen); - if (myDevice.chkMeterMsg(cbuf,clen)) + if (myDevice.chkDemMeterMsg(cbuf,clen)) { - netStat.bit_toset(fmdEnabled); + netStat.bit_toset(fmdOnline); clen=0; netStat.iedOnline(true); break; @@ -482,36 +482,6 @@ } } -//Ethernet receive data and send to aux devices (serial, etc...) -void datansrx(netsys *net2) -{ - char rxbuf[256]; - int rxlen=0; - int rxc; - while (1) - { - //If the server is active check to see if data has been received - while (netStat.bit_isset(srvIsActive)) - { - //Store the length of the received data - rxlen=net2->clt_sock.recv(rxbuf, sizeof(rxbuf)); - //if there is data then push data into received buffer - if (rxlen>0) - { - for (rxc = 0;rxc<rxlen;rxc++) - { - receiveBuffer.push(rxbuf[rxc]); - } - #ifdef netmsgdebug - printf("Server Received Data\r\n"); - #endif - //Increment received message counter - netStat.incCount(2); - } - } - } -} - //Serial device to server void datasrx(netsys *net2) { @@ -575,7 +545,7 @@ netStat.bit_toset(serPollReq); rxindex=0; } - //Search for the Tap Report Command + //Search for the Status Command if (cmdpack.cmdint==0x53544154) { #ifdef netmsgdebug @@ -589,6 +559,25 @@ sport0.printf("Messages Failed: %d\r\n\r\n",netStat.getCount(5)); rxindex=0; } + //Search for the Target Command + if (cmdpack.cmdint==0x54415247) + { + char *dTargets; + #ifdef netmsgdebug + printf("Targets\r\n"); + #endif + sport0.printf("\r\nTarget 0 %08x\r\n",dTargets[0]); + sport0.printf("\r\nTarget 1 %08x\r\n",dTargets[1]); + sport0.printf("\r\nTarget 2 %08x\r\n",dTargets[2]); + sport0.printf("\r\nTarget 3 %08x\r\n",dTargets[3]); + sport0.printf("\r\nTarget 4 %08x\r\n",dTargets[4]); + sport0.printf("\r\nTarget 5 %08x\r\n",dTargets[5]); + sport0.printf("\r\nTarget 6 %08x\r\n",dTargets[6]); + sport0.printf("\r\nTarget 7 %08x\r\n",dTargets[7]); + sport0.printf("\r\nTarget 8 %08x\r\n",dTargets[8]); + sport0.printf("\r\nTarget 9 %08x\r\n",dTargets[9]); + rxindex=0; + } } //If no command found set cursor location to zero if (rxindex>0) @@ -603,30 +592,6 @@ } } -//Checks for a Ethernet to Serial connection -void conchk(netsys *net2) -{ - TCPServer *server=&(net2->srv); - TCPSocket *client_socket=&(net2->clt_sock); - SocketAddress *client_address=&(net2->clt_addr); - - while(1) - { - //Wait for someone to connect - while (server->accept(client_socket, client_address) < 0) - { - //printf("Connection Failed.\r\n"); - } - #ifdef netmsgdebug - printf("Server Port %d\r\n", net2->srvPort); - printf("accept %s:%d\r\n", client_address->get_ip_address(), client_address->get_port()); - #endif - netStat.bit_toset(srvIsActive); - netDevTimers[1].reset(); - netDevTimers[1].start(); - } -} - int main() { EthernetInterface eth; @@ -639,17 +604,14 @@ printf("The target IP address is '%s'\r\n", eth.get_ip_address()); #endif confignetdevices(ð); - /* Setup Ethernet to Serial Connection Thread */ - conchkthread[0].start(callback(conchk,&net1)); /* Setup polltick Ticker */ nettimer.attach_us(heartbeat,10000); /* Setup Ethernet to Serial transmit data Thread */ - rxtxdatathread[0].start(callback(datansrx,&net1)); - rxtxdatathread[1].start(callback(datancrx,&net1)); + rxtxdatathread[0].start(callback(datancrx,&net1)); /* Setup Ethernet to Serial receive data Thread */ - rxtxdatathread[2].start(callback(datasrx,&net1)); - rxtxdatathread[3].start(callback(datantx,&net1)); - rxtxdatathread[4].start(callback(dataprocess,&net1)); + rxtxdatathread[1].start(callback(datasrx,&net1)); + rxtxdatathread[2].start(callback(datantx,&net1)); + rxtxdatathread[3].start(callback(dataprocess,&net1)); unsigned int sxc; @@ -665,17 +627,6 @@ if (polltick) { setPollTick(false); - - if (netStat.bit_isset(srvCloseConnection)) - { - #ifdef netmsgdebug - printf("Closed\r\n"); - #endif - net1.clt_sock.close(); - netStat.bit_toclear(srvIsActive); - netStat.bit_toclear(srvCloseConnection); - - } if (netStat.bit_isset(serCloseConnection)) { #ifdef netmsgdebug @@ -723,9 +674,9 @@ { if (netStat.bit_isset(recDataFile)) { - char dataStrLen=120; - char dataStr[121]; - myDevice.getMeterReport(&dataStr[0]); + char dataStrLen=0; + char dataStr[256]; + dataStrLen=myDevice.getMeterReport(&dataStr[0]); sport0.write(dataStr,dataStrLen); netStat.bit_toclear(recDataFile); @@ -736,7 +687,7 @@ { if (netStat.bit_isset(fmdPollReq)) { - if (netStat.bit_isset(fmdEnabled)) + if (netStat.bit_isset(fmdOnline)) { printf("Demand Reading\r\n"); sendCmd(4); @@ -755,7 +706,7 @@ } else if (netStat.bit_isset(fmPollReq)) { - if (netStat.bit_isset(fmEnabled)) + if (netStat.bit_isset(fmOnline)) { printf("Meter Reading\r\n"); sendCmd(2);
--- a/mydevices.h Mon Oct 14 13:36:11 2019 +0000 +++ b/mydevices.h Mon Nov 25 15:20:50 2019 +0000 @@ -2,7 +2,8 @@ #define sportEnabled #define setPollEnabled #define fastMeterEnabled -//#define fastDemandEnabled +#define fastDemandEnabled +#define recordDataEnabled #define setConsFailCount 3 #define setDataRecInterval 90000 @@ -13,7 +14,7 @@ #define setpolltimeout 200 #define sertimeoutperiods 2 #define setpollinterval 15 //In 10ms intervals -#define setfmpollinterval 5000 +#define setfmpollinterval 500 #define setfmdemandpollinterval 60000 #define setserverport 23
--- a/netStatReg.lib Mon Oct 14 13:36:11 2019 +0000 +++ b/netStatReg.lib Mon Nov 25 15:20:50 2019 +0000 @@ -1,1 +1,1 @@ -netStatReg#7397d19f91aa +netStatReg#3f8751bccba3
--- a/selMsg.cpp Mon Oct 14 13:36:11 2019 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,324 +0,0 @@ -#include "selMsg.h" -#include "string.h" -#include "netDataTypes.h" -#include "mbed.h" - -analogAverager voltageAvg(120,true,true,0.9,true,true,1.1); -analogMinMax voltageMinMax(120,true,true,0.9,true,true,1.1); -analogAverager currentAvg(50,true,false,-100,true,false,100); -analogMinMax currentMinMax(50,true,false,-100,true,false,100); -analogAverager powerAvg(360000,true,false,720000,true,false,720000); -analogMinMax powerMinMax(360000,true,false,-720000,true,false,720000); -analogAverager reactiveAvg(0,true,false,-360000,true,false,360000); -analogMinMax reactiveMinMax(0,true,false,-360000,true,false,360000); -counterMinMax tapMinMax(0,true,-16,true,16); - -voltageRegulator::voltageRegulator() -{ - vRegData.numAnalog=0x11; - vRegData.numDigital=0x34; - vRegData.numDemAnalog=0x0A; - vRegData.fmMsgLen[0]=22;//Minus Checksum - vRegData.fmMsgLen[1]=203;//Minus Checksum - vRegData.fmMsgLen[2]=132;//Minus Checksum - vRegData.fmMsgLen[3]=126;//Minus Checksum - vRegData.fmMsgLen[4]=52;//Minus Checksum - strcpy(vRegData.analogs[0].analogName,"IL\0\0\0\0"); - strcpy(vRegData.analogs[1].analogName,"ILA\0\0\0"); - strcpy(vRegData.analogs[2].analogName,"VS\0\0\0\0"); - strcpy(vRegData.analogs[3].analogName,"VSA\0\0\0"); - strcpy(vRegData.analogs[4].analogName,"VL\0\0\0\0"); - strcpy(vRegData.analogs[5].analogName,"VLA\0\0\0"); - strcpy(vRegData.analogs[6].analogName,"VCMP\0\0"); - strcpy(vRegData.analogs[7].analogName,"TAPPOS"); - strcpy(vRegData.analogs[8].analogName,"VSSEC\0"); - strcpy(vRegData.analogs[9].analogName,"VLSEC\0"); - strcpy(vRegData.analogs[10].analogName,"VCMPSC"); - strcpy(vRegData.analogs[11].analogName,"PL\0\0\0\0"); - strcpy(vRegData.analogs[12].analogName,"QL\0\0\0\0"); - strcpy(vRegData.analogs[13].analogName,"SL\0\0\0\0"); - strcpy(vRegData.analogs[14].analogName,"PF\0\0\0\0"); - strcpy(vRegData.analogs[15].analogName,"PFLD\0\0"); - strcpy(vRegData.analogs[16].analogName,"FREQ\0\0"); - strcpy(vRegData.analogs[17].analogName,"ILFDEM"); - strcpy(vRegData.analogs[18].analogName,"ILRDEM"); - strcpy(vRegData.analogs[19].analogName,"PFDEM\0"); - strcpy(vRegData.analogs[20].analogName,"PRDEM\0"); - strcpy(vRegData.analogs[21].analogName,"QFODEM"); - strcpy(vRegData.analogs[22].analogName,"QFIDEM"); - strcpy(vRegData.analogs[23].analogName,"QRODEM"); - strcpy(vRegData.analogs[24].analogName,"QRIDEM"); - strcpy(vRegData.analogs[25].analogName,"SFDEM\0"); - strcpy(vRegData.analogs[26].analogName,"SRDEM\0"); - strcpy(vRegData.calculated[0].analogName,"VLSMIN"); - strcpy(vRegData.calculated[1].analogName,"VLSAVG"); - strcpy(vRegData.calculated[2].analogName,"VLSMAX"); - strcpy(vRegData.calculated[3].analogName,"ILMIN\0"); - strcpy(vRegData.calculated[4].analogName,"ILAVG\0"); - strcpy(vRegData.calculated[5].analogName,"ILMA\0"); - strcpy(vRegData.calculated[6].analogName,"PLMIN\0"); - strcpy(vRegData.calculated[7].analogName,"PLAVG\0"); - strcpy(vRegData.calculated[8].analogName,"PLMAX\0"); - strcpy(vRegData.calculated[9].analogName,"QLMIN\0"); - strcpy(vRegData.calculated[10].analogName,"QLAVG\0"); - strcpy(vRegData.calculated[11].analogName,"QLMAX\0"); - strcpy(vRegData.calculated[12].analogName,"TAPMIN"); - strcpy(vRegData.calculated[13].analogName,"TAPMAX"); - - /*analogAverager voltageAvg(120,true,true,0.9,true,true,1.1); - analogMinMax voltageMinMax(120,true,true,0.9,true,true,1.1); - analogAverager currentAvg(50,true,false,-100,true,false,100); - analogMinMax currentMinMax(50,true,false,-100,true,false,100); - analogAverager powerAvg(360000,true,false,720000,true,false,720000); - analogMinMax powerMinMax(360000,true,false,-720000,true,false,720000); - analogAverager reactiveAvg(0,true,false,-360000,true,false,360000); - analogMinMax reactiveMinMax(0,true,false,-360000,true,false,360000); - counterMinMax tapMinMax(0,true,-16,true,16);*/ -} - -bool voltageRegulator::chkCfgMsg(char *cbuf, char clen) -{ - char txc; - char chksum=0; - if (clen>vRegData.fmMsgLen[0]) - { - for (txc=0;txc<vRegData.fmMsgLen[0];txc++) - { - chksum=chksum+cbuf[txc]; - } - if (chksum==cbuf[vRegData.fmMsgLen[0]]) - { - printf("Chksum: %02x\r\n",chksum); - return true; - } - printf("Chksum Error: %02x, Message: %02x\r\n",chksum,cbuf[vRegData.fmMsgLen[0]]); - return false; - } - printf("Message Length Wrong: %d Bytes\r\n",clen); - return false; -} - -void voltageRegulator::setMeterData(char *cbuf, char pos, char clen) -{ - float4byte valpack; - short2byte timepack; - char txc; - char anum=pos+4; - - char chksum=0; - if (clen>vRegData.fmMsgLen[2]) - { - for (txc=0;txc<vRegData.fmMsgLen[2];txc++) - { - chksum=chksum+cbuf[txc]; - } - if (chksum==cbuf[vRegData.fmMsgLen[2]]) - { - printf("Chksum: %02x\r\n",chksum); - } - else - { - printf("Chksum Error: %02x, Message: %02x\r\n",chksum,cbuf[vRegData.fmMsgLen[2]]); - return; - } - } - else - { - printf("Message Length Wrong: %d Bytes\r\n",clen); - return; - } - - for (txc=0;txc<vRegData.numAnalog;txc++) - { - valpack.bytes[3]=cbuf[anum]; - valpack.bytes[2]=cbuf[anum+1]; - valpack.bytes[1]=cbuf[anum+2]; - valpack.bytes[0]=cbuf[anum+3]; - vRegData.analogs[txc].analog1Value = valpack.cmdflt; - anum = anum + 4; - printf("%.2f\r\n",vRegData.analogs[txc].analog1Value); - } - vRegData.timeStamp.month=cbuf[anum]; - vRegData.timeStamp.day=cbuf[anum+1]; - vRegData.timeStamp.year=cbuf[anum+2]; - vRegData.timeStamp.hour=cbuf[anum+3]; - vRegData.timeStamp.min=cbuf[anum+4]; - vRegData.timeStamp.sec=cbuf[anum+5]; - timepack.bytes[1]=cbuf[anum+6]; - timepack.bytes[0]=cbuf[anum+7]; - vRegData.timeStamp.msec=timepack.cmdshort; - printf("%d/%d/%d %d:%d:%d.%d\r\n",vRegData.timeStamp.month,vRegData.timeStamp.day,vRegData.timeStamp.year,vRegData.timeStamp.hour,vRegData.timeStamp.min,vRegData.timeStamp.sec,vRegData.timeStamp.msec); - anum=anum+8; - for (txc=0;txc<vRegData.numDigital;txc++) - { - vRegData.digitalTargets[txc]=cbuf[anum+txc]; - } - tapMinMax.putVal(vRegData.analogs[7].analog1Value); - voltageMinMax.putVal(vRegData.analogs[9].analog1Value); - voltageAvg.putVal(vRegData.analogs[9].analog1Value); - currentMinMax.putVal(vRegData.analogs[0].analog1Value); - currentAvg.putVal(vRegData.analogs[0].analog1Value); - powerMinMax.putVal(vRegData.analogs[11].analog1Value); - powerAvg.putVal(vRegData.analogs[11].analog1Value); - reactiveMinMax.putVal(vRegData.analogs[12].analog1Value); - reactiveAvg.putVal(vRegData.analogs[12].analog1Value); -} - -bool voltageRegulator::chkMeterMsg(char *cbuf, char clen) -{ - char txc; - - //Ensure Analog channl count is correct - if (vRegData.numAnalog!=cbuf[6]) - { - #ifdef netmsgdebug - printf("\r\nFast Meter Analog Channel Count Off\r\n"); - #endif - return false; - } - //Ensure Digital register count is correct - if (vRegData.numDigital!=cbuf[8]) - { - #ifdef netmsgdebug - printf("\r\nFast Meter Digital Channel Count Off\r\n"); - #endif - return false; - } - char anum=16; - char nxc; - //Verify Analog names are correct - for (txc=0;txc<vRegData.numAnalog;txc++) - { - for (nxc=0;nxc<6;nxc++) - { - if(vRegData.analogs[txc].analogName[nxc]!=cbuf[anum+nxc]) - { - #ifdef netmsgdebug - printf("\r\nPoint %d Failed\r\n",txc); - #endif - return false; - } - } - anum = anum + 11; - } - return true; -} - -bool voltageRegulator::chkDemMeterMsg(char *cbuf, char clen) -{ - char txc; - - if (vRegData.numDemAnalog!=cbuf[6]) - { - #ifdef netmsgdebug - printf("\r\nDemand Analog Channel Count Off\r\n"); - #endif - return false; - } - char anum=18; - char nxc; - //Verify Analog names are correct - for (txc=0;txc<vRegData.numDemAnalog;txc++) - { - for (nxc=0;nxc<6;nxc++) - { - if(vRegData.analogs[txc+vRegData.numAnalog].analogName[nxc]!=cbuf[anum+nxc]) - { - #ifdef netmsgdebug - printf("\r\nPoint %d Failed\r\n",txc); - #endif - return false; - } - } - anum = anum + 11; - } - return true; -} - -void voltageRegulator::setDemMeterData(char *cbuf, char pos, char clen) -{ - float4byte valpack; - short2byte timepack; - char txc; - char anum=pos+4; - - char chksum=0; - if (clen>vRegData.fmMsgLen[4]) - { - for (txc=0;txc<vRegData.fmMsgLen[4];txc++) - { - chksum=chksum+cbuf[txc]; - } - if (chksum==cbuf[vRegData.fmMsgLen[4]]) - { - printf("Chksum: %02x\r\n",chksum); - } - else - { - printf("Chksum Error: %02x, Message: %02x\r\n",chksum,cbuf[vRegData.fmMsgLen[4]]); - return; - } - } - else - { - printf("Message Length Wrong: %d Bytes\r\n",clen); - return; - } - - for (txc=0;txc<vRegData.numDemAnalog;txc++) - { - valpack.bytes[3]=cbuf[anum]; - valpack.bytes[2]=cbuf[anum+1]; - valpack.bytes[1]=cbuf[anum+2]; - valpack.bytes[0]=cbuf[anum+3]; - vRegData.analogs[txc].analog1Value = valpack.cmdflt; - anum = anum + 4; - } - vRegData.demTimeStamp.month=cbuf[anum]; - vRegData.demTimeStamp.day=cbuf[anum+1]; - vRegData.demTimeStamp.year=cbuf[anum+2]; - vRegData.demTimeStamp.hour=cbuf[anum+3]; - vRegData.demTimeStamp.min=cbuf[anum+4]; - vRegData.demTimeStamp.sec=cbuf[anum+5]; - timepack.bytes[1]=cbuf[anum+6]; - timepack.bytes[0]=cbuf[anum+7]; - vRegData.demTimeStamp.msec=timepack.cmdshort; -} - -void voltageRegulator::getMeterReport(char *dataStr) -{ - //char dataStr[121]; - char buflen; - vRegData.calculated[0].analog1Value=voltageMinMax.getMin(); - vRegData.calculated[1].analog1Value=voltageAvg.getAvg(); - vRegData.calculated[2].analog1Value=voltageMinMax.getMax(); - vRegData.calculated[3].analog1Value=currentMinMax.getMin(); - vRegData.calculated[4].analog1Value=currentAvg.getAvg(); - vRegData.calculated[5].analog1Value=currentMinMax.getMax(); - vRegData.calculated[6].analog1Value=powerMinMax.getMin(); - vRegData.calculated[7].analog1Value=powerAvg.getAvg(); - vRegData.calculated[8].analog1Value=powerMinMax.getMax(); - vRegData.calculated[9].analog1Value=reactiveMinMax.getMin(); - vRegData.calculated[10].analog1Value=reactiveAvg.getAvg(); - vRegData.calculated[11].analog1Value=reactiveMinMax.getMax(); - vRegData.calculated[12].analog1Value=tapMinMax.getMin(); - vRegData.calculated[13].analog1Value=tapMinMax.getMax(); - buflen = sprintf(dataStr, - "%2d:%2d ,%7.2f,%7.2f,%7.2f,%7.2f,%7.2f,%7.2f,%7d,%7d,%7d,%7d,%7d,%7d,%7d,%7d\r\n", - vRegData.timeStamp.hour,vRegData.timeStamp.min, - vRegData.calculated[0].analog1Value,vRegData.calculated[1].analog1Value,vRegData.calculated[2].analog1Value, - vRegData.calculated[3].analog1Value,vRegData.calculated[4].analog1Value,vRegData.calculated[5].analog1Value, - vRegData.calculated[6].analog1Value,vRegData.calculated[7].analog1Value,vRegData.calculated[8].analog1Value, - vRegData.calculated[9].analog1Value,vRegData.calculated[10].analog1Value,vRegData.calculated[11].analog1Value, - vRegData.calculated[12].analog1Value,vRegData.calculated[13].analog1Value); - - voltageAvg.resetNum(); - voltageMinMax.resetNum(); - currentAvg.resetNum(); - currentMinMax.resetNum(); - powerAvg.resetNum(); - powerMinMax.resetNum(); - reactiveAvg.resetNum(); - reactiveMinMax.resetNum(); - tapMinMax.resetNum(); -} \ No newline at end of file
--- a/selMsg.h Mon Oct 14 13:36:11 2019 +0000 +++ b/selMsg.h Mon Nov 25 15:20:50 2019 +0000 @@ -1,10 +1,6 @@ #ifndef SELMSG_H #define SELMSG_H -#include "analogAverager.h" -#include "analogMinMax.h" -#include "counterMinMax.h" - const char fmCmd[5][2] = { {0xA5,0xC0}, {0xA5,0xC1}, @@ -31,86 +27,4 @@ {0x05,0x07,0x04,0x04,0x05} }; -const char vRegDevCfg[23] = { -0xA5,0xC0,0x17,0x02,0x03,0x00,0xA5,0xC1,0xA5,0xD1,0xA5,0xC2,0xA5,0xD2,0xA5,0xC3,0xA5,0xD3,0x01,0x00,0x00,0x05,0x21 -}; - -class voltageRegulator -{ - struct analog1Sample { - char analogName[6]; - float analog1Value; - }; - struct analog2Sample { - char analogName[6]; - float analog1Value; - float analog2Value; - }; - struct analog3Sample { - char analogName[6]; - float analog1Value; - float analog2Value; - float analog3Value; - }; - struct analog4Sample { - char analogName[6]; - float analog1Value; - float analog2Value; - float analog3Value; - float analog4Value; - }; - - struct fmTimeStamp { - char month; - char day; - char year; - char hour; - char min; - char sec; - short msec; - }; - - struct vRegDataStruct { - char numAnalog; - char numDigital; - char numDemAnalog; - char fmMsgLen[5]; - struct analog1Sample analogs[27]; - struct analog1Sample calculated[14]; - struct fmTimeStamp timeStamp; - struct fmTimeStamp demTimeStamp; - char digitalTargets[52]; - char tapOff; - char noNeut; - char tapDiff; - char remCount; - char locCount; - char autoCount; - char manCount; - char vripCount; - char neutCount; - char maxCount; - char minCount; - } vRegData; - - public: - - voltageRegulator(void); - - void setMeterData(char *cbuf, char pos, char clen); - - void setDemMeterData(char *cbuf, char pos, char clen); - - void incCount(void); - - char getCount(char); - - bool chkCfgMsg(char *cbuf, char clen); - - bool chkMeterMsg(char *cbuf, char clen); - - bool chkDemMeterMsg(char *cbuf, char clen); - - void getMeterReport(char *dataStr); -}; #endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voltageRegulator.lib Mon Nov 25 15:20:50 2019 +0000 @@ -0,0 +1,1 @@ +voltageRegulator#7be2db2605c6