工控机上位机软件的开发历程(二)[通俗易懂]

工控机上位机软件的开发历程(二)[通俗易懂]仪器归一化设计这是具体内容的第一篇,我们先来讲述仪器的归一化设计。仪器是各种功能都有的,我只举我们在环境监测这方面所用到的仪器。我们要测试水是不是有污染物质,污染到什么程度,我们要测试水体的高锰酸盐指数、氨氮、总磷、总氮等值。我们的站房有一个后备电源,我们要知道市电是否断电了,是否在用备用电源。我们的站房是有空调的,我希望知道站房的温度和湿度,于是就有了一个温湿度计。我们可能还会有流量计、…

大家好,又见面了,我是你们的朋友全栈君。

仪器归一化设计

这是具体内容的第一篇,我们先来讲述仪器的归一化设计。

仪器是各种功能都有的,我只举我们在环境监测这方面所用到的仪器。我们要测试水是不是有污染物质,污染到什么程度,我们要测试水体的高锰酸盐指数、氨氮、总磷、总氮等值。我们的站房有一个后备电源,我们要知道市电是否断电了,是否在用备用电源。我们的站房是有空调的,我希望知道站房的温度和湿度,于是就有了一个温湿度计。我们可能还会有流量计、DTU、数采仪等仪器。这些仪器跟工控机的连接也不尽相同,有的使用串行线,有的使用网线。用网线的仪器,有的作为客户端,有的作为服务端,有的使用UDP。总之,这些仪器的通讯协议是五花八门的,通信链路也是有区别的。

但我们需要对仪器做出归一化设计。

其实无论仪器有什么功能,工控机对仪器的操作无非就两个:读和写。读的话,可能是读到测量的值、仪器的状态等;写的话,就是启动仪器测量、修改仪器的参数等。而读和写的操作,都是通过发送和接收完成的。虽然通信协议各不相同,但我们总是可以把发送和接收的内容转化为最基础的字节流。要发送怎样的字节流,接收到的字节流如何解释,就要根据仪器的特性去定义了。

根据这样的特点,我们为所有仪器定义了一个基类,它包含了发送字节流和接收字节流两个方法。而所有仪器类,都继承自这个基类。

工控机上位机软件的开发历程(二)[通俗易懂]

每个仪器特定的类,只需要完成拼装发送的字节流,和解析接收的字节流即可,它不需要理会如何发送和接收。而实际上的发送和接收,我们知道链路是有多种的,如上面提到的串行线和网线。使用哪种方式去传输,我们需要根据仪器的属性去判断。如下图所示的方法,在基类里实现。

工控机上位机软件的开发历程(二)[通俗易懂]

解决了上面仪器类的结构设计以后,我们需要考虑仪器的属性如何表示和存储。我们把所有仪器都称为设备,设备包含以下内容:

(1)名称。

(2)传输方式,以及传输的参数。例如用串口,那应该有串口号、波特率等。如果用网线,应该有IP、端口等。

(3)使用的通信协议。选定之后,上位机能够找到相应的通信协议类,对字节流进行操作。顺便一说,我们把通信协议类用反射的方法去做,每个协议是一个dll,选择不同的协议即会执行不同的代码。

(4)因子列表。

没错,说到这里,我们就发现,设备里有一个因子的概念。因子是什么?这个比较难解释。从最原始的因子来看,因子就是仪器的测量值。例如我们有一台温湿度计,它的测量值会有两个,分别是温度和湿度。我们就把温度和湿度作为两个因子。我们对因子的概念进行扩展,把状态也作为因子。例如仪器的工作状态、故障状态,都可以看作是一个个的因子。甚至,我们把控制仪器的命令,也看成是因子。例如是启动测量、更换运行模式,每一个动作都看成是一个因子。这样下来之后,仪器的所有功能,都变成了因子的列表。因子有很多属性,但不是所有因子都一样的。名称是我们想到的唯一一个共性属性。我们在实际的开发过程中,定义了几种因子:

(1)实际因子:就是测量值。它应该有单位、超标限制、因子地址(Modbus协议)等属性。

(2)计算因子:跟实际因子类似,只是它不是直接读取仪器值得到的,而是根据实际因子计算出来的。这样的话,计算因子就要有一个表达式的属性,例如是:温度*9/5+32

(3)状态因子:仪器的状态。它的值不一定是数,可能是一个字符串。

(4)反控因子:对仪器的控制命令。可以用一个数字去表示控制的类型,只需要在协议类里面解释清楚即可。

通过上面的方法,我们把所有仪器都归一成统一的类了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145069.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java中byte的用法_澄清池的工作原理

    java中byte的用法_澄清池的工作原理缓冲区在计算机世界中随处可见,内存中的多级缓冲区,io设备的缓冲区等等,还有我们经常用的内存队列,分布式队列等等。缓冲区,平衡了数据产生方和数据消费方的处理效率差异,提高了数据处理性能。JDK为了解决网络通信中的数据缓冲问题,提供了ByteBuffer(heap或者直接内存缓存)来解决缓存问题,通过缓冲区来平衡网络io和CPU之间的速度差异,等待缓冲区积累到一定量的数据再统一交给CPU去处理,从而…

    2022年9月19日
    3
  • 关于大数据,云计算,物联网的概述正确的是_物联网应用领域

    关于大数据,云计算,物联网的概述正确的是_物联网应用领域1、大数据时代  以大数据、物联网和云计算为标志的第三次信息化浪潮开始,大数据时代全面开启。大数据发展主要经历了三个历程。2、大数据的概念  关于什么是大数据”这个问题,大家比较认可关于大数据的“4V”说法。大数据的4个“V”,或者说是大数据的4个特点,包含4个层面:数据量大(Volume).数据类型繁多(Variety).处理速度快(Velocity)和价值密度低(Value)。3、…

    2022年10月7日
    2
  • 使用 vsphere-automation-sdk-python 自动创建虚拟机

    使用 vsphere-automation-sdk-python 自动创建虚拟机

    2021年7月9日
    280
  • 如何卸载tensorflow

    如何卸载tensorflowwindows系统下:1.按windows+r2.输入cmd3.输入pipuninstalltensorflow中间会提示输入Y或者N,输入Y后按回车即可。如果提示找不到pip,或者pip不是内部指令,点击这里解决。https://blog.csdn.net/qq_29371155/article/details/105074987…

    2022年6月22日
    48
  • 使用虚拟环境virtualenv/Virtualenvwrapper隔离多个python

    使用虚拟环境virtualenv/Virtualenvwrapper隔离多个python

    2021年11月21日
    46
  • vim中多行注释和多行删除命令「建议收藏」

    vim中多行注释和多行删除命令「建议收藏」vim中多行注释和多行删除命令这些命令也是经常用到的一些小技巧,可以大大提高工作效率。.多行注释:首先按esc进入命令行模式下,按下Ctrl+v,进入列(也叫区块)模式;在行首使用上下键选择需要注释的多行;按下键盘(大写)“I”键,进入插入模式;然后输入注释符(“//”、“#”等);最后按下“Esc”键。注:在按下esc键后,会稍等一会才会出现注释,不要着急~~时间很短的2.删除多行注释:首先按esc进入命令行模式下,按下Ctrl+v,进入列模式;选定要取消注释的多行;

    2022年6月17日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号