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
Diff: main.cpp
- Revision:
- 18:69846c990e04
- Parent:
- 17:a69f6e51b3cb
--- a/main.cpp Mon Nov 25 15:20:50 2019 +0000 +++ b/main.cpp Thu Jan 23 12:38:12 2020 +0000 @@ -33,9 +33,9 @@ bool polltick; bool sendtick; -BufferedSerial sport0(sport0tx, sport0rx, sport0buff, sport0mult); // UART2 +BufferedSerial sport0(sport0tx, sport0rx, rxtxbuffer, sport0mult); // UART2 -CircularBuffer<char, 256> receiveBuffer; +CircularBuffer<char, rxtxbuffer> receiveBuffer; CircularBuffer<char, 256> unSolReceiveBuffer; CircularBuffer<char, 64> sendLength; CircularBuffer<char, 256> sendBuffer; @@ -198,19 +198,19 @@ void dataprocess(netsys *net2) { char cchar; - char cbuf[256]; + char cbuf[rxtxbuffer]; unsigned int clen=0; unsigned int cbc; while(1) { //Check to see if the Receive Buffer has anything - while (!receiveBuffer.empty()) + /*while (!receiveBuffer.empty()) { receiveBuffer.pop(cchar); cbuf[clen]=cchar; clen++; - } + }*/ //If a Poll Request has been made and data has been received set flag netStat.bit_sis(serPollInProg,serRespRx); netStat.bit_sis(fmPollInProg,fmRespRx); @@ -219,16 +219,32 @@ //Check to see if bulk data and reports being sent from device due to serial command if (netStat.bit_isset(serMsgRx)) { - if (clen>0) + while (!receiveBuffer.empty()) + { + receiveBuffer.pop(cchar); + sport0.putc(cchar); + //cbuf[clen]=cchar; + //clen++; + } + /*if (clen>0) { sport0.write(cbuf,clen); netDevTimers[5].reset(); clen=0; netStat.iedOnline(true); + }*/ + } + else + { + while (!receiveBuffer.empty()) + { + receiveBuffer.pop(cchar); + cbuf[clen]=cchar; + clen++; } } //Check to see if at least 4 characters have been received - else if (clen>3) + if (clen>3) { //Cycle through received data to search for a command for (cbc=0;cbc<clen-3;cbc++) @@ -501,6 +517,9 @@ { for (rxc=0;rxc<rxlen;rxc++) { + #ifdef netmsgdebug + printf("Serial Data Received\r\n"); + #endif rxbuf[rxindex+rxc]=sport0.getc(); //Check to see if a carriage return has been detected if (rxbuf[rxindex+rxc]=='\r') @@ -670,7 +689,7 @@ netStat.bit_toclear(cltclose); } - if ((netStat.bit_isclear(serPollInProg)) && (netStat.bit_isclear(fmPollInProg)) && (netStat.bit_isclear(fmdPollInProg)) && (netStat.bit_isset(devOnline))) + if ((netStat.bit_isclear(serPollInProg)) && (netStat.bit_isclear(fmPollInProg)) && (netStat.bit_isclear(fmdPollInProg))) { if (netStat.bit_isset(recDataFile)) { @@ -685,7 +704,7 @@ } if ((net1.sendState==0) || (net1.sendState==5)) { - if (netStat.bit_isset(fmdPollReq)) + if ((netStat.bit_isset(fmdPollReq)) && (netStat.bit_isset(devOnline))) { if (netStat.bit_isset(fmdOnline)) { @@ -704,7 +723,22 @@ netDevTimers[4].reset(); netDevTimers[4].start(); } - else if (netStat.bit_isset(fmPollReq)) + else if (netStat.bit_isset(serPollReq)) + { + if (netStat.bit_isset(serEnabled)) + { + sendSerCmd(serCmdSeq[netStat.getDevMsgReq()][netStat.getDevMsgPos()],serCmdlen[netStat.getDevMsgReq()][netStat.getDevMsgPos()]); + netStat.bit_toclear(serPollReq); + netStat.bit_toset(serPollInProg); + netDevTimers[5].reset(); + netDevTimers[5].start(); + } + else + { + netStat.bit_toclear(serPollReq); + } + } + else if ((netStat.bit_isset(fmPollReq)) && (netStat.bit_isset(devOnline))) { if (netStat.bit_isset(fmOnline)) { @@ -723,21 +757,6 @@ netDevTimers[4].reset(); netDevTimers[4].start(); } - else if (netStat.bit_isset(serPollReq)) - { - if (netStat.bit_isset(serEnabled)) - { - sendSerCmd(serCmdSeq[netStat.getDevMsgReq()][netStat.getDevMsgPos()],serCmdlen[netStat.getDevMsgReq()][netStat.getDevMsgPos()]); - netStat.bit_toclear(serPollReq); - netStat.bit_toset(serPollInProg); - netDevTimers[5].reset(); - netDevTimers[5].start(); - } - else - { - netStat.bit_toclear(serPollReq); - } - } } } if ((netStat.bit_isclear(devOnline)) && (netStat.bit_isclear(fmCfgInProg)) && (netStat.bit_isset(fmCfgReq)))