huohuoh

Dependencies:   NetServices mbed C027_Supports mbed-rpcx

Committer:
irsanjul
Date:
Tue Aug 06 12:59:05 2019 +0000
Revision:
0:64967b7043c2
Child:
1:f7d9b0530b73
testes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
irsanjul 0:64967b7043c2 1 /*******************************************************************************
irsanjul 0:64967b7043c2 2 Project : Aru Master
irsanjul 0:64967b7043c2 3 Version : 1.2.0
irsanjul 0:64967b7043c2 4 *******************************************************************************/
irsanjul 0:64967b7043c2 5 #include "mbed.h"
irsanjul 0:64967b7043c2 6 #include "C027_api.h"
irsanjul 0:64967b7043c2 7 #include "AruFraming.h"
irsanjul 0:64967b7043c2 8 #include "AruChannel.h"
irsanjul 0:64967b7043c2 9 #include "DataProcess.h"
irsanjul 0:64967b7043c2 10 #include "EthernetNetIf.h"
irsanjul 0:64967b7043c2 11 #include "HTTPClient.h"
irsanjul 0:64967b7043c2 12 //#include "RtuRpc.h"
irsanjul 0:64967b7043c2 13 #include "Modem.h"
irsanjul 0:64967b7043c2 14 #include "MDM.h"
irsanjul 0:64967b7043c2 15 #include "modeldata.h"
irsanjul 0:64967b7043c2 16 #include <sstream>
irsanjul 0:64967b7043c2 17
irsanjul 0:64967b7043c2 18 //------------------------------------------------------------------------------
irsanjul 0:64967b7043c2 19 // Pin Init
irsanjul 0:64967b7043c2 20 //------------------------------------------------------------------------------
irsanjul 0:64967b7043c2 21 DigitalOut led(LED); // Status Led
irsanjul 0:64967b7043c2 22 Serial dbg(USBTX, USBRX); // Serial to PC
irsanjul 0:64967b7043c2 23 Serial sock(D1, D0); // Aru Master Line
irsanjul 0:64967b7043c2 24 DigitalOut pin(MDMPWRON, 0);
irsanjul 0:64967b7043c2 25 DigitalOut led1(D9, 0), led2(D8, 0), led3(D7, 0);
irsanjul 0:64967b7043c2 26
irsanjul 0:64967b7043c2 27 //------------------------------------------------------------------------------
irsanjul 0:64967b7043c2 28 // Variable Init
irsanjul 0:64967b7043c2 29 //------------------------------------------------------------------------------
irsanjul 0:64967b7043c2 30 std::vector<int> RCV_BUFF; // temporary buffer receiving progress
irsanjul 0:64967b7043c2 31 int timerRxTOutCnt;
irsanjul 0:64967b7043c2 32 bool AruReqTick;
irsanjul 0:64967b7043c2 33 bool tmr10msTick;
irsanjul 0:64967b7043c2 34 bool PriSnd; // true = primary, false = secondary
irsanjul 0:64967b7043c2 35 bool SendNow;
irsanjul 0:64967b7043c2 36 int steptelegram;
irsanjul 0:64967b7043c2 37 int itung;
irsanjul 0:64967b7043c2 38 bool SkadaTask;
irsanjul 0:64967b7043c2 39
irsanjul 0:64967b7043c2 40 //------------------------------------------------------------------------------
irsanjul 0:64967b7043c2 41 // Function Init
irsanjul 0:64967b7043c2 42 //------------------------------------------------------------------------------
irsanjul 0:64967b7043c2 43 //RtuRpc cmd("180.235.151.2");
irsanjul 0:64967b7043c2 44
irsanjul 0:64967b7043c2 45 //------------------------------------------------------------------------------
irsanjul 0:64967b7043c2 46 // Serial Interrupt
irsanjul 0:64967b7043c2 47 void rxInterupt()
irsanjul 0:64967b7043c2 48 {
irsanjul 0:64967b7043c2 49 RCV_BUFF.push_back(sock.getc());
irsanjul 0:64967b7043c2 50 timerRxTOutCnt = 0;
irsanjul 0:64967b7043c2 51 }
irsanjul 0:64967b7043c2 52
irsanjul 0:64967b7043c2 53 //------------------------------------------------------------------------------
irsanjul 0:64967b7043c2 54 // FTL protocol handling
irsanjul 0:64967b7043c2 55 //
irsanjul 0:64967b7043c2 56 AruChannel ARU;
irsanjul 0:64967b7043c2 57
irsanjul 0:64967b7043c2 58 //------------------------------------------------------------------------------
irsanjul 0:64967b7043c2 59 // Aru pooling mechanism
irsanjul 0:64967b7043c2 60 //
irsanjul 0:64967b7043c2 61 Ticker timerAru;
irsanjul 0:64967b7043c2 62 void timerAruTick();
irsanjul 0:64967b7043c2 63
irsanjul 0:64967b7043c2 64 //------------------------------------------------------------------------------
irsanjul 0:64967b7043c2 65 // Mechanism timer 10ms for all
irsanjul 0:64967b7043c2 66 //
irsanjul 0:64967b7043c2 67 Ticker timer10ms;
irsanjul 0:64967b7043c2 68 void timer10msTick()
irsanjul 0:64967b7043c2 69 {
irsanjul 0:64967b7043c2 70 tmr10msTick = true;
irsanjul 0:64967b7043c2 71 }
irsanjul 0:64967b7043c2 72
irsanjul 0:64967b7043c2 73 //------------------------------------------------------------------------------
irsanjul 0:64967b7043c2 74 // Blinking
irsanjul 0:64967b7043c2 75 //
irsanjul 0:64967b7043c2 76 Ticker timer1s;
irsanjul 0:64967b7043c2 77 void timer1sTick()
irsanjul 0:64967b7043c2 78 {
irsanjul 0:64967b7043c2 79 led = !led;
irsanjul 0:64967b7043c2 80 led1 = !led1;
irsanjul 0:64967b7043c2 81 }
irsanjul 0:64967b7043c2 82
irsanjul 0:64967b7043c2 83 //------------------------------------------------------------------------------
irsanjul 0:64967b7043c2 84 // Data Processing
irsanjul 0:64967b7043c2 85 //
irsanjul 0:64967b7043c2 86 DataProcess Data;
irsanjul 0:64967b7043c2 87
irsanjul 0:64967b7043c2 88 //------------------------------------------------------------------------------
irsanjul 0:64967b7043c2 89 // Main Program
irsanjul 0:64967b7043c2 90 //------------------------------------------------------------------------------
irsanjul 0:64967b7043c2 91 int main()
irsanjul 0:64967b7043c2 92 {
irsanjul 0:64967b7043c2 93 // Clear MODBUS Timers
irsanjul 0:64967b7043c2 94 tmr10msTick = false;
irsanjul 0:64967b7043c2 95 AruReqTick = false;
irsanjul 0:64967b7043c2 96 PriSnd = true;
irsanjul 0:64967b7043c2 97 SendNow = false;
irsanjul 0:64967b7043c2 98 SkadaTask = SKADA;
irsanjul 0:64967b7043c2 99
irsanjul 0:64967b7043c2 100 dbg.baud(9600);
irsanjul 0:64967b7043c2 101 dbg.format(8,SerialBase::None,1);
irsanjul 0:64967b7043c2 102
irsanjul 0:64967b7043c2 103 sock.baud(9600);
irsanjul 0:64967b7043c2 104 sock.format(8,SerialBase::None,1);
irsanjul 0:64967b7043c2 105
irsanjul 0:64967b7043c2 106 printf("\r\n<Setup is OK>\r\n");
irsanjul 0:64967b7043c2 107 Net::poll();
irsanjul 0:64967b7043c2 108
irsanjul 0:64967b7043c2 109 dbg.printf("<main>\r\n");
irsanjul 0:64967b7043c2 110
irsanjul 0:64967b7043c2 111 sock.attach(rxInterupt);
irsanjul 0:64967b7043c2 112 timerRxTOutCnt = 0;
irsanjul 0:64967b7043c2 113
irsanjul 0:64967b7043c2 114 dbg.printf("<Modem Created>\r\n");
irsanjul 0:64967b7043c2 115 MDMSerial mdm;
irsanjul 0:64967b7043c2 116 SetModem(mdm);
irsanjul 0:64967b7043c2 117
irsanjul 0:64967b7043c2 118 timerAru.attach(&timerAruTick, 8);
irsanjul 0:64967b7043c2 119 timer10ms.attach_us(&timer10msTick, 10000);
irsanjul 0:64967b7043c2 120
irsanjul 0:64967b7043c2 121 timer1s.attach(&timer1sTick,1);
irsanjul 0:64967b7043c2 122
irsanjul 0:64967b7043c2 123 steptelegram = 0;
irsanjul 0:64967b7043c2 124 itung = 0;
irsanjul 0:64967b7043c2 125
irsanjul 0:64967b7043c2 126 while(1)
irsanjul 0:64967b7043c2 127 {
irsanjul 0:64967b7043c2 128 Net::poll();
irsanjul 0:64967b7043c2 129
irsanjul 0:64967b7043c2 130 if(tmr10msTick)
irsanjul 0:64967b7043c2 131 {
irsanjul 0:64967b7043c2 132 tmr10msTick = false;
irsanjul 0:64967b7043c2 133 ARU.Tick10ms();
irsanjul 0:64967b7043c2 134 }
irsanjul 0:64967b7043c2 135
irsanjul 0:64967b7043c2 136 if(AruReqTick)
irsanjul 0:64967b7043c2 137 {
irsanjul 0:64967b7043c2 138 AruReqTick = false;
irsanjul 0:64967b7043c2 139
irsanjul 0:64967b7043c2 140 if(PriSnd)
irsanjul 0:64967b7043c2 141 {
irsanjul 0:64967b7043c2 142 Eot r('E', TelegramState[steptelegram]);
irsanjul 0:64967b7043c2 143 ARU.Transmit(r);
irsanjul 0:64967b7043c2 144 }
irsanjul 0:64967b7043c2 145 else
irsanjul 0:64967b7043c2 146 {
irsanjul 0:64967b7043c2 147 Eot r('I', TelegramState[steptelegram]);
irsanjul 0:64967b7043c2 148 ARU.Transmit(r);
irsanjul 0:64967b7043c2 149 }
irsanjul 0:64967b7043c2 150 PriSnd = !PriSnd;
irsanjul 0:64967b7043c2 151 dbg.printf("\r\n<Start Send Querry with step %d>\n\r", steptelegram);
irsanjul 0:64967b7043c2 152 }
irsanjul 0:64967b7043c2 153
irsanjul 0:64967b7043c2 154 ARU.Process();
irsanjul 0:64967b7043c2 155
irsanjul 0:64967b7043c2 156 if(ARU.ReceiveCount() > 0)
irsanjul 0:64967b7043c2 157 {
irsanjul 0:64967b7043c2 158 led2 = 1;
irsanjul 0:64967b7043c2 159 dbg.printf("\r\n<Receive Data>\n\r");
irsanjul 0:64967b7043c2 160
irsanjul 0:64967b7043c2 161 AruFrm mf = ARU.Receive();
irsanjul 0:64967b7043c2 162
irsanjul 0:64967b7043c2 163 dbg.printf("Identifier : %c\r\n", mf.Identifier);
irsanjul 0:64967b7043c2 164 dbg.printf("Data input :\r\n");
irsanjul 0:64967b7043c2 165 unsigned int sz = mf.Data.size();
irsanjul 0:64967b7043c2 166 dbg.printf("%c", mf.Identifier);
irsanjul 0:64967b7043c2 167 for(unsigned int i=0; i<sz; i++)
irsanjul 0:64967b7043c2 168 {
irsanjul 0:64967b7043c2 169 dbg.printf("%c", mf.Data[i]);
irsanjul 0:64967b7043c2 170 }
irsanjul 0:64967b7043c2 171 dbg.printf("\r\n");
irsanjul 0:64967b7043c2 172 Data.CheckFtlMassage('E', mf);
irsanjul 0:64967b7043c2 173
irsanjul 0:64967b7043c2 174 if(Data.getFtlMessage() == FtlMessage::OK)
irsanjul 0:64967b7043c2 175 {
irsanjul 0:64967b7043c2 176 Data.CheckDtMassage(mf);
irsanjul 0:64967b7043c2 177 if(Data.getDtMessage() == DataMessage::OK)
irsanjul 0:64967b7043c2 178 {
irsanjul 0:64967b7043c2 179 switch(steptelegram)
irsanjul 0:64967b7043c2 180 {
irsanjul 0:64967b7043c2 181 case 0 : /*Order_state*/
irsanjul 0:64967b7043c2 182 {
irsanjul 0:64967b7043c2 183 DataProcess::STATE st = Data.checkOrderState();
irsanjul 0:64967b7043c2 184
irsanjul 0:64967b7043c2 185 if(st == Data.NOORDER)
irsanjul 0:64967b7043c2 186 {
irsanjul 0:64967b7043c2 187 dbg.printf("No Order Present\r\n");
irsanjul 0:64967b7043c2 188 }
irsanjul 0:64967b7043c2 189 else if(st == Data.ORDERRCV)
irsanjul 0:64967b7043c2 190 {
irsanjul 0:64967b7043c2 191 dbg.printf("Order Receive\r\n");
irsanjul 0:64967b7043c2 192 }
irsanjul 0:64967b7043c2 193 else if(st == Data.PLANORDERPROC)
irsanjul 0:64967b7043c2 194 {
irsanjul 0:64967b7043c2 195 dbg.printf("Order Process\r\n");
irsanjul 0:64967b7043c2 196 steptelegram = 1;
irsanjul 0:64967b7043c2 197 }
irsanjul 0:64967b7043c2 198 else if(st == Data.UNPLANORDERPROC)
irsanjul 0:64967b7043c2 199 {
irsanjul 0:64967b7043c2 200 dbg.printf("Order Process\r\n");
irsanjul 0:64967b7043c2 201 steptelegram = 1;
irsanjul 0:64967b7043c2 202 }
irsanjul 0:64967b7043c2 203 else if(st == Data.ORDERFINERROR)
irsanjul 0:64967b7043c2 204 {
irsanjul 0:64967b7043c2 205 dbg.printf("Order Finish with error\r\n");
irsanjul 0:64967b7043c2 206 }
irsanjul 0:64967b7043c2 207 else if(st == Data.ORDERFINNOERROR)
irsanjul 0:64967b7043c2 208 {
irsanjul 0:64967b7043c2 209 dbg.printf("Order Finish without error\r\n");
irsanjul 0:64967b7043c2 210 }
irsanjul 0:64967b7043c2 211 SendNow = true;
irsanjul 0:64967b7043c2 212 SkadaTask = SKADA;
irsanjul 0:64967b7043c2 213 break;
irsanjul 0:64967b7043c2 214 }
irsanjul 0:64967b7043c2 215 case 1 : /* Interlock */
irsanjul 0:64967b7043c2 216 {
irsanjul 0:64967b7043c2 217 DataProcess::STATE st = Data.chackInterlock();
irsanjul 0:64967b7043c2 218 if(st == Data.ACCCLOSED)
irsanjul 0:64967b7043c2 219 {
irsanjul 0:64967b7043c2 220 dbg.printf("Access is closed, please wait\r\n");
irsanjul 0:64967b7043c2 221 }
irsanjul 0:64967b7043c2 222 else if(st == Data.ACCOPEN)
irsanjul 0:64967b7043c2 223 {
irsanjul 0:64967b7043c2 224 dbg.printf("Access is opened, goto meter_state\r\n");
irsanjul 0:64967b7043c2 225 steptelegram = 2;
irsanjul 0:64967b7043c2 226 SendNow = true;
irsanjul 0:64967b7043c2 227 SkadaTask = SKADA;
irsanjul 0:64967b7043c2 228 }
irsanjul 0:64967b7043c2 229 break;
irsanjul 0:64967b7043c2 230 }
irsanjul 0:64967b7043c2 231 case 2 : /*Meter_state*/
irsanjul 0:64967b7043c2 232 {
irsanjul 0:64967b7043c2 233 DataProcess::STATE st = Data.checkState();
irsanjul 0:64967b7043c2 234
irsanjul 0:64967b7043c2 235 if(st == Data.STEPDOWN)
irsanjul 0:64967b7043c2 236 {
irsanjul 0:64967b7043c2 237 dbg.printf("STEPDOWN\r\n");
irsanjul 0:64967b7043c2 238 }
irsanjul 0:64967b7043c2 239 else if(st == Data.STEPUP)
irsanjul 0:64967b7043c2 240 {
irsanjul 0:64967b7043c2 241 dbg.printf("STEPUP\r\n");
irsanjul 0:64967b7043c2 242 }
irsanjul 0:64967b7043c2 243 else if(st == Data.STEPJUMP)
irsanjul 0:64967b7043c2 244 {
irsanjul 0:64967b7043c2 245 dbg.printf("STEP LONCAT\r\n");
irsanjul 0:64967b7043c2 246 }
irsanjul 0:64967b7043c2 247 else if(st == Data.STEPEND)
irsanjul 0:64967b7043c2 248 {
irsanjul 0:64967b7043c2 249 dbg.printf("JUMP TO END\r\n");
irsanjul 0:64967b7043c2 250 steptelegram = 3;
irsanjul 0:64967b7043c2 251 }
irsanjul 0:64967b7043c2 252 else if(st == Data.STAY)
irsanjul 0:64967b7043c2 253 {
irsanjul 0:64967b7043c2 254 dbg.printf("STEP TETAP\r\n");
irsanjul 0:64967b7043c2 255 }
irsanjul 0:64967b7043c2 256 else if(st == Data.FINISH)
irsanjul 0:64967b7043c2 257 {
irsanjul 0:64967b7043c2 258 dbg.printf("FINISH\r\n");
irsanjul 0:64967b7043c2 259 steptelegram = 3;
irsanjul 0:64967b7043c2 260 }
irsanjul 0:64967b7043c2 261 else if(st == Data.STAYNOL)
irsanjul 0:64967b7043c2 262 {
irsanjul 0:64967b7043c2 263 dbg.printf("STEP TETAP DI NOL\r\n");
irsanjul 0:64967b7043c2 264 itung++;
irsanjul 0:64967b7043c2 265 if(itung > 10)
irsanjul 0:64967b7043c2 266 {
irsanjul 0:64967b7043c2 267 itung = 0;
irsanjul 0:64967b7043c2 268 steptelegram = 0;
irsanjul 0:64967b7043c2 269 }
irsanjul 0:64967b7043c2 270 }
irsanjul 0:64967b7043c2 271 else if(st == Data.ERROR)
irsanjul 0:64967b7043c2 272 {
irsanjul 0:64967b7043c2 273 dbg.printf("STEP ERROR COY\r\n");
irsanjul 0:64967b7043c2 274 steptelegram = 6; // error querry
irsanjul 0:64967b7043c2 275 }
irsanjul 0:64967b7043c2 276 else
irsanjul 0:64967b7043c2 277 {
irsanjul 0:64967b7043c2 278 dbg.printf("STEP GA NORMAL\r\n");
irsanjul 0:64967b7043c2 279 }
irsanjul 0:64967b7043c2 280 SendNow = true;
irsanjul 0:64967b7043c2 281 SkadaTask = SKADA;
irsanjul 0:64967b7043c2 282 break;
irsanjul 0:64967b7043c2 283 }
irsanjul 0:64967b7043c2 284 case 3 :
irsanjul 0:64967b7043c2 285 {
irsanjul 0:64967b7043c2 286 steptelegram = 4;
irsanjul 0:64967b7043c2 287 SendNow = true;
irsanjul 0:64967b7043c2 288 SkadaTask = TASK;
irsanjul 0:64967b7043c2 289 break;
irsanjul 0:64967b7043c2 290 }
irsanjul 0:64967b7043c2 291 case 4 :
irsanjul 0:64967b7043c2 292 {
irsanjul 0:64967b7043c2 293 steptelegram = 0;
irsanjul 0:64967b7043c2 294 SendNow = true;
irsanjul 0:64967b7043c2 295 SkadaTask = TASK;
irsanjul 0:64967b7043c2 296 break;
irsanjul 0:64967b7043c2 297 }
irsanjul 0:64967b7043c2 298 case 5 :
irsanjul 0:64967b7043c2 299 {
irsanjul 0:64967b7043c2 300 SendNow = true;
irsanjul 0:64967b7043c2 301 SkadaTask = TASK;
irsanjul 0:64967b7043c2 302 break;
irsanjul 0:64967b7043c2 303 }
irsanjul 0:64967b7043c2 304 case 6 :
irsanjul 0:64967b7043c2 305 {
irsanjul 0:64967b7043c2 306 steptelegram = 0;
irsanjul 0:64967b7043c2 307 SendNow = true;
irsanjul 0:64967b7043c2 308 SkadaTask = TASK;
irsanjul 0:64967b7043c2 309 break;
irsanjul 0:64967b7043c2 310 }
irsanjul 0:64967b7043c2 311 default: break;
irsanjul 0:64967b7043c2 312 }
irsanjul 0:64967b7043c2 313 }
irsanjul 0:64967b7043c2 314 else
irsanjul 0:64967b7043c2 315 {
irsanjul 0:64967b7043c2 316 dbg.printf("Data Ditolak\r\n");
irsanjul 0:64967b7043c2 317 steptelegram = 0;
irsanjul 0:64967b7043c2 318 }
irsanjul 0:64967b7043c2 319
irsanjul 0:64967b7043c2 320 if(chekConect(mdm) && SendNow)
irsanjul 0:64967b7043c2 321 {
irsanjul 0:64967b7043c2 322 SendNow = false;
irsanjul 0:64967b7043c2 323
irsanjul 0:64967b7043c2 324 if(PostData(mdm, mf.Identifier, mf.Data, SkadaTask))
irsanjul 0:64967b7043c2 325 {
irsanjul 0:64967b7043c2 326 dbg.printf("Data Berhasil dikirim\r\n");
irsanjul 0:64967b7043c2 327 }
irsanjul 0:64967b7043c2 328 else
irsanjul 0:64967b7043c2 329 {
irsanjul 0:64967b7043c2 330 dbg.printf("Gagal Kirim Data\r\n");
irsanjul 0:64967b7043c2 331 }
irsanjul 0:64967b7043c2 332 }
irsanjul 0:64967b7043c2 333 }
irsanjul 0:64967b7043c2 334 else if(Data.getFtlMessage() == FtlMessage::PROERROR)
irsanjul 0:64967b7043c2 335 {
irsanjul 0:64967b7043c2 336 dbg.printf("Protokol Error GAN!!!\r\n");
irsanjul 0:64967b7043c2 337 steptelegram = 0;
irsanjul 0:64967b7043c2 338 }
irsanjul 0:64967b7043c2 339 else
irsanjul 0:64967b7043c2 340 {
irsanjul 0:64967b7043c2 341 dbg.printf("Balasan Tidak sesuai coy!!!\r\n");
irsanjul 0:64967b7043c2 342 steptelegram = 0;
irsanjul 0:64967b7043c2 343 }
irsanjul 0:64967b7043c2 344 led2 = 0;
irsanjul 0:64967b7043c2 345 }
irsanjul 0:64967b7043c2 346 } // akhir while(1)
irsanjul 0:64967b7043c2 347 }// akhir main
irsanjul 0:64967b7043c2 348
irsanjul 0:64967b7043c2 349 //-------------------------------------------------------------------
irsanjul 0:64967b7043c2 350 void timerAruTick()
irsanjul 0:64967b7043c2 351 {
irsanjul 0:64967b7043c2 352 AruReqTick = true;
irsanjul 0:64967b7043c2 353 }
irsanjul 0:64967b7043c2 354 //-------------------------------------------------------------------