huohuoh
Dependencies: NetServices mbed C027_Supports mbed-rpcx
main.cpp
00001 /******************************************************************************* 00002 Project : Aru Master 00003 Version : 1.2.0 00004 *******************************************************************************/ 00005 #include "mbed.h" 00006 #include "C027_api.h" 00007 #include "AruFraming.h" 00008 #include "AruChannel.h" 00009 #include "DataProcess.h" 00010 #include "EthernetNetIf.h" 00011 #include "HTTPClient.h" 00012 //#include "RtuRpc.h" 00013 #include "Modem.h" 00014 #include "MDM.h" 00015 #include "modeldata.h" 00016 #include <sstream> 00017 00018 //------------------------------------------------------------------------------ 00019 // Pin Init 00020 //------------------------------------------------------------------------------ 00021 DigitalOut led(LED); // Status Led 00022 Serial dbg(USBTX, USBRX); // Serial to PC // Serial to PC//ini usb tx rx yang mana//perkiraan yang pin p28 p 29 00023 Serial sock(D1, D0); // Aru Master Line 00024 DigitalOut pin(MDMPWRON, 0);//INI artinya pin modempower ,,keaadaan awal off,pin p2_6 00025 DigitalOut led1(D9, 0), led2(D8, 0), led3(D7, 0); 00026 00027 //------------------------------------------------------------------------------ 00028 // Variable Init 00029 //------------------------------------------------------------------------------ 00030 std::vector<int> RCV_BUFF; // temporary buffer receiving progress 00031 int timerRxTOutCnt; 00032 bool AruReqTick; 00033 bool tmr10msTick; 00034 bool PriSnd; // true = primary, false = secondary 00035 bool SendNow; 00036 int steptelegram; 00037 int itung; 00038 bool SkadaTask; 00039 00040 //------------------------------------------------------------------------------ 00041 // Function Init 00042 //------------------------------------------------------------------------------ 00043 //RtuRpc cmd("180.235.151.2"); 00044 00045 //------------------------------------------------------------------------------ 00046 // Serial Interrupt 00047 void rxInterupt() 00048 { 00049 RCV_BUFF.push_back(sock.getc());//untuk menampilkan nilai sock 00050 timerRxTOutCnt = 0; 00051 } 00052 00053 //------------------------------------------------------------------------------ 00054 // FTL protocol handling//kurang mengerti ini yang mana?? 00055 // 00056 AruChannel ARU;//saya kurang mengerti..,,aru chanell yang mana????//dan ini fungsi nya apa,,sya belum tahu.. 00057 00058 //------------------------------------------------------------------------------ 00059 // Aru pooling mechanism//Aru pooling mechanism//kurang mengerti ini yang mana?? 00060 // 00061 Ticker timerAru; 00062 void timerAruTick();//prototipe 00063 00064 //------------------------------------------------------------------------------ 00065 // Mechanism timer 10ms for all 00066 // 00067 Ticker timer10ms; 00068 void timer10msTick() 00069 { 00070 tmr10msTick = true; 00071 } 00072 00073 //------------------------------------------------------------------------------ 00074 // Blinking 00075 // 00076 Ticker timer1s; 00077 void timer1sTick() 00078 { 00079 led = !led; 00080 led1 = !led1; 00081 } 00082 00083 //------------------------------------------------------------------------------ 00084 // Data Processing 00085 // 00086 DataProcess Data; 00087 00088 //------------------------------------------------------------------------------ 00089 // Main Program 00090 //------------------------------------------------------------------------------ 00091 int main() 00092 { 00093 // Clear MODBUS Timers 00094 tmr10msTick = false; 00095 AruReqTick = false; 00096 PriSnd = true; 00097 SendNow = false; 00098 SkadaTask = SKADA; 00099 00100 dbg.baud(9600); //dgb,,buat apa,,apa sma dengan debug?? atau memperbaiki?? 00101 dbg.format(8,SerialBase::None,1); 00102 00103 sock.baud(9600);//sock ,,soket ,,untuk apa?? 00104 sock.format(8,SerialBase::None,1); 00105 00106 printf("\r\n<Setup is OK>\r\n"); 00107 Net::poll();//untuk menunda 00108 00109 dbg.printf("<main>\r\n"); 00110 00111 sock.attach(rxInterupt); 00112 timerRxTOutCnt = 0; 00113 00114 dbg.printf("<Modem Created>\r\n"); 00115 MDMSerial mdm; 00116 SetModem(mdm); 00117 00118 timerAru.attach(&timerAruTick, 8);//saya belum terlalu mengerti 00119 timer10ms.attach_us(&timer10msTick, 10000); 00120 00121 timer1s.attach(&timer1sTick,1); 00122 00123 steptelegram = 0; 00124 itung = 0; 00125 00126 while(1) 00127 { 00128 Net::poll(); 00129 00130 if(tmr10msTick)//klau ada nilai dia jalan 00131 { 00132 tmr10msTick = false; 00133 ARU.Tick10ms(); 00134 } 00135 00136 if(AruReqTick) 00137 { 00138 AruReqTick = false; 00139 00140 if(PriSnd) 00141 { 00142 Eot r('E', TelegramState[steptelegram]); 00143 ARU.Transmit(r); 00144 } 00145 else 00146 { 00147 Eot r('I', TelegramState[steptelegram]); 00148 ARU.Transmit(r); 00149 } 00150 PriSnd = !PriSnd; 00151 dbg.printf("\r\n<Start Send Querry with step %d>\n\r", steptelegram); 00152 } 00153 00154 ARU.Process(); 00155 00156 if(ARU.ReceiveCount() > 0) 00157 { 00158 led2 = 1; 00159 dbg.printf("\r\n<Receive Data>\n\r"); 00160 00161 AruFrm mf = ARU.Receive(); 00162 00163 dbg.printf("Identifier : %c\r\n", mf.Identifier); 00164 dbg.printf("Data input :\r\n"); 00165 unsigned int sz = mf.Data.size(); 00166 dbg.printf("%c", mf.Identifier); 00167 for(unsigned int i=0; i<sz; i++) 00168 {if(mf.Data.end()){ 00169 /*dbg.printf("%c", mf.Data[1]);*/ 00170 steptelegram= 0;}else{ 00171 dbg.printf("%c", mf.Data[i]);}//array mf nya dimana???/ 00172 } 00173 dbg.printf("\r\n"); 00174 Data.CheckFtlMassage('E', mf); 00175 00176 if(Data.getFtlMessage() == FtlMessage::OK) 00177 { 00178 Data.CheckDtMassage(mf); 00179 if(Data.getDtMessage() == DataMessage::OK) 00180 { 00181 switch(steptelegram) 00182 { 00183 case 0 : /*Order_state*/ 00184 { 00185 DataProcess::STATE st = Data.checkOrderState(); 00186 00187 if(st == Data.NOORDER) 00188 { 00189 dbg.printf("No Order Present\r\n"); 00190 } 00191 else if(st == Data.ORDERRCV) 00192 { 00193 dbg.printf("Order Receive\r\n"); 00194 } 00195 else if(st == Data.PLANORDERPROC) 00196 { 00197 dbg.printf("Order Process\r\n"); 00198 steptelegram = 1; 00199 } 00200 else if(st == Data.UNPLANORDERPROC) 00201 { 00202 dbg.printf("Order Process\r\n"); 00203 steptelegram = 1; 00204 } 00205 else if(st == Data.ORDERFINERROR) 00206 { 00207 dbg.printf("Order Finish with error\r\n"); 00208 } 00209 else if(st == Data.ORDERFINNOERROR) 00210 { 00211 dbg.printf("Order Finish without error\r\n"); 00212 } 00213 SendNow = true; 00214 SkadaTask = SKADA; 00215 break; 00216 } 00217 case 1 : /* Interlock */ 00218 { 00219 DataProcess::STATE st = Data.chackInterlock(); 00220 if(st == Data.ACCCLOSED) 00221 { 00222 dbg.printf("Access is closed, please wait\r\n"); 00223 } 00224 else if(st == Data.ACCOPEN) 00225 { 00226 dbg.printf("Access is opened, goto meter_state\r\n"); 00227 steptelegram = 2; 00228 SendNow = true; 00229 SkadaTask = SKADA; 00230 } 00231 break; 00232 } 00233 case 2 : /*Meter_state*/ 00234 { 00235 DataProcess::STATE st = Data.checkState(); 00236 00237 if(st == Data.STEPDOWN) 00238 { 00239 dbg.printf("STEPDOWN\r\n"); 00240 } 00241 else if(st == Data.STEPUP) 00242 { 00243 dbg.printf("STEPUP\r\n"); 00244 } 00245 else if(st == Data.STEPJUMP) 00246 { 00247 dbg.printf("STEP LONCAT\r\n"); 00248 } 00249 else if(st == Data.STEPEND) 00250 { 00251 dbg.printf("JUMP TO END\r\n"); 00252 steptelegram = 3; 00253 } 00254 else if(st == Data.STAY) 00255 { 00256 dbg.printf("STEP TETAP\r\n"); 00257 } 00258 else if(st == Data.FINISH) 00259 { 00260 dbg.printf("FINISH\r\n"); 00261 steptelegram = 0; 00262 } 00263 else if(st == Data.STAYNOL) 00264 { 00265 dbg.printf("STEP TETAP DI NOL\r\n"); 00266 itung++; 00267 if(itung > 10) 00268 { 00269 itung = 0; 00270 steptelegram = 0; 00271 } 00272 } 00273 else if(st == Data.ERROR) 00274 { 00275 dbg.printf("STEP ERROR COY\r\n"); 00276 steptelegram = 6; // error querry 00277 } 00278 else 00279 { 00280 dbg.printf("STEP GA NORMAL\r\n"); 00281 } 00282 SendNow = true; 00283 SkadaTask = SKADA; 00284 break; 00285 } 00286 case 3 : 00287 { 00288 steptelegram = 4; 00289 SendNow = true; 00290 SkadaTask = TASK; 00291 break; 00292 } 00293 case 4 : 00294 { 00295 //steptelegram = 2; 00296 SendNow = true; 00297 SkadaTask = TASK; 00298 break; 00299 } 00300 case 5 : 00301 { 00302 SendNow = true; 00303 SkadaTask = TASK; 00304 break; 00305 } 00306 case 6 : 00307 { 00308 steptelegram = 0; 00309 SendNow = true; 00310 SkadaTask = TASK; 00311 break; 00312 } 00313 default: break; 00314 } 00315 } 00316 else 00317 { 00318 dbg.printf("Data Ditolak\r\n"); 00319 steptelegram = 0; 00320 } 00321 00322 if(chekConect(mdm) && SendNow) 00323 { 00324 SendNow = false; 00325 00326 if(PostData(mdm, mf.Identifier, mf.Data, SkadaTask)) 00327 { 00328 dbg.printf("Data Berhasil dikirim\r\n"); 00329 } 00330 else 00331 { 00332 dbg.printf("Gagal Kirim Data\r\n"); 00333 } 00334 } 00335 } 00336 else if(Data.getFtlMessage() == FtlMessage::PROERROR) 00337 { 00338 dbg.printf("Protokol Error GAN!!!\r\n"); 00339 steptelegram = 0; 00340 } 00341 else 00342 { 00343 dbg.printf("Balasan Tidak sesuai coy!!!\r\n"); 00344 steptelegram = 0; 00345 } 00346 led2 = 0; 00347 } 00348 } // akhir while(1) 00349 }// akhir main 00350 00351 //------------------------------------------------------------------- 00352 void timerAruTick() 00353 { 00354 AruReqTick = true; 00355 } 00356 //-------------------------------------------------------------------
Generated on Thu Jul 14 2022 15:19:50 by 1.7.2