#ifndef _SERIALFACTORY_H_ #define _SERIALFACTORY_H_ #pragma once //#include "serialinterface.h" #include "SerialProcess.h" #ifdef SERIAL_IMPL #define SERIALDLLEXPORT _declspec(dllexport) #else #define SERIALDLLEXPORT _declspec(dllimport) #endif #include using namespace std; #define USE_INSERT_AUTORAISE 1 // 插入元素,自增容器大小 ; typedef struct __COM_STRUCT { int iCommPort; CSerialProcess* pComm; }COM_STRUCT, *pCOM_STRUCT; /************************************************************************/ /* 启动执行顺序: 0.先从设备库中,获取该设备的命令数:nSize; 1.打开串口,调用OpenSerialPort(...),并用nSize来构造CCommProcess对象; 2.若串口成功打开,循环调用InserCommand(...)插入发送的命令; 3.命令插入完毕后,执行AutoCollect( ... ) 函数,启动线程循环采集; 停止执行顺序: 1.停止某一设备的采集,调用RemoveDevice函数,该函数会自动处理运行线程的挂起,安全删除; 2.停止某个串口的所有设备采集,调用CloseSerialPort函数; 3.停止所有串口的所有设备采集,循环调用CloseSerialPort函数; */ /************************************************************************/ class SERIALDLLEXPORT CSerialFactory /*:public CSerialInterface*/ { public: CSerialFactory( ); virtual ~CSerialFactory(void); protected: // 查找串口,没找到返回NULL list m_listComm; const CSerialProcess* FindComm(const int &iCommPort); public: void SetVectorSize(const int &iCommPort,const int &nSetSize); virtual BOOL OpenSerialPort( const int &iCommPort, const int &iRate, const int &iDataBit, const int &iStopBit, const int &iParity, const int &iRespTime, // 响应时间 const int &iInterval // 采集频率; ); virtual BOOL CloseSerialPort( const int &iCommPort = -1); virtual int AutoCollect( const int &iCommPort ); virtual void StopCollect(const int &iCommPort = -1); virtual void RemoveDeivce(const int &iCommPort, const int &iAddr); virtual int GetCommandsCount(const int &iCommPort); // 自动接收/停止自动接收(这种情况,只用于电脑当作下位机时); virtual void AutoScatter(const int &iCommPort); virtual void StopScatter(const int &iCommPort); virtual void SendRequest( const int &iCommPort, const int &iAddr, BYTE *szCmd,const int &iLen, const int &iRequestType ); virtual void ReadRespone( const int &iCommPort, const int &iAddr ); virtual void InserCommand( const int &iCommPort, const int &iAddr, BYTE *szCommand, const int &iLen, const char *szMark, const char *szCheck, bool bRecv = true , const int &iSNum = -1 ); virtual void DeleteRequestCommannd( const int &iCommPort,const int &iAddr, BYTE *szCommand, const int &iLen ); virtual void GetAnalogValue( const int &iCommPort, const int &iAddr, char *szMark, const int &iIndex, const int &iCutLen, const int &iSBit, const int &iEBit, char *szValue, const int &iConvertType); virtual void SetAnalogValue( const int &iCommPort, const int &iAddr, char *szMark, const int &iIndex, const int &iCutLen, const int &iSBit, const int &iEbit, char *szSetValue, const int &iCovertType); }; #endif