⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demomotocon.h

📁 工业自动化CAN总线通信的应用层程序
💻 H
字号:
#define MAX_SIZE_DI			256
#define MAX_SIZE_AI			64
#define MAX_SIZE_DO			128

#define MIN_SIZE_DVC		0x00
#define MAX_SIZE_DVC		0xFF
#define MIN_SIZE_FC			0x00
#define MAX_SIZE_FC			0xFF
#define MIN_SIZE_PS			0x10
#define MAX_SIZE_PS			0xF0
#define MAX_OFFSET_PS		0x0F
#define MAX_COUNT_DVC		16
#define MAX_SIZE_FLT_DO1S	16
#define MAX_SIZE_MSG		100000

#define SIZEOF_FRAME		0x0D
#define CAN_VDL_NULL		0x00	//有效数据长度空
#define CAN_VDL_FIXED		0x07	//有效数据长度

// Function Constrain
#define FC_CAN_F			0x80	//CAN帧格式MASK
#define FC_CAN_DL			0x0F	//数据长度MASK
#define FC_PF_DVC_REG		0xEE	//设备入网申请功能码
#define FC_PF_DVC_PS		0xFF	//设备启用参数组功能码
#define FC_DA_MD			0x00	//总控管理地址
#define FC_DA_BRD			0xFF	//广播地址
#define FC_PDU				0xF0	//PDU格式分级
#define FC_PS_DI			0x10
#define FC_PS_AI			0x30
#define FC_PS_DO_S1			0x20	//控制输出后返回状态
#define FC_PS_DO_S2			0xA0	//控制输出通道工作状态
#define FC_PS_DO_C			0x40
#define FC_PS_DO_S1_SYN		0x60
#define FC_PS_EVT_DI		0x80
#define FC_PS_EVT_DO_S1		0x00	// 未定义
#define FC_PS_EVT_DO_S2		0x90

#define BIT_MASK1			0x01
#define BIT_MASK2			0xFF
#define SIZEOF_DATA			(CAN_VDL_FIXED*8)
#define WSIZEOF_DATA		((CAN_VDL_FIXED+1)/sizeof(WORD))


//------------------------------------------------------------------------------
struct CAN_DATA
{
	BYTE Data[7];
};

struct CAN_MSG
{
	BYTE FC[5];
	CAN_DATA canData;
	BYTE CS;
};


//--------------------------------------------- CMyUnitCanCM -------------------
class CMyUnitCanCM : public CMyUnit
{
protected:
	DECLARE_SERIAL(CMyUnitCanCM);
	CMyUnitCanCM();
	~CMyUnitCanCM();
protected:
	int m_nSizeDI;
	int m_nSizeAI;
	int m_nSizeDO;
	BYTE m_bEnabledDvc[MAX_COUNT_DVC];
	BYTE m_DvcAddrDest[MAX_COUNT_DVC];
	BYTE m_bDvcAddrDestOK;
	BYTE m_bDvcRegistered[MAX_COUNT_DVC];
	BYTE m_bCanDataDOS1OK[(MAX_OFFSET_PS+1)*MAX_COUNT_DVC];
	BYTE m_bDvcDOS1FlickerCfg[MAX_SIZE_DI*MAX_COUNT_DVC];
	int m_nCountMsg[MAX_COUNT_DVC];
	int m_nCountMsgAllDvc;
	BYTE m_bClockDO1SFlickerSynRcvOK;
	WORD m_wClockDO1SFlickerSynRcv;
	WORD m_wClockDO1SFlickerSynSlf;
	DWORD m_dwClock100ms;
	DWORD m_dwClock100msDO1S;
protected:
	CMyDataSwitch* m_pDI[MAX_SIZE_DI*MAX_COUNT_DVC];
	CMyDataSwitch* m_pDO1S[MAX_SIZE_DO*MAX_COUNT_DVC];
	CMyDataSwitch* m_pDO2S[MAX_SIZE_DO*MAX_COUNT_DVC];
	CMyDataAnalog* m_pAI[MAX_SIZE_AI*MAX_COUNT_DVC];
	CMyDataOperateYKYT* m_pDO[MAX_SIZE_DO*MAX_COUNT_DVC];
	CMyDataSetpoint* m_pDvcAddr[MAX_COUNT_DVC];
	CMyDataFloat* m_pDvcInfo[MAX_COUNT_DVC];
	CAN_MSG m_canMsg;
	CAN_DATA m_canDataDOS1[(MAX_OFFSET_PS+1)*MAX_COUNT_DVC];
public:
	virtual BOOL OnCreate(void);
	virtual BOOL OnCreateData(CMyData* pData);
	virtual void OnPortOpen(void);
	virtual void ExchangeComData(COMCONTROL* pCC);
	virtual void OnTimerFast(void);
	virtual void Serialize(CArchive& ar);
protected:
	void OnInitDvcCfgInfo(void);
	void DoExchangeComDataAcquest(COMCONTROL* pCC);
	void DoExchangeComDataCtrl(COMCONTROL* pCC);
	BOOL DoReadData(COMCONTROL* pCC);
	BOOL DoWriteData(COMCONTROL* pCC,BYTE DvcAddrDest,BYTE FCParamGrp,BYTE* pData,BYTE VldDL,BYTE Precedence);
	void ReveiveDvcAddrDest(void);
	void ReveiveDvcInfo(void);
	void ReveiveMonitorInfo(void);
	void ReveiveDvcData(BYTE DvcAddrDest,BYTE FCParamGrp);
	void ReveiveDataDI(BYTE DvcAddrDest,BYTE FCParamGrp);
	void ReveiveDataAI(BYTE DvcAddrDest,BYTE FCParamGrp);
	void ReveiveDataDOS1(BYTE DvcAddrDest,BYTE FCParamGrp);
	void ReveiveDataDOS2(BYTE DvcAddrDest,BYTE FCParamGrp);
	void ReveiveDataDO1SSyn(BYTE DvcAddrDest,BYTE FCParamGrp);
	void ReveiveSOESelf(CString strType,CString strMsg);
	void ReveiveSOE(BYTE DvcAddrDest,BYTE FCParamGrp);
	void OnPrintMsgFile(BYTE DvcAddrDest,BOOL bSendFlag);
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -