接着前面7篇SECS/GEM开发教程系列,但本文的主要主题是纠偏解惑。

一、怎么做才能快速支持SECS呢?

许多网友发私信问了我许多问题,发现大家把重点都放在了怎么主动收/发数据上了,这确确实实把大方向搞错了。

事实上、SECS是问询应答式HOST预定义好格式的上报式  的交换信息方式。

换句话说:HOST不询问,EQP就不需要发数据。或者是EQP不按HOST预定义好的数据格式发送(比如采集事件或TRACE或Report),HOST也不认的。除了报警信息是主动上报的,便于后台实时看到设备状态。

正确的打开方式是什么样的呢?

在本系列教程(1)和教程(2)里面就已经说明了——用Editor创建ID表HOST与EQP交换信息的依据是各种ID,ID创建好了之后,你的程序唯一需要做的事情就是当ID内容变化了,调用UpdateID更新一下就可以了。(这里划重点)

如果是说,你这个数据变化,需要触发事件上报,那也必须HOST有预先发定义事件的指令,定义好了事件了才有用的。你随便自己上报个事件ID,人家HOST后台也不认识啊。TRACE更是如此。TRACE数据周期性上报,SECS库底下帮你完成了接收预定义指令和周期性上报,其实你的程序啥也不用做就已经完美支持了。

四张ID表才是重点,它才是与HOST交换信息的依据。我发布SECS SDK的目的也就是把程序员解放出来,不需要关心太多的收/发指令,不要被近五百页的SECS协议文档苦惨了,在不需要看协议文档的情况下完成SECS协议的支持;重点还在你的设备的业务逻辑的编写,顺带着更新一下ID实时值即可。

把教程(1)(2)做到了,后台要问询你的信息,secs库底下就自动用最新值应答了,后台预定义什么指令或周期性上报什么、也都已经支持了。SECS.dll已经帮你把所有以ID交换数据的指令按照E5协议全部都支持了。

二、如何截获所有的收到的数据呢

另外,还有网友问,如何截获所有的收到的数据呢?

很简单,重写data_message_proc方法。这个SDK Demo里面已经有了,Demo里为了打印log日志,就已经重写了该方法,如下:


int CMainClassName::data_message_proc(HSMSHeader *pHdr, HCOMM hComm)
{int Sn = getStreamNum(*pHdr);int Fn = getFunctionNum(*pHdr);int nDeviceId = getDeviceId(*pHdr);//如果你要截获所有的SnFn消息//请在这里添加你的代码//to-do//Append到日志打印Append(pHdr, false);int ret = __super::data_message_proc(pHdr, hComm);return ret;
}

还有网友咨询,那个模拟器怎么发数据呢?怎么收到数据没有回复呢? 事实上模拟器不是Host后台会真的处理数据应答,除了控制消息之外,绝大多数SnFn数据消息,都是需要你用鼠标选左侧的那些SnFn数据消息,然后鼠标右键菜单,进行发送Primary消息,或者选择发送Reply消息的。

三、需要特别注意的地方

所有的有关于data_message_proc,以及所有的SnFn的处理方法的重写,还是控制事务方法的重写,请不要在你的处理方法里面做有关UI界面数据更新的处理,特别是UpdateData()。为什么呢?因为所有的这些回调都是在数据接收线程里面调用的,当工作线程看待,它与你的UI主线程是完全分开的。你不能在工作线程里面去更新UI线程里面的控件数据。

当然你说:我现在就是需要把收到的数据,显示在界面的Edit框上面呀。怎么办呢。

这不算什么事儿,你可以在你的主类里面定义好几个成员变量,收到数据了先赋值给它们。然后PostMessage自定义消息给自己的主窗体类,在消息过程里面去UpdateData更新即可。

本教程系列文章连载,如果遇到有什么疑问,可留言或站内私信消息。

