#ifndef RS485_DRIVER_H #define RS485_DRIVER_H #include #include #include #include "Common/data_define.h" //---------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------- class RS485Driver : public QThread { Q_OBJECT public: RS485Driver(const char *Dev); virtual void run(); ~RS485Driver(); static const quint8 DeviceAddr = 1; public: int GetCommTick(void); void IncCommTick(void); void SetMonomerNum(const quint16 num); int ReadFromIOModule( const quint8 device_addr,const quint16 data_addr, const quint16 read_data_num, void *read_data_buf); int MultiWriteIOModule( const quint8 device_addr,const quint16 data_addr, quint16 *wr_data_buf, const quint16 WriteDataNum); int SingleWriteIOModule( const quint8 device_addr,const quint16 data_addr, const quint16 wr_data, const quint16 timeout_ms); quint8 IF_MONCLEAR; private: int FD; bool RS485_RUN_EN; quint16 MonomerNum; int CommTick; quint8 moncount; static const int CommOK = 0; static const int CommTxError = -1; static const int CommRxError = -2; static const int CommDataError = -3; static const int CommWrFailError = -4; private: void set_speed(int fd, int speed); int set_Parity(int fd,int databits,int stopbits,int parity); unsigned short CalModbusCRC16(void *puchMsg, unsigned short usDataLen); int OpenDev(const char *Dev); void SetDevAttr(int bitrate, char bitlen, char stopbitlen, char checktype); int WriteDev(void *buf, int len); int ReadDev(void *buf, int len); signals: void SendCommData(COMM_DATA); }; #define Swap16(u16) ((quint16)(((quint16)(u16) >> 8)|((quint16)(u16) << 8))) #endif // RS485_DRIVER_H