huohuoh

Dependencies:   NetServices mbed C027_Supports mbed-rpcx

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 //-------------------------------------------------------------------