DIOS.Dev.Mech.WDMAMMOCAN.hpp 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. #pragma once
  2. #include <string>
  3. #include "DIOS.Dev.IODevice.Detail.hpp"
  4. #include "DIOS.Dev.MECH.Mould.hpp"
  5. #include "DiosDevThread.h"
  6. #include "IODeviceWithSCF.tlh"
  7. #include "IODeviceWithSCF.tli"
  8. #include "DIOS.Dev.MSGMould.hpp"
  9. #include "CANPort.h"
  10. #include <deque>
  11. #ifndef DIOSDEVMECHWDMAMMOCAN_EXPORTS
  12. #ifdef _WIN64
  13. #ifdef _DEBUG
  14. #pragma comment(lib, "DIOS.Dev.Mech.WDMAMMOCAN64D.lib")
  15. #else
  16. #pragma comment(lib, "DIOS.Dev.Mech.WDMAMMOCAN64D.lib")
  17. #endif
  18. #else
  19. #ifdef _DEBUG
  20. #pragma comment(lib, "DIOS.Dev.Mech.WDMAMMOCAND.lib")
  21. #else
  22. #pragma comment(lib, "DIOS.Dev.Mech.WDMAMMOCAND.lib")
  23. #endif
  24. #endif
  25. #endif
  26. #ifdef DIOSDEVMECHWDMAMMOCAN_EXPORTS
  27. #define _DIOSDEVMECHDEMO_API __declspec(dllexport)
  28. #else
  29. #define _DIOSDEVMECHDEMO_API __declspec(dllimport)
  30. #endif
  31. //CAN port class
  32. //#include "StringExt.h"
  33. #define TIMING0 0x04
  34. #define TIMING1 0x1C
  35. #define ACCESSCODE 0x60000000 //验证码,我ID:24:--0 11000 00 0000 0000 0000 0000 0000 0000
  36. #define MASKCODE 0x9FFFFFFF //屏蔽码 :-----1 00111 11 1111 1111 1111 1111 1111 1111
  37. #define ID_ImageConsole 0x18 //图像控制台ID:24
  38. #include "Usbcan/ZLG.h"
  39. #include "Usbcan/PC.h"
  40. #include "Usbcan/JY.h"
  41. #include "Usbcan/CAN.h"
  42. using namespace std;
  43. class CCANPort;
  44. //end CAN
  45. namespace DIOS::Dev::Detail::MECH
  46. {
  47. namespace nsDev = DIOS::Dev;
  48. class WDMAMMOCANDevice : public IODeviceDetail, public MECHMould
  49. {
  50. using super = IODeviceDetail;
  51. using superMech = MECHMould;
  52. public:
  53. //void FireNotify(string key, unsigned int value);
  54. //void FireNotify(string key, float value);
  55. void FireNotify(string key, string value);
  56. protected:
  57. std::shared_ptr <DIOS::Dev::IOEventCenter> m_EventCenter;
  58. ResDataObject m_GenConfig;
  59. public:
  60. WDMAMMOCANDevice(std::shared_ptr <IOEventCenter> center,string configfile="");
  61. ~WDMAMMOCANDevice();
  62. virtual bool Prepare();
  63. virtual void Register();
  64. virtual RET_STATUS GetTomoResults(ResDataObject& resultAngle, ResDataObject& resultHeight);
  65. virtual RET_STATUS SetGrid(unsigned int GridType);
  66. virtual RET_STATUS SetAutoTracking(unsigned int nAutoTracking);
  67. virtual std::string GetGUID() const override;
  68. virtual RET_STATUS SetStudyInfo(STUDAY_INFO info) override { return RET_STATUS::RET_SUCCEED; };
  69. virtual RET_STATUS SetViewList(int ViewCount, const char* viewID[], const char* viewName[]) override { return RET_STATUS::RET_SUCCEED; };
  70. virtual RET_STATUS SelectViewInfo(const char* viewID, const char* viewName) override { return RET_STATUS::RET_SUCCEED; };
  71. virtual RET_STATUS SetAutoTracking(int nAutoTracking) override { return RET_STATUS::RET_SUCCEED; };
  72. virtual RET_STATUS SetGridType(AttrKey::MECH_GRIDTYPE GridType) override { return RET_STATUS::RET_SUCCEED; };
  73. virtual RET_STATUS SetSID(float value) override
  74. {
  75. m_MECHUnit.m_SID->Update(int(value));//just test.
  76. return RET_STATUS::RET_SUCCEED;
  77. };
  78. virtual RET_STATUS SetSOD(float value) override { return RET_STATUS::RET_SUCCEED; };
  79. virtual RET_STATUS SetPositonNumber(int pn) override { return RET_STATUS::RET_SUCCEED; };
  80. virtual RET_STATUS GetTomoResults(std::string& result) override { return RET_STATUS::RET_SUCCEED; };
  81. };
  82. #if 1
  83. class CCANPort
  84. {
  85. public:
  86. CCANPort();
  87. virtual ~CCANPort();
  88. static DWORD ReceiveThread(void* param);
  89. WDMAMMOCANDevice* m_pTableCtrl;
  90. void SetTableCtrl(WDMAMMOCANDevice* pTabCtrl) { m_pTableCtrl = pTabCtrl; };
  91. void CAN_Close();
  92. bool CAN_Reset();
  93. BOOL CAN_Init(HWND hWnd, DWORD dwAccCode = ACCESSCODE, DWORD dwAccMask = MASKCODE, UCHAR ucFilter = 1, UCHAR ucMode = 0, UCHAR ucTiming0 = TIMING0, UCHAR ucTiming1 = TIMING1, int nCannum = 0);
  94. BOOL CAN_Open(DWORD DeviceInd = 0, int Reserved = 0);
  95. bool CAN_transmit(string strData, string strFrmID, BYTE RomoteFlag = 0, BYTE ExternFlag = 0, BYTE type = 1);
  96. bool CAN_Start();
  97. HANDLE m_Thread;
  98. HWND m_hCANWindowHandle;
  99. BOOL m_bCanStart; //物理CAN节点打开
  100. protected:
  101. BOOL m_bCANThreadActive;
  102. int m_cannum;
  103. int m_devtype;
  104. DWORD m_devind;
  105. VCI_INIT_CONFIG init_config;
  106. CCAN* m_pCANEx;
  107. int m_nAngleDirection;//0 负方向 ,1 正方向
  108. };
  109. #endif // 0
  110. }
  111. //-----------------------------------------------------------------------------
  112. // WDMAMMOCANDriver
  113. //-----------------------------------------------------------------------------
  114. namespace DIOS::Dev::Detail::MECH
  115. {
  116. class _DIOSDEVMECHDEMO_API WDMAMMOCANDriver : public IODriverWithSCF <DriverMould>
  117. {
  118. using super = IODriverWithSCF <DriverMould>;
  119. ResDataObject m_GenConfig;
  120. public:
  121. WDMAMMOCANDriver();
  122. virtual ~WDMAMMOCANDriver();
  123. public:
  124. virtual void Prepare() override;
  125. virtual int Connect() override;
  126. virtual void Disconnect() override;
  127. virtual bool isConnected() const override;
  128. virtual void Dequeue(const char* Packet, DWORD Length) override;
  129. virtual void FireNotify(int code, std::string key, std::string content) override;
  130. virtual auto CreateDevice(int index)->std::unique_ptr <IODevice> override;
  131. virtual std::string DriverProbe() override;
  132. virtual std::string GetResource() override;
  133. virtual std::string DeviceProbe() override;
  134. virtual bool GetDeviceConfig(std::string& Cfg) override;
  135. virtual bool SetDeviceConfig(std::string Cfg) override;
  136. WDMAMMOCANDevice* m_pDriGenDev;// = nullptr;
  137. private:
  138. static PACKET_RET callbackPackageProcess(const char* RecData, DWORD nLength, DWORD& PacketLength);
  139. bool m_bDemoMode;
  140. bool m_bDemoConnected; // 在 DEMO 模式下, 调用过 Connect 吗?
  141. bool m_bDemoInitDataFlag; //是否存在初始化数据
  142. ResDataObject m_InitDataFile;
  143. //for webconfig
  144. ResDataObject m_DeviceConfigSend;
  145. ResDataObject m_DeviceConfig;
  146. string g_strAppPath;
  147. ResDataObject m_ConfigAll; //存储当前的配置,用于修改配置时写回文件
  148. ResDataObject m_Configurations; //存储当前配置中“CONFIGURATION”节点的内容
  149. std::unique_ptr <ResDataObject> m_pAttribute;
  150. std::unique_ptr <ResDataObject> m_pDescription;
  151. bool SaveConfigFile(bool bSendNotify);
  152. bool GetDeviceConfigValue(ResDataObject config, const char* pInnerKey, int nPathID, string& strValue);
  153. bool SetDeviceConfigValue(ResDataObject& config, const char* pInnerKey, int nPathID, const char* szValue);
  154. CCANPort* m_pCAN;
  155. bool ResetCommunication();
  156. };
  157. }