#pragma once #include "CEXVirtualListCtrl.h" #include "ControlCAN.h" // CCanDeviceDlg 对话框 typedef struct ST_DRIVER_CONTROL { int Drive_Speed; //行走速度 int Diversion_Position; //转向角度 int Zero_Angle; //转向零度角(根据机械结构自定义的归零角度) int MIX_Angle_R; //手动状态下最大转向角度 int MAN_Angle_L; //手动状态下最小转向角度 int AutoMAX_Angle; //自动状态下最大转向角度 int AutoMIN_Angle; //自动状态下最大转向角度 float SPEEDPAR; //行走速度系数 ST_DRIVER_CONTROL() { Drive_Speed = 0; Zero_Angle = 1320000; //零点 左极限2108000 504000 MIX_Angle_R = 504000; // Zero_Angle + 850000; MAN_Angle_L = 2108000; // Zero_Angle - 850000; AutoMIN_Angle = Zero_Angle - 700000; AutoMAX_Angle = Zero_Angle + 700000; Diversion_Position = Zero_Angle; SPEEDPAR = 1; } } ST_DRIVER_CONTROL; typedef struct ST_SENSOR_DATA { short FMagnetism_Offset; //前磁条偏移量(左负右正) uint8_t FMagnetism_Valid; //前磁条1有效 0无效出轨 uint8_t FMagnetism_ALLTrue; //16个霍尔开关都检测到输出1 ,用于装车点停车(加装横向磁条,16个霍尔开关可以全部检测到) short BMagnetism_Offset; //后磁条偏移量(左负右正) uint8_t BMagnetism_Valid; //后磁条1有效 0无效出轨 uint8_t BMagnetism_ALLTrue; //16个霍尔开关都检测到输出1 ,用于卸车点停车(加装横向磁条) uint8_t RFID_Point; //RFID标签位置 uint8_t Battery_SOC; //电池电量 ST_SENSOR_DATA() //默认构造函数 { FMagnetism_Offset = 0; FMagnetism_Valid = 0; FMagnetism_ALLTrue = 0; BMagnetism_Offset = 0; BMagnetism_Valid = 0; BMagnetism_ALLTrue = 0; RFID_Point = 0; Battery_SOC = 0; } } ST_SENSOR_DATA; class CDriverMainDlg : public CDialogEx { DECLARE_DYNAMIC(CDriverMainDlg) public: CDriverMainDlg(CWnd* pParent = NULL); // 标准构造函数 virtual ~CDriverMainDlg(); // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_DEV_CAN_DLG }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 afx_msg void OnCheckCanrxEn(); DECLARE_MESSAGE_MAP() public: int m_nSendFrameFormatIdx0; int m_nSendFrameTypeIdx0; int m_nSendFrameFormatIdx1; int m_nSendFrameTypeIdx1; int m_nSendCanIndex; int m_nRecvCanIndex; int m_nDevType; public: CString m_iniPath; int m_DevType; int m_DevIndex; BOOL m_bOpenCan; BOOL m_bCanRxEn; BOOL m_bAutoRefresh; BOOL m_bAutoSend; BOOL m_bAutoSend2; CString m_strSendID; CStatic m_txFMagneticOffset; CStatic m_txBMagneticOffset; CStatic m_txRFIDID; CString m_strSendData; BOOL m_StopSendFlag; BOOL m_StopSendFlag2; void Drive_enable(); //驱动电机使能 void Drive_disable(); //失能 int Auto_Stop(); int Auto_Forward(float speedpar); int Auto_Backward(float speedpar); int Auto_EStop(); void Control_Mode_Reset(); void ReadConfigFromIni(); void InitVirtualList(); BOOL OpenCanDevice(); void UpdateCanStatue(BOOL bStatue); void ProcessPipeMsg(int lMsgId, char* pData, int lLen); void SendCanData(int nDevIdx, int nCanIdx, int nFrameType, int nFrameFormat, UINT32 acFrameId, char acFrameData[8]); int Str2Hex(CString str); int HexChar(char c); //CPluginMainDialog *m_pMainWnd; virtual BOOL OnInitDialog(); static UINT ReceiveCanThread(LPVOID v); static UINT SendCanThread(LPVOID v); static UINT SendCanThread2(LPVOID v); void WriteVirtualList(CString strFrameId, CString strFrameData, int nTxRx = 0, int nCanIdx = 0, int nFrameType = 0, int nFrameFormat = 0); public: CEXVirtualListCtrl *m_pstVirtualList; afx_msg void OnBnClickedBtnSendMan(); afx_msg void OnBnClickedAutoSend(); CEXMemFileQueue* m_pQueue; CString m_strDataDir; volatile int m_nAgvAction; int m_nAgvReturnState; afx_msg void OnBnClickedCheckAutoRefreshShow(); afx_msg void OnBnClickedBtnSendMan2(); afx_msg void OnBnClickedAutoSend2(); ST_DRIVER_CONTROL m_stDrvierControl; ST_SENSOR_DATA m_stSensorData; void AnalysiseCanData(int nCanIndex, VCI_CAN_OBJ objCan); void CalculateAutoCanParam(); void CalculateManualCanParam(); void SendCanData(); afx_msg void OnBnClickedButtonAgvstop(); afx_msg void OnBnClickedButtonAgvestop(); afx_msg void OnBnClickedButtonAgvforward(); afx_msg void OnBnClickedButtonAgvbackward(); };