/* MBTS_GSM.c: Modbus TCP Slave via GPRS Compiler: BC++ 3.1, Turbo C++ 1.01(3.01) Compile mode: large Project: MBTS_GSM.C lib\G4500.lib lib\WServer.lib lib\os7_com.lib lib\MBTCP.lb Hardware: G-4500-2G [Feb 24, 2015] by William */ #include "lib\G4500.h" #include "lib\WServer.h" #include "lib\os7_com.h" #include "lib\MBTCP.h" Server_Info MyServer; _GPRS_DATA GPRSData; unsigned char Memory_DO[1024] = {0}; unsigned char Memory_DI[1024] = {0}; unsigned short Memory_AO[1024] = {0}; unsigned short Memory_AI[1024] = {0}; int DISize = 1024; int DOSize = 1024; int AISize = 1024; int AOSize = 1024; const int ModbusID = 1; unsigned char SendData[1460] = {0}; int SendLen; int ModbusTCP_Init(void) { char LibVer[30] = {0}; int i; MBT_GetVer(LibVer); //Get modbus TCP lib version Print("Modbus TCP lib:%s\r\n",LibVer); MBT_Init(&Memory_DI,&Memory_DO,&Memory_AI,&Memory_AO); //Set memory for DIO/AIO MBT_SetIOSize(DISize,DOSize,AISize,AOSize); //Set memory size for DIO/AIO MBT_Set_ModbusID(ModbusID); //Set local ID } int ModbusTCP_Run(void) { int i; int Res; memset(&GPRSData,0,sizeof(_GPRS_DATA)); Res = GM_GetPacket(&GPRSData); if(Res != 1) return; // debug message for receive data for(i=0; i Modbus Memory */ fValue=X305IO_AnalogIn(0); Memory_AI[0]=(int)(fValue*1638.35); /* (fValue/20.0*32767.0) */ /* Analog input (Ch1) ==> Modbus Memory */ fValue=X305IO_AnalogIn(1); Memory_AI[1]=(int)(fValue*1638.35); /* Analog input (Ch2) ==> Modbus Memory */ fValue=X305IO_AnalogIn(2); Memory_AI[2]=(int)(fValue*1638.35); /* Analog input (Ch3) ==> Modbus Memory */ fValue=X305IO_AnalogIn(3); Memory_AI[3]=(int)(fValue*1638.35); iProcess=1; break; case 1: /* Analog input (Ch4) ==> Modbus Memory */ fValue=X305IO_AnalogIn(4); Memory_AI[4]=(int)(fValue*1638.35); /* Analog input (Ch5) ==> Modbus Memory */ fValue=X305IO_AnalogIn(5); Memory_AI[5]=(int)(fValue*1638.35); /* Analog input (Ch6) ==> Modbus Memory */ fValue=X305IO_AnalogIn(6); Memory_AI[6]=(int)(fValue*1638.35); /* Analog input (Ch7) ==> Modbus Memory */ fValue=X305IO_AnalogIn(7); Memory_AI[7]=(int)(fValue*1638.35); iProcess=2; break; case 2: /* Digital input ==> Modbus Memory */ iValue=X305IO_Read_All_DI(); for(i=0; i<3; i++) { if(iValue&0x01) Memory_DI[i]=1; else Memory_DI[i]=0; iValue>>=1; } iProcess=3; break; case 3: /* Modbus Memory ==> Digital output */ iValue=0; for(i=0; i<3; i++) { if(Memory_DO[i]!=0) iValue+=(1<