基于SECS协议开发的简明教程(4)

发布于:2022-12-03 ⋅ 阅读:(663) ⋅ 点赞:(0)

本文的基础是前面的三篇,建议先花几分钟过一遍大概,然后接着看本篇,更系统化。

本文讲怎么增加和处理自定义消息

在第一篇里面已经说过,基类已经把每个SnFn包括控制命令都定义成Virtual了,意味着每一个接口你都可以override,自己按照你自己的想法去重写实现。如果你不重写也有默认的标准协议的实现。所有的标准协议定义的SnFn,函数名就是编号一致的SnFn,不用记忆,一一对应的。如下图所示(只粘贴一部分),全部都是一致的:

	virtual int S1F1(HSMSHeader *pHdr, HCOMM hComm);
	virtual int S1F2(HSMSHeader *pHdr, HCOMM hComm);
	virtual int S1F3(HSMSHeader *pHdr, HCOMM hComm);
	virtual int S1F4(HSMSHeader *pHdr, HCOMM hComm);
	virtual int S1F5(HSMSHeader *pHdr, HCOMM hComm);
	virtual int S1F6(HSMSHeader *pHdr, HCOMM hComm);
	virtual int S1F7(HSMSHeader *pHdr, HCOMM hComm);
	virtual int S1F8(HSMSHeader *pHdr, HCOMM hComm);
	virtual int S1F9(HSMSHeader *pHdr, HCOMM hComm);
	virtual int S1F10(HSMSHeader *pHdr, HCOMM hComm);

对于自定义的Fn大于64的那些SnFn,我们怎么去添加了?SDK怎么帮我们分派到我们的接口里面来呢。这个在SDK的Demo里面已经有给出示例了。

我举例说明:

假如你先自定义S1F65, S1F69,同样你只需要在主窗体类以同名形式在你的派生类中添加上声明

	// ------ UserDefined ------
	int SnFn_UserDef(HSMSHeader *pHdr, HCOMM hComm); //必须的
    // -------- 你自定义的那一堆SnFn的声明 ----------
	int S1F65(HSMSHeader *pHdr, HCOMM hComm);
	int S1F69(HSMSHeader *pHdr, HCOMM hComm);

然后添加上实现过程,如下:

//CMainClassName就是你的那个主窗类,自行修改宏定义即可
int  CMainClassName::S1F65(HSMSHeader *pHdr, HCOMM hComm)
{

	SenderBuffer sender(this);
	HSMSHeader header = (*pHdr);
	bool bNeedReplyFlag = getReplyFlag(*pHdr);

	//to-do
	//编写你的代码

	return 0;
}

int  CMainClassName::S1F69(HSMSHeader *pHdr, HCOMM hComm)
{

	SenderBuffer sender(this);
	HSMSHeader header = (*pHdr);
	bool bNeedReplyFlag = getReplyFlag(*pHdr);

	//to-do
	//编写你的代码

	return 0;
}

留的空位置,就是你自己需要添加的代码。

然后添加上消息的分派过程:

//CMainClassName就是你的那个主窗类,自行修改宏定义即可
//针对自定义的消息,在这里回调分派

int CMainClassName::SnFn_UserDef(HSMSHeader *pHdr, HCOMM hComm)
{
	int ret = 0;


	int Sn = getStreamNum(*pHdr);
	int Fn = getFunctionNum(*pHdr);
	int nDeviceId = getDeviceId(*pHdr);

	switch (SnFn(Sn, Fn))
	{
	case SnFn(1, 65):
	{
		ret = S1F65(pHdr, hComm);
		break;
	}
	case SnFn(1, 69):
	{
		ret = S1F69(pHdr, hComm);
		break;
	}
	
	}

	return ret;
}

这样,当接收到S1F65或者S1F69,就自动回调到了你的S1F65或S1F69的实现体里面去了。轻轻松松就实现了自定义消息的添加和处理了。

你也可以直接从CSDN下载SECS SDK从里面的Demo去拷贝代码即可。

如有疑问或咨询,请评论留言或在CSDN站内消息联系。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到