基于SECS协议开发的简明教程(8)相关推荐

  1. 基于SECS协议开发的简明教程

    很有必要把苦程序员久矣的SECS/GEM了结了,于是诞生了本系列文章八篇和开发包,不需要看近500页PDF就可以轻松完成SECS功能支持. 0.SECS SDK 开发包 这个开发包是对SEMI SEC ...

  2. 基于SECS协议开发的简明教程(7)

    接着前面6篇SECS/GEM开发教程系列. 基于SECS协议开发的简明教程(1)-怎么搭建支持SECS工程 基于SECS协议开发的简明教程(2)-怎么编辑交换数据的ID 基于SECS协议开发的简明教程 ...

  3. 基于SECS协议开发的简明教程(6)

    接着前面的五篇SECS/GEM协议开发的系列文章,继续讲本SECS SDK的以下几个功能 怎么触发警报.解除警报(EQP端) 怎么定义Trace(Host端),怎么触发Trace数据(EQP端) 怎么 ...

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

    接着前面4篇SECS/GEM开发教程系列. 基于SECS协议开发的简明教程(1)-怎么搭建支持SECS工程 基于SECS协议开发的简明教程(2)-怎么编辑交换数据的ID 基于SECS协议开发的简明教程 ...

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

    本文的基础是前面的三篇,建议先花几分钟过一遍大概,然后接着看本篇,更系统化. 基于SECS协议开发的简明教程(1)-怎么利用SECS SDK搭建工程 基于SECS协议开发的简明教程(2)-怎么编辑交换 ...

  6. 基于LLVM的编译原理简明教程 (1) - 写编译器越来越容易了

    基于LLVM的编译原理简明教程 (1) - 写编译器越来越容易了 进入21世纪,新的编程语言如雨后春笋一样不停地冒出来.需求当然是重要的驱动力量,但是在其中起了重要作用的就是工具链的改善. 2000年 ...

  7. 【绿冰壶的脚本小屋】第二期:基于icmp协议开发简易ping工具

    [绿冰壶的脚本小屋]第二期:基于ICMP协议开发简易ping工具 任务目标:编写程序使用 ICMP 协议探测主机是否存活 任务要求: 1.理解ICMP协议的原理 2.实现代码,尽可能多的实现探测主机是 ...

  8. java实现基于SGIP协议开发联通短信的方法

    本文实例讲述了java实现基于SGIP协议开发联通短信的方法.分享给大家供大家参考.具体如下: 近段时间,由于公司的业务需要,开发出了联通短信.此文章的编写也是根据网上的一些示例来完成的.闲话少说,下 ...

  9. 视频教程-区块链项目:基于以太坊开发拍卖系统DApp教程(含资料)-区块链

    区块链项目:基于以太坊开发拍卖系统DApp教程(含资料) 张长志技术全才.擅长领域:区块链.大数据.Java等.10余年软件研发及企业培训经验,曾为多家大型企业提供企业内训如中石化,中国联通,中国移动 ...

最新文章

  1. eas 在linux下安装_有在linux系统安装eas7.5的没???求指点
  2. SAP MM 如何看一个Inbound Delivery单据相关的IDoc?
  3. java idea连数据库报错:Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone'时区错误
  4. 1260 不一样的A+B
  5. django的动态url,url里含有参数,含有参数的url
  6. 【报告分享】2021年数字化浪潮在中国的发展和实践.pdf(附下载链接)
  7. [NOI2006]神奇口袋
  8. 【Android 常见控件使用】Button(按钮)与ImageButton(图像按钮)
  9. python新闻标题分类_机器学习也会“标题党”?这个算法能根据标题判断新闻类别...
  10. linux dd从磁盘读取文件命令
  11. 管理学必读书籍排行榜
  12. 安卓TV开发(四) 实现主流智能TV视频播放器UI
  13. USACO 2021-2022 December Contest Bronze 题解
  14. 互联网公司的中台到底是什么
  15. python bind绑定失败_Python tkinter之Bind(绑定事件)的使用示例
  16. Quantopian Risk Model (QRM)
  17. 研究生毕业可直接落户,享受10万补贴!汇总各城市人才引进政策!
  18. 虚拟机匹配合适的服务器,如何为虚拟机选择合适的服务器硬件?
  19. 5W1H聊开源之Who——谁“发明”了开源?
  20. 史上最雷人的神曲--last night i stuck in the wrong hole

热门文章

  1. 《从日薪五元到亿万身家》成杰“逆袭”励志畅销有声书即将上线啦
  2. 10个数比大小(排序)——冒泡和选择
  3. 计算机3d影视的应用程序,用电脑也能看3D电影?捡起吃灰的3D眼镜!
  4. 直连路由与路由器连多个网段
  5. mysql 创建 存储过程 与执行存储过程 每天零凌晨一点定时执行
  6. 设置输入框默认文字内容
  7. 计算机网络笔记(王道考研) 第四章:网络层
  8. 西北工业大学计算机学院奖学金政策,西北工业大学本科生普通奖学金管理办法...
  9. linux文件系统数据恢复
  10. 程序员该如何在这个寒冷的冬天学会冬泳?