// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // + // + FileName: ModBus.cpp Author: S.Hammond // + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // + // + Defines and class definition for the ModBus class, // + see ModBus.cpp for more infomation // + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #ifndef _MODBUS_H_ #define _MODBUS_H_ #include "CommsDevice.h" // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #define MODBUS_READ_SINGLE 3 #define MODBUS_WRITE_SINGLE 6 #define MODBUS_CAL_TEMP 0x01c #define MODBUS_CAL_SP1 0x07f #define MODBUS_CAL_SECURITY 0x300 #define MODBUS_CAL_DISPLAY 0x306 #define MODBUS_CAL_LEVC_ADDR 0x3d5 #define MODBUS_CAL_LEVC_BAUD 0x3d6 #define MODBUS_CAL_MODEL 0x4fc #define MODBUS_CAL_ENTERPROG 0x1500 #define MODBUS_CAL_EXITPROG 0x1600 #define MODBUS_CAL_ENTERBYTE 0x05 #define MODBUS_CAL_EXITBYTE 0x06 #define MODBUS_MINIMUM_LENGTH 4 #define MESSAGE_BUFFER_LENGTH 256 #define MODBUS_CAL_POLL 2000 #define MODBUS_REPLY_MAX_WAIT 25 typedef struct sModBusHeader MODBUSHEADER; typedef struct sModBusHeader *PMODBUSHEADER; struct sModBusHeader { BYTE SlaveAddr; BYTE Function; BYTE bData[1]; }; class CModBus { public: CModBus(); ~CModBus(); void ModReadSingle(BYTE Slave,WORD Addr); void ModWriteSingle(BYTE Slave,WORD Addr, WORD Data); BOOL ModEnterProgram(BYTE bSlave); BOOL ModExitProgram(BYTE bSlave); BOOL ValidResponse(void); BYTE GetByte(int Index); WORD GetWord(int Index); void QueryDevice(BYTE Slave,char *Model); protected: void StartMessage(void); void EndMessage(void); void AddByte(BYTE bData); void AddWord(WORD wData); void AddWordLSBFirst(WORD wData); void GenCRC(void); void WriteMessage(void); void ReadMessage(void); BYTE MessageBuffer[MESSAGE_BUFFER_LENGTH]; PMODBUSHEADER pMessageHeader; int BufferLength; BYTE ResponseBuffer[MESSAGE_BUFFER_LENGTH]; PMODBUSHEADER pResponseHeader; int ResponseLength; }; #ifdef _MODBUS_C_ class CModBus ModBus; #else extern class CModBus ModBus; #endif // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #endif /* _MODBUS_H_ */