#pragma once #pragma warning(disable:4275) #include #include #include #include "windows.h" #include "CRS232.h" #include #include using namespace std; #ifdef MODBUS_EXPORTS #define MODBUS_DLL_API __declspec(dllexport) #else #define MODBUS_DLL_API //__declspec(dllimport) #endif #define MODBUS_BASE_ERROR (SERIAL_PORT_BASE_ERROR + 20000) #define MAX_COM_BUFFER_LEN 256 typedef enum { MODBUS_BASE_FILE = MODBUS_BASE_ERROR, RTU_ERR_ORDER, RTU_ERR_ADDR, RTU_ERR_DATA, RTU_ERR_CONN, RTU_ERR_WRITE, RTU_ERR_READ_NULL, RTU_ERR_RECV, RTU_ERR_PARITY, } MODBUSERR; class MODBUS_DLL_API CRS485 : public CRS232 { public: char aryComPort[10]; private: unsigned char m_Readbuf[MAX_COM_BUFFER_LEN]; unsigned char m_Writebuf[MAX_COM_BUFFER_LEN]; unsigned short CalcCrcFast(unsigned char*puchMsg, unsigned short usDataLen); long ModbusRead(unsigned char rtuAddr, unsigned char cmd, unsigned short int dataAddr, unsigned short int readCount, unsigned short int *pReadVal); public: long OpenPort(unsigned long xPort, int iRate); long OpenPort(char *xPort, int iRate); long ModbusRead_01(unsigned char rtuAddr, unsigned short int dataAddr, unsigned short int readCount, unsigned short int *pReadVal); long ModbusRead_03(unsigned char rtuAddr, unsigned short int dataAddr, unsigned short int readCount, unsigned short int *pReadVal); long ModbusRead_04(unsigned char rtuAddr, unsigned short int dataAddr, unsigned short int readCount, unsigned short int *pReadVal); long ModbusWrite_05(unsigned char rtuAddr, unsigned short int dataAddr, unsigned short int &pWriteVal); long ModbusWrite_06(unsigned char rtuAddr, unsigned short int dataAddr, unsigned short int pWriteVal); long ModbusWrite_10(unsigned char rtuAddr, unsigned short int dataAddr, unsigned short int writeCount, unsigned short int *pWriteVal); static string GetErrText(long errid); };