微信号 :thinger_swj微博:@新阁程序园扫码关注

上位机软件的主要功能是采集各仪器的数据,然后存储起来,并传送到环保局平台。

刚开始使用的是组态软件(用以显示流程图),然后再开发了报表软件、数据上传软件。因为组态软件使用的是标准Modbus协议,而很多仪器使用的协议根本就是自定义的,所以还要加一个协议转换软件,把各种各样的协议转换成Modbus协议,让组态软件去读。除此之外,我们还希望软件能够开机启动,就增加了延迟启动的第三方软件。

这样一来,每个站点要安装和部署的软件非常多和杂乱。加上每个站点都有自己的特点,软件出现了大量的版本。有上位机的版本管理、升级维护时,出现了极大的麻烦,管理成本极高。很多时候会有这样一种情况,前面开发的人走了,后面就没有人能维护他的软件了。

基于上面的情况,我和团队重新设计和开发了上位机软件,具有以下特点:

(1)软件集组态、采集、传输、报表、自动启动等功能于一体,一台工控机只有一个上位机软件。

(2)上位机只有一个版本,所有站点都一样。站点的不同特点通过配置文件来实现,而这个配置文件不随更新而变化。

(3)仪器五花八门,但我们把它们归于一体,用同一个模型去表现。

(4)在对仪器的支持和界面功能上,具有强大的扩展特性和灵活性。

以下是部分软件界面截图:

仪器归一化设计

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

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

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

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

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

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

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

(1)名称。

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

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

(4)因子列表。

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

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

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

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

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

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

欢迎关注“新阁上位机编程”抖音号

不定期发布上位机实用小技巧哦

快来学习互粉呀~

(长按下方图片?保存到手机相册,打开抖音扫码关注哦!相信你肯定会)

mfc上位机网络接收图片并显示_工控机上位机软件的开发历程相关推荐

  1. mfc上位机网络接收图片并显示_基于UDS on CAN的BootLoader上位机

    该上位机目前已经进行过单件.台架和实车的多轮测试验证,稳定运行,有需要的同仁可以加微信:ys15528121925. BootLoader简介 在汽车行业,bootloader用来给汽车ECU升级程序 ...

  2. android网络下载图片并且显示在图库中

    1:网络下载图片 主要是练习网络编程,获取网络数据.不能使用网络资源的软件是很难有长足的发展和进步的,个人觉得,所以最近在学习网络相关的编程.这里就把我做的demo发在这里,同时我也梳理一下知识点.废 ...

  3. html画布图片不显示_如何在HTML5画布上显示图像

    html画布图片不显示 by Nash Vail 由Nash Vail Ok, so here's a question: "Why do we need an article for th ...

  4. vue base64图片不显示_技巧 | word中插入的图片显示不完整怎么办?

    已经好久没有更新了,都快忘记有这个公众号存在了~ 这几个月发生了很多事情,工作上的任务也迟迟没有减轻,之前保持的日记也已经很久没有写了.但是觉得要是没有什么用什么方式将脑袋中时不时飘过的念头记录下来的 ...

  5. 小程序真机预览图片不显示

    在微信开发者工具当中可以显示,在手机无法显示, 问题:static的图片文件路径当中不能携带中文 解决方案:去掉中文

  6. android加载网络gif图片不显示不出来的,android显示网络gif图片

    这功能源自负责app中要加一个显示gif广告图功能. android自带控件不支持gif图片,网上很多通过扩展ImageView或View来实现支持gif图片,但在android4.0后,需要关闭硬件 ...

  7. wkwebview加载h5图片不显示_埋点 13 :App 与 H5 打通

    1.原理概述 iOS 混合开发越来越流行,App 与 H5 的打通需求,也越来越迫切! 那什么是 App 与 H5 打通呢? 所谓打通,是指 H5 集成 JavaScript 数据采集 SDK 后,H ...

  8. java 浏览器访问图片不显示_[Java教程]重新上传图片后 地址不变 浏览器加载不到的问题...

    [Java教程]重新上传图片后 地址不变 浏览器加载不到的问题 0 2016-05-27 07:00:50 做项目的时候遇到一个问题: 上传文件以后,相同的地址,第一次加载没有问题,当你操作次数过快, ...

  9. wpf加载上千张图片部分图片不显示_开源WPF控件库MaterialDesignInXAML推荐

    (给DotNet加星标,提升.Net技能) 转自:沙漠之狐耶dotnet9.com/?p=2180 前言 介绍一个开源的C# WPF开源控件库,非常漂亮,重点是开源哦 WPF做桌面开发是很有优势的,除 ...

最新文章

  1. android开发出现No Launcher activity found!解决方案
  2. 前端工程师的修真秘籍(css、javascript和其它)
  3. mysql 创建和删除用户
  4. MSI failed, 不能卸载VMware
  5. 简单页面跳转生命周期(简单清晰)
  6. Python矩阵的创建(不使用numpy)
  7. Python 2.7 Tutorial —— 流程控制
  8. TensorFlow 2.0 - Keras Pipeline、自定义Layer、Loss、Metric
  9. 第三方库pod错误:ld: library not found for -lXXX
  10. C#为null或Empty
  11. Shiro 支持三种方式的授权
  12. android恶意软件流量,基于流量分析的安卓恶意软件检测
  13. CMakeLists.txt 介绍
  14. python爬取美女图片_python爬取百度美女图片
  15. 基于php的人力资源管理系统,基于thinkPHP框架的人力资源管理系统
  16. 【推荐】git commit 规范和如何在 commit 里使用 emoji
  17. 流式Json数据生成器
  18. HTML面试题七:b标签和strong标签,i标签和em标签的区别
  19. 【物联网毕设基础】单片机:PCF8591 应用程序
  20. 详解 WebRTC 高音质低延时的背后 — AGC(自动增益控制)

热门文章

  1. python3中的int类型占64位_在windows 10 64位计算机中,默认情况下,numpy数组数据类型将以int32形式出现...
  2. SpringBoot配置Mybatis在控制台打印sql
  3. 聊一聊 SpringBoot 自动配置的原理
  4. 安卓 python termux_Android Termux 安装 Linux 就是这么简单
  5. JAVA之JVM调优-从eclipse开始
  6. NPM使用淘宝NPM镜像的使用方法汇总
  7. linux传文件到其他用户,Linux怎样拷贝文件到其他用户
  8. git第一次提交代码到码云,git pull 报错:fatal: refusing to merge unrelated histories
  9. MYSQL批量插入数据库实现语句性能分析
  10. git报错:remote: warning: Large files detected.