SerialFactory.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #ifndef _SERIALFACTORY_H_
  2. #define _SERIALFACTORY_H_
  3. #pragma once
  4. //#include "serialinterface.h"
  5. #include "SerialProcess.h"
  6. #ifdef SERIAL_IMPL
  7. #define SERIALDLLEXPORT _declspec(dllexport)
  8. #else
  9. #define SERIALDLLEXPORT _declspec(dllimport)
  10. #endif
  11. #include <list>
  12. using namespace std;
  13. #define USE_INSERT_AUTORAISE 1 // 插入元素,自增容器大小 ;
  14. typedef struct __COM_STRUCT
  15. {
  16. int iCommPort;
  17. CSerialProcess* pComm;
  18. }COM_STRUCT, *pCOM_STRUCT;
  19. /************************************************************************/
  20. /*
  21. 启动执行顺序:
  22. 0.先从设备库中,获取该设备的命令数:nSize;
  23. 1.打开串口,调用OpenSerialPort(...),并用nSize来构造CCommProcess对象;
  24. 2.若串口成功打开,循环调用InserCommand(...)插入发送的命令;
  25. 3.命令插入完毕后,执行AutoCollect( ... ) 函数,启动线程循环采集;
  26. 停止执行顺序:
  27. 1.停止某一设备的采集,调用RemoveDevice函数,该函数会自动处理运行线程的挂起,安全删除;
  28. 2.停止某个串口的所有设备采集,调用CloseSerialPort函数;
  29. 3.停止所有串口的所有设备采集,循环调用CloseSerialPort函数;
  30. */
  31. /************************************************************************/
  32. class SERIALDLLEXPORT CSerialFactory /*:public CSerialInterface*/
  33. {
  34. public:
  35. CSerialFactory( );
  36. virtual ~CSerialFactory(void);
  37. protected:
  38. // 查找串口,没找到返回NULL
  39. list<COM_STRUCT> m_listComm;
  40. const CSerialProcess* FindComm(const int &iCommPort);
  41. public:
  42. void SetVectorSize(const int &iCommPort,const int &nSetSize);
  43. virtual BOOL OpenSerialPort(
  44. const int &iCommPort,
  45. const int &iRate,
  46. const int &iDataBit,
  47. const int &iStopBit,
  48. const int &iParity,
  49. const int &iRespTime, // 响应时间
  50. const int &iInterval // 采集频率;
  51. );
  52. virtual BOOL CloseSerialPort( const int &iCommPort = -1);
  53. virtual int AutoCollect( const int &iCommPort );
  54. virtual void StopCollect(const int &iCommPort = -1);
  55. virtual void RemoveDeivce(const int &iCommPort, const int &iAddr);
  56. virtual int GetCommandsCount(const int &iCommPort);
  57. // 自动接收/停止自动接收(这种情况,只用于电脑当作下位机时);
  58. virtual void AutoScatter(const int &iCommPort);
  59. virtual void StopScatter(const int &iCommPort);
  60. virtual void SendRequest( const int &iCommPort, const int &iAddr, BYTE *szCmd,const int &iLen, const int &iRequestType );
  61. virtual void ReadRespone( const int &iCommPort, const int &iAddr );
  62. virtual void InserCommand(
  63. const int &iCommPort,
  64. const int &iAddr,
  65. BYTE *szCommand,
  66. const int &iLen,
  67. const char *szMark,
  68. const char *szCheck,
  69. bool bRecv = true ,
  70. const int &iSNum = -1 );
  71. virtual void DeleteRequestCommannd( const int &iCommPort,const int &iAddr, BYTE *szCommand, const int &iLen );
  72. virtual void GetAnalogValue(
  73. const int &iCommPort,
  74. const int &iAddr,
  75. char *szMark,
  76. const int &iIndex,
  77. const int &iCutLen,
  78. const int &iSBit,
  79. const int &iEBit,
  80. char *szValue,
  81. const int &iConvertType);
  82. virtual void SetAnalogValue(
  83. const int &iCommPort,
  84. const int &iAddr,
  85. char *szMark,
  86. const int &iIndex,
  87. const int &iCutLen,
  88. const int &iSBit,
  89. const int &iEbit,
  90. char *szSetValue,
  91. const int &iCovertType);
  92. };
  93. #endif