tes
Dependencies: NetServices mbed C027_Supports mbed-rpcx
main.cpp
- Committer:
- irsanjul
- Date:
- 2019-08-06
- Revision:
- 0:64967b7043c2
- Child:
- 1:f7d9b0530b73
File content as of revision 0:64967b7043c2:
/******************************************************************************* Project : Aru Master Version : 1.2.0 *******************************************************************************/ #include "mbed.h" #include "C027_api.h" #include "AruFraming.h" #include "AruChannel.h" #include "DataProcess.h" #include "EthernetNetIf.h" #include "HTTPClient.h" //#include "RtuRpc.h" #include "Modem.h" #include "MDM.h" #include "modeldata.h" #include <sstream> //------------------------------------------------------------------------------ // Pin Init //------------------------------------------------------------------------------ DigitalOut led(LED); // Status Led Serial dbg(USBTX, USBRX); // Serial to PC Serial sock(D1, D0); // Aru Master Line DigitalOut pin(MDMPWRON, 0); DigitalOut led1(D9, 0), led2(D8, 0), led3(D7, 0); //------------------------------------------------------------------------------ // Variable Init //------------------------------------------------------------------------------ std::vector<int> RCV_BUFF; // temporary buffer receiving progress int timerRxTOutCnt; bool AruReqTick; bool tmr10msTick; bool PriSnd; // true = primary, false = secondary bool SendNow; int steptelegram; int itung; bool SkadaTask; //------------------------------------------------------------------------------ // Function Init //------------------------------------------------------------------------------ //RtuRpc cmd("180.235.151.2"); //------------------------------------------------------------------------------ // Serial Interrupt void rxInterupt() { RCV_BUFF.push_back(sock.getc()); timerRxTOutCnt = 0; } //------------------------------------------------------------------------------ // FTL protocol handling // AruChannel ARU; //------------------------------------------------------------------------------ // Aru pooling mechanism // Ticker timerAru; void timerAruTick(); //------------------------------------------------------------------------------ // Mechanism timer 10ms for all // Ticker timer10ms; void timer10msTick() { tmr10msTick = true; } //------------------------------------------------------------------------------ // Blinking // Ticker timer1s; void timer1sTick() { led = !led; led1 = !led1; } //------------------------------------------------------------------------------ // Data Processing // DataProcess Data; //------------------------------------------------------------------------------ // Main Program //------------------------------------------------------------------------------ int main() { // Clear MODBUS Timers tmr10msTick = false; AruReqTick = false; PriSnd = true; SendNow = false; SkadaTask = SKADA; dbg.baud(9600); dbg.format(8,SerialBase::None,1); sock.baud(9600); sock.format(8,SerialBase::None,1); printf("\r\n<Setup is OK>\r\n"); Net::poll(); dbg.printf("<main>\r\n"); sock.attach(rxInterupt); timerRxTOutCnt = 0; dbg.printf("<Modem Created>\r\n"); MDMSerial mdm; SetModem(mdm); timerAru.attach(&timerAruTick, 8); timer10ms.attach_us(&timer10msTick, 10000); timer1s.attach(&timer1sTick,1); steptelegram = 0; itung = 0; while(1) { Net::poll(); if(tmr10msTick) { tmr10msTick = false; ARU.Tick10ms(); } if(AruReqTick) { AruReqTick = false; if(PriSnd) { Eot r('E', TelegramState[steptelegram]); ARU.Transmit(r); } else { Eot r('I', TelegramState[steptelegram]); ARU.Transmit(r); } PriSnd = !PriSnd; dbg.printf("\r\n<Start Send Querry with step %d>\n\r", steptelegram); } ARU.Process(); if(ARU.ReceiveCount() > 0) { led2 = 1; dbg.printf("\r\n<Receive Data>\n\r"); AruFrm mf = ARU.Receive(); dbg.printf("Identifier : %c\r\n", mf.Identifier); dbg.printf("Data input :\r\n"); unsigned int sz = mf.Data.size(); dbg.printf("%c", mf.Identifier); for(unsigned int i=0; i<sz; i++) { dbg.printf("%c", mf.Data[i]); } dbg.printf("\r\n"); Data.CheckFtlMassage('E', mf); if(Data.getFtlMessage() == FtlMessage::OK) { Data.CheckDtMassage(mf); if(Data.getDtMessage() == DataMessage::OK) { switch(steptelegram) { case 0 : /*Order_state*/ { DataProcess::STATE st = Data.checkOrderState(); if(st == Data.NOORDER) { dbg.printf("No Order Present\r\n"); } else if(st == Data.ORDERRCV) { dbg.printf("Order Receive\r\n"); } else if(st == Data.PLANORDERPROC) { dbg.printf("Order Process\r\n"); steptelegram = 1; } else if(st == Data.UNPLANORDERPROC) { dbg.printf("Order Process\r\n"); steptelegram = 1; } else if(st == Data.ORDERFINERROR) { dbg.printf("Order Finish with error\r\n"); } else if(st == Data.ORDERFINNOERROR) { dbg.printf("Order Finish without error\r\n"); } SendNow = true; SkadaTask = SKADA; break; } case 1 : /* Interlock */ { DataProcess::STATE st = Data.chackInterlock(); if(st == Data.ACCCLOSED) { dbg.printf("Access is closed, please wait\r\n"); } else if(st == Data.ACCOPEN) { dbg.printf("Access is opened, goto meter_state\r\n"); steptelegram = 2; SendNow = true; SkadaTask = SKADA; } break; } case 2 : /*Meter_state*/ { DataProcess::STATE st = Data.checkState(); if(st == Data.STEPDOWN) { dbg.printf("STEPDOWN\r\n"); } else if(st == Data.STEPUP) { dbg.printf("STEPUP\r\n"); } else if(st == Data.STEPJUMP) { dbg.printf("STEP LONCAT\r\n"); } else if(st == Data.STEPEND) { dbg.printf("JUMP TO END\r\n"); steptelegram = 3; } else if(st == Data.STAY) { dbg.printf("STEP TETAP\r\n"); } else if(st == Data.FINISH) { dbg.printf("FINISH\r\n"); steptelegram = 3; } else if(st == Data.STAYNOL) { dbg.printf("STEP TETAP DI NOL\r\n"); itung++; if(itung > 10) { itung = 0; steptelegram = 0; } } else if(st == Data.ERROR) { dbg.printf("STEP ERROR COY\r\n"); steptelegram = 6; // error querry } else { dbg.printf("STEP GA NORMAL\r\n"); } SendNow = true; SkadaTask = SKADA; break; } case 3 : { steptelegram = 4; SendNow = true; SkadaTask = TASK; break; } case 4 : { steptelegram = 0; SendNow = true; SkadaTask = TASK; break; } case 5 : { SendNow = true; SkadaTask = TASK; break; } case 6 : { steptelegram = 0; SendNow = true; SkadaTask = TASK; break; } default: break; } } else { dbg.printf("Data Ditolak\r\n"); steptelegram = 0; } if(chekConect(mdm) && SendNow) { SendNow = false; if(PostData(mdm, mf.Identifier, mf.Data, SkadaTask)) { dbg.printf("Data Berhasil dikirim\r\n"); } else { dbg.printf("Gagal Kirim Data\r\n"); } } } else if(Data.getFtlMessage() == FtlMessage::PROERROR) { dbg.printf("Protokol Error GAN!!!\r\n"); steptelegram = 0; } else { dbg.printf("Balasan Tidak sesuai coy!!!\r\n"); steptelegram = 0; } led2 = 0; } } // akhir while(1) }// akhir main //------------------------------------------------------------------- void timerAruTick() { AruReqTick = true; } //-------------------------------------------------------------------