huohuoh

Dependencies:   NetServices mbed C027_Supports mbed-rpcx

Committer:
aldoao
Date:
Wed Sep 11 06:32:20 2019 +0000
Revision:
1:f7d9b0530b73
Parent:
0:64967b7043c2
tipe,1

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
aldoao 1:f7d9b0530b73 22 Serial dbg(USBTX, USBRX); // Serial to PC // Serial to PC//ini usb tx rx yang mana//perkiraan yang pin p28 p 29
irsanjul 0:64967b7043c2 23 Serial sock(D1, D0); // Aru Master Line
aldoao 1:f7d9b0530b73 24 DigitalOut pin(MDMPWRON, 0);//INI artinya pin modempower ,,keaadaan awal off,pin p2_6
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 {
aldoao 1:f7d9b0530b73 49 RCV_BUFF.push_back(sock.getc());//untuk menampilkan nilai sock
irsanjul 0:64967b7043c2 50 timerRxTOutCnt = 0;
irsanjul 0:64967b7043c2 51 }
irsanjul 0:64967b7043c2 52
irsanjul 0:64967b7043c2 53 //------------------------------------------------------------------------------
aldoao 1:f7d9b0530b73 54 // FTL protocol handling//kurang mengerti ini yang mana??
irsanjul 0:64967b7043c2 55 //
aldoao 1:f7d9b0530b73 56 AruChannel ARU;//saya kurang mengerti..,,aru chanell yang mana????//dan ini fungsi nya apa,,sya belum tahu..
irsanjul 0:64967b7043c2 57
irsanjul 0:64967b7043c2 58 //------------------------------------------------------------------------------
aldoao 1:f7d9b0530b73 59 // Aru pooling mechanism//Aru pooling mechanism//kurang mengerti ini yang mana??
irsanjul 0:64967b7043c2 60 //
irsanjul 0:64967b7043c2 61 Ticker timerAru;
aldoao 1:f7d9b0530b73 62 void timerAruTick();//prototipe
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
aldoao 1:f7d9b0530b73 100 dbg.baud(9600); //dgb,,buat apa,,apa sma dengan debug?? atau memperbaiki??
irsanjul 0:64967b7043c2 101 dbg.format(8,SerialBase::None,1);
irsanjul 0:64967b7043c2 102
aldoao 1:f7d9b0530b73 103 sock.baud(9600);//sock ,,soket ,,untuk apa??
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");
aldoao 1:f7d9b0530b73 107 Net::poll();//untuk menunda
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
aldoao 1:f7d9b0530b73 118 timerAru.attach(&timerAruTick, 8);//saya belum terlalu mengerti
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
aldoao 1:f7d9b0530b73 130 if(tmr10msTick)//klau ada nilai dia jalan
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++)
aldoao 1:f7d9b0530b73 168 {if(mf.Data.end()){
aldoao 1:f7d9b0530b73 169 /*dbg.printf("%c", mf.Data[1]);*/
aldoao 1:f7d9b0530b73 170 steptelegram= 0;}else{
aldoao 1:f7d9b0530b73 171 dbg.printf("%c", mf.Data[i]);}//array mf nya dimana???/
irsanjul 0:64967b7043c2 172 }
irsanjul 0:64967b7043c2 173 dbg.printf("\r\n");
irsanjul 0:64967b7043c2 174 Data.CheckFtlMassage('E', mf);
irsanjul 0:64967b7043c2 175
irsanjul 0:64967b7043c2 176 if(Data.getFtlMessage() == FtlMessage::OK)
irsanjul 0:64967b7043c2 177 {
irsanjul 0:64967b7043c2 178 Data.CheckDtMassage(mf);
irsanjul 0:64967b7043c2 179 if(Data.getDtMessage() == DataMessage::OK)
irsanjul 0:64967b7043c2 180 {
irsanjul 0:64967b7043c2 181 switch(steptelegram)
irsanjul 0:64967b7043c2 182 {
irsanjul 0:64967b7043c2 183 case 0 : /*Order_state*/
irsanjul 0:64967b7043c2 184 {
irsanjul 0:64967b7043c2 185 DataProcess::STATE st = Data.checkOrderState();
irsanjul 0:64967b7043c2 186
irsanjul 0:64967b7043c2 187 if(st == Data.NOORDER)
irsanjul 0:64967b7043c2 188 {
irsanjul 0:64967b7043c2 189 dbg.printf("No Order Present\r\n");
irsanjul 0:64967b7043c2 190 }
irsanjul 0:64967b7043c2 191 else if(st == Data.ORDERRCV)
irsanjul 0:64967b7043c2 192 {
irsanjul 0:64967b7043c2 193 dbg.printf("Order Receive\r\n");
irsanjul 0:64967b7043c2 194 }
irsanjul 0:64967b7043c2 195 else if(st == Data.PLANORDERPROC)
irsanjul 0:64967b7043c2 196 {
irsanjul 0:64967b7043c2 197 dbg.printf("Order Process\r\n");
irsanjul 0:64967b7043c2 198 steptelegram = 1;
irsanjul 0:64967b7043c2 199 }
irsanjul 0:64967b7043c2 200 else if(st == Data.UNPLANORDERPROC)
irsanjul 0:64967b7043c2 201 {
irsanjul 0:64967b7043c2 202 dbg.printf("Order Process\r\n");
irsanjul 0:64967b7043c2 203 steptelegram = 1;
irsanjul 0:64967b7043c2 204 }
irsanjul 0:64967b7043c2 205 else if(st == Data.ORDERFINERROR)
irsanjul 0:64967b7043c2 206 {
irsanjul 0:64967b7043c2 207 dbg.printf("Order Finish with error\r\n");
irsanjul 0:64967b7043c2 208 }
irsanjul 0:64967b7043c2 209 else if(st == Data.ORDERFINNOERROR)
irsanjul 0:64967b7043c2 210 {
irsanjul 0:64967b7043c2 211 dbg.printf("Order Finish without error\r\n");
irsanjul 0:64967b7043c2 212 }
irsanjul 0:64967b7043c2 213 SendNow = true;
irsanjul 0:64967b7043c2 214 SkadaTask = SKADA;
irsanjul 0:64967b7043c2 215 break;
irsanjul 0:64967b7043c2 216 }
irsanjul 0:64967b7043c2 217 case 1 : /* Interlock */
irsanjul 0:64967b7043c2 218 {
irsanjul 0:64967b7043c2 219 DataProcess::STATE st = Data.chackInterlock();
irsanjul 0:64967b7043c2 220 if(st == Data.ACCCLOSED)
irsanjul 0:64967b7043c2 221 {
irsanjul 0:64967b7043c2 222 dbg.printf("Access is closed, please wait\r\n");
irsanjul 0:64967b7043c2 223 }
irsanjul 0:64967b7043c2 224 else if(st == Data.ACCOPEN)
irsanjul 0:64967b7043c2 225 {
irsanjul 0:64967b7043c2 226 dbg.printf("Access is opened, goto meter_state\r\n");
irsanjul 0:64967b7043c2 227 steptelegram = 2;
irsanjul 0:64967b7043c2 228 SendNow = true;
irsanjul 0:64967b7043c2 229 SkadaTask = SKADA;
irsanjul 0:64967b7043c2 230 }
irsanjul 0:64967b7043c2 231 break;
irsanjul 0:64967b7043c2 232 }
irsanjul 0:64967b7043c2 233 case 2 : /*Meter_state*/
irsanjul 0:64967b7043c2 234 {
irsanjul 0:64967b7043c2 235 DataProcess::STATE st = Data.checkState();
irsanjul 0:64967b7043c2 236
irsanjul 0:64967b7043c2 237 if(st == Data.STEPDOWN)
irsanjul 0:64967b7043c2 238 {
irsanjul 0:64967b7043c2 239 dbg.printf("STEPDOWN\r\n");
irsanjul 0:64967b7043c2 240 }
irsanjul 0:64967b7043c2 241 else if(st == Data.STEPUP)
irsanjul 0:64967b7043c2 242 {
irsanjul 0:64967b7043c2 243 dbg.printf("STEPUP\r\n");
irsanjul 0:64967b7043c2 244 }
irsanjul 0:64967b7043c2 245 else if(st == Data.STEPJUMP)
irsanjul 0:64967b7043c2 246 {
irsanjul 0:64967b7043c2 247 dbg.printf("STEP LONCAT\r\n");
irsanjul 0:64967b7043c2 248 }
irsanjul 0:64967b7043c2 249 else if(st == Data.STEPEND)
irsanjul 0:64967b7043c2 250 {
irsanjul 0:64967b7043c2 251 dbg.printf("JUMP TO END\r\n");
irsanjul 0:64967b7043c2 252 steptelegram = 3;
irsanjul 0:64967b7043c2 253 }
irsanjul 0:64967b7043c2 254 else if(st == Data.STAY)
irsanjul 0:64967b7043c2 255 {
irsanjul 0:64967b7043c2 256 dbg.printf("STEP TETAP\r\n");
irsanjul 0:64967b7043c2 257 }
irsanjul 0:64967b7043c2 258 else if(st == Data.FINISH)
irsanjul 0:64967b7043c2 259 {
irsanjul 0:64967b7043c2 260 dbg.printf("FINISH\r\n");
aldoao 1:f7d9b0530b73 261 steptelegram = 0;
irsanjul 0:64967b7043c2 262 }
irsanjul 0:64967b7043c2 263 else if(st == Data.STAYNOL)
irsanjul 0:64967b7043c2 264 {
irsanjul 0:64967b7043c2 265 dbg.printf("STEP TETAP DI NOL\r\n");
irsanjul 0:64967b7043c2 266 itung++;
irsanjul 0:64967b7043c2 267 if(itung > 10)
irsanjul 0:64967b7043c2 268 {
irsanjul 0:64967b7043c2 269 itung = 0;
irsanjul 0:64967b7043c2 270 steptelegram = 0;
irsanjul 0:64967b7043c2 271 }
irsanjul 0:64967b7043c2 272 }
irsanjul 0:64967b7043c2 273 else if(st == Data.ERROR)
irsanjul 0:64967b7043c2 274 {
irsanjul 0:64967b7043c2 275 dbg.printf("STEP ERROR COY\r\n");
irsanjul 0:64967b7043c2 276 steptelegram = 6; // error querry
irsanjul 0:64967b7043c2 277 }
irsanjul 0:64967b7043c2 278 else
irsanjul 0:64967b7043c2 279 {
irsanjul 0:64967b7043c2 280 dbg.printf("STEP GA NORMAL\r\n");
irsanjul 0:64967b7043c2 281 }
irsanjul 0:64967b7043c2 282 SendNow = true;
irsanjul 0:64967b7043c2 283 SkadaTask = SKADA;
irsanjul 0:64967b7043c2 284 break;
irsanjul 0:64967b7043c2 285 }
irsanjul 0:64967b7043c2 286 case 3 :
irsanjul 0:64967b7043c2 287 {
irsanjul 0:64967b7043c2 288 steptelegram = 4;
irsanjul 0:64967b7043c2 289 SendNow = true;
irsanjul 0:64967b7043c2 290 SkadaTask = TASK;
irsanjul 0:64967b7043c2 291 break;
irsanjul 0:64967b7043c2 292 }
irsanjul 0:64967b7043c2 293 case 4 :
irsanjul 0:64967b7043c2 294 {
aldoao 1:f7d9b0530b73 295 //steptelegram = 2;
irsanjul 0:64967b7043c2 296 SendNow = true;
irsanjul 0:64967b7043c2 297 SkadaTask = TASK;
irsanjul 0:64967b7043c2 298 break;
irsanjul 0:64967b7043c2 299 }
irsanjul 0:64967b7043c2 300 case 5 :
irsanjul 0:64967b7043c2 301 {
irsanjul 0:64967b7043c2 302 SendNow = true;
irsanjul 0:64967b7043c2 303 SkadaTask = TASK;
irsanjul 0:64967b7043c2 304 break;
irsanjul 0:64967b7043c2 305 }
irsanjul 0:64967b7043c2 306 case 6 :
irsanjul 0:64967b7043c2 307 {
irsanjul 0:64967b7043c2 308 steptelegram = 0;
irsanjul 0:64967b7043c2 309 SendNow = true;
irsanjul 0:64967b7043c2 310 SkadaTask = TASK;
irsanjul 0:64967b7043c2 311 break;
irsanjul 0:64967b7043c2 312 }
irsanjul 0:64967b7043c2 313 default: break;
irsanjul 0:64967b7043c2 314 }
irsanjul 0:64967b7043c2 315 }
irsanjul 0:64967b7043c2 316 else
irsanjul 0:64967b7043c2 317 {
irsanjul 0:64967b7043c2 318 dbg.printf("Data Ditolak\r\n");
irsanjul 0:64967b7043c2 319 steptelegram = 0;
irsanjul 0:64967b7043c2 320 }
irsanjul 0:64967b7043c2 321
irsanjul 0:64967b7043c2 322 if(chekConect(mdm) && SendNow)
irsanjul 0:64967b7043c2 323 {
irsanjul 0:64967b7043c2 324 SendNow = false;
irsanjul 0:64967b7043c2 325
irsanjul 0:64967b7043c2 326 if(PostData(mdm, mf.Identifier, mf.Data, SkadaTask))
irsanjul 0:64967b7043c2 327 {
irsanjul 0:64967b7043c2 328 dbg.printf("Data Berhasil dikirim\r\n");
irsanjul 0:64967b7043c2 329 }
irsanjul 0:64967b7043c2 330 else
irsanjul 0:64967b7043c2 331 {
irsanjul 0:64967b7043c2 332 dbg.printf("Gagal Kirim Data\r\n");
irsanjul 0:64967b7043c2 333 }
irsanjul 0:64967b7043c2 334 }
irsanjul 0:64967b7043c2 335 }
irsanjul 0:64967b7043c2 336 else if(Data.getFtlMessage() == FtlMessage::PROERROR)
irsanjul 0:64967b7043c2 337 {
irsanjul 0:64967b7043c2 338 dbg.printf("Protokol Error GAN!!!\r\n");
irsanjul 0:64967b7043c2 339 steptelegram = 0;
irsanjul 0:64967b7043c2 340 }
irsanjul 0:64967b7043c2 341 else
irsanjul 0:64967b7043c2 342 {
irsanjul 0:64967b7043c2 343 dbg.printf("Balasan Tidak sesuai coy!!!\r\n");
irsanjul 0:64967b7043c2 344 steptelegram = 0;
irsanjul 0:64967b7043c2 345 }
irsanjul 0:64967b7043c2 346 led2 = 0;
irsanjul 0:64967b7043c2 347 }
irsanjul 0:64967b7043c2 348 } // akhir while(1)
irsanjul 0:64967b7043c2 349 }// akhir main
irsanjul 0:64967b7043c2 350
irsanjul 0:64967b7043c2 351 //-------------------------------------------------------------------
irsanjul 0:64967b7043c2 352 void timerAruTick()
irsanjul 0:64967b7043c2 353 {
irsanjul 0:64967b7043c2 354 AruReqTick = true;
irsanjul 0:64967b7043c2 355 }
irsanjul 0:64967b7043c2 356 //-------------------------------------------------------------------