1、引言

组态软件作为一种通用软件,体系结构较为庞大、功能软件包多、价格也比较昂贵,而且对于一些复杂的业务逻辑或自定义的协议,实现起来比较麻烦。近几年,C#/.NET上位机开发应用越来越广泛,相对于传统的组态软件的方式,C#开发上位机具有灵活、易学、扩展性强的特点。本文使用VS2019作为开发软件,SQLite作为数据存储软件,硬件使用厦门宇电温度控制器,开发一套通用的上位机监控系统。【公众号dotNet工控上位机:thinger_swj】

2、项目背景

第一次听说宇电这个品牌,是我的一个朋友说让我给他帮个忙,写一个上位机和他的仪表进行通信。我二话没说就答应了,刚开始认为是走Modbus通信,因为市场上大部分仪表都是通过Modbus通信的。然而,当我拿到产品之后,发现宇电仪表推荐使用的是AIBUS通信协议,于是就去宇电官网搜索相关资料了。AIBUS协议是宇电为AI系列仪表开发的一个协议,其指令比Modbus更简单、更可靠,而且通信速率比Modbus更高,同时也具备组网功能,可以在一个RS485总线上连接多达80台仪表。

3、仪表接线配置及协议说明

我使用的仪表型号是AI-500,在查阅完相关资料之后,开始对仪表进行接线,接线图在仪表的侧面,只是测试通信的话,只需要接好电源、Pt100和485通信。

接线完成之后,需要设置一下仪表的相关参数,根据仪表的说明书,主要设置输入规格、通信地址、波特率这三个参数,如下表所示:

参数设置完毕,可以看到仪表上已经可以显示室内温度,下一步就开始编写通信类库。编写之前首先要了解一下AIBUS通信协议:

AI 仪表采用16进制数据格式来表示各种指令代码及数据。AI仪表软件通讯指令经过优化设计,标准的通讯指令只有两条,一条为读指令,一条为写指令,两条指令使得上位机软件编写容易,但能100%完整地对仪表进行操作;标准读和写指令分别如下:

读取: 地址代号 + 52H(82)+ 要读的参数代号 + 00 + 00 + 校验码

写入: 地址代号 + 43H(67)+ 要写的参数代号 + 写入低字节 + 写入高字节 + 校验码

地址代号:AI仪表有效地址为0-80,协议规定地址代号为两个相同的字节,数值为(仪表地址+80H),如地址为5,那么地址代码将对应85H 85H。

参数代号:参数代号表示各个参数对应的值,这个需要参考协议说明书,下面列举部分参数:

校验码:校验码采用 16 位求和校验方式。

读指令校验码计算方法为:

要读的参数的代号×256+82+ADDR

写指令校验码计算方法为:

要写的参数代号×256+67+要写的参数值+ADDR

公式中 ADDR为仪表地址,范围是 0~80(注意不要加上 80H)。校验码为2 个字节,其低字节在前,高字节在后。

4、AIBUS通信协议开发

  • 串口通信:在创建好Windows窗体应用后,创建一个类,取名为AIBUS,AIBUS协议基于串口通信,因此首先要实现基本的串口连接与断开,通过调用SerialPort组件实现,代码如下所示:
  • 参数封装:每次通信返回结果可能包含很多参数,这里主要获取5个重要的参数,分别是实际值、设定值、参数值、高限报警、低限报警,并将这5个参数封装成一个类,如下所示:
  • 读取参数:参考协议中的读取报文,读取参数将地址代号与参数代号作为参数,然后将返回值解析成一个AIBUSParam对象,如下所示:
  • 读取校验:读取校验按照协议进行校验和累加,最终结果转换2个字节返回,如下所示:
  • 解析报文:解析报文首先是判断返回报文校验是否正确,然后按照协议进行解析,返回AIBUSParam对象,如下所示:
  • 验证报文:验证报文主要是做校验判断,对前面N-2个字节做校验,然后与最后2个字节对比,这样就可以知道报文校验是否正确,如下所示:
  • 写入参数:参考协议中的读取报文,写入参数将地址代号、参数代号与参数值作为参数,返回值仍然解析成一个AIBUSParam对象,如下所示:
  • 写入校验:写入校验按照协议进行校验和累加,最终结果转换2个字节返回,如下所示:

5、温度监控系统TMS上位机开发

通信库编程完成后,就可以进行上位机开发,本上位机系统主要是实时采集三个不同地点的温度,通过实时曲线进行显示并存储到数据库,便于后续分析。

UI界面设计如下所示:

上位机开发主要包括以下几部分:

1、配置信息管理:配置信息主要包括通信端口号、波特率、仪表1地址代号、仪表2地址代号、仪表3地址代号等,这里采用ini的方式进行存储,通过调用底层API的方式读取配置信息,封装成对象。ini文件存储形式如下所示:

2、读取配置文件代码如下:

3、实时日志显示:系统运行过程中的各种状态都将通过日志的形式进行展示,这里采用ListView+委托的方式来实现,代码如下所示:

4、实时读取及显示:实时读取采用的是多线程的方式,通过读取错误次数来判断读取异常,从而实现自动断线重连。

5、实时数据存储:实时数据存储采用SQLite数据库,通过开启一个线程定时器,按照1秒的频率定时向数据库中存储数据,便于后续查询。

最终上位机运行结果如下所示:

6、整体总结

本文主要是结合宇电智能温度控制器,通过对其通信协议的分析,开发出对应的通信库,从而实现上位机监控系统开发。在上位机学习过程中,看懂协议、分析协议、开发协议及应用协议,都是必备的技能。【公众号dotNet工控上位机:thinger_swj】

pythonqt4上位机开发_「新阁教育」自由口通信上位机实战案例相关推荐

  1. 机架搭建_【新阁教育】穷学上位机系列——搭建STEP7仿真环境

    经常有学员问我,学习上位机要不要买PLC硬件? 我一般的回答是:富则自行购买,穷则搭建仿真. PLC硬件,对于学习上位机来说,是锦上添花的事,经济条件允许,有则更好,条件不允许,新阁教育告诉您也可以通 ...

  2. 信捷plc485通信上位机_【新阁教育】穷学上位机系列——搭建STEP7仿真环境

    经常有学员问我,学习上位机要不要买PLC硬件? 我一般的回答是:富则自行购买,穷则搭建仿真. PLC硬件,对于学习上位机来说,是锦上添花的事,经济条件允许,有则更好,条件不允许,新阁教育告诉您也可以通 ...

  3. qq视频转码失败怎么办_「新技能get√」必备!一看就会的视频转码压缩教程

    视频太大了,怎样转码压缩? 完整视频,如何截取片段? 怎样从视频里提取音频或画面? 如何用视频片段制作动图? 本期内容就用QQ影音和格式工厂两款软件 来帮大家解决上述问题 下面就让我们一起观看教程吧~ ...

  4. 信捷plc485通信上位机_三菱FX3U编程口通信上位机QT实现

    三菱FX3U编程口通信上位机软件 上位机开发流程: 一 查找类似工具 找到 三菱FX串口实验(FX Serial) 这款工具 这款工具挺好用的,能够验证大多数的功能,而且能够看到发送和接收的报文,是一 ...

  5. 「新拟物化」过时了!此刻你最应该拥抱的是「玻璃拟物化」

    转自:优设(ID:uisdcer) 还记得今年年初大家追捧的 新拟物化(Neumorphism)风格嘛?这种风格最初在社交媒体上风靡,很大程度上,来源于资深设计师 Michal Malewicz 的文 ...

  6. 精耕数字化,将成为互联网科技企业的「新蓝海」

    如果对以往拼多多的发展进行一次总结的话,拥抱互联网化,并且将互联网化的手段应用到真正需要被互联网改造的领域里,无疑是其成功的主要表现.可以说,互联网化,成就了拼多多,让拼多多成为了国内屈指可数的几大电 ...

  7. 「刘一哥GIS」系列专栏《QGIS入门实战精品教程(配套案例数据)》

    「刘一哥GIS」系列专栏<QGIS入门实战精品教程(配套案例数据)>全新上线了,欢迎广大GISer朋友关注,一起探索GIS奥秘,分享GIS价值! 本专栏以实战案例的形式,深入浅出地介绍了Q ...

  8. 容联「CV智慧园区」入选北京5G技术应用优秀案例

    2020年是5G规模建设.快速发展的一年. 为了总结5G信息通信技术应用的经验,进一步推动5G商业应用落地,在北京市通信管理局的指导下,北京市通信行业协会开展了5G信息通信技术应用案例征集工作,并评选 ...

  9. pythonqt4上位机开发_上位机开发之单片机通信实践(一)

    经常会有一些学员会问到上位机与单片机之间通信的问题,而我们经常会讲上位机与PLC之间通信,那么其实对上位机开发来说,不管是和PLC通信,还是和单片机通信,通信原理都是一样的.PLC的本质就是单片机,在 ...

最新文章

  1. java OpenCv Mat 类的基本操作(3)
  2. 8GB变3GB Vista操作系统瘦身安装大法
  3. 完善的仿京东电商开源项目
  4. Ciruy英雄谭 Chapter 1 序章
  5. Mycat简单实现读写分离与分库分表
  6. C语言结构体值复制与字符数组值复制的比较测试
  7. 牛客网(剑指offer) 第十三题 调整数组顺序使奇数位于偶数前面
  8. 命令执行——远程命令执行(二)
  9. web安全学习-验证机制存在的问题
  10. 投票源码程序_[内附完整源码和文档] 基于JSP实现的影视创作论坛系统
  11. Css基本语法及页面引用
  12. Microsoft SQL Server Desktop Engine安装过程中遇到的问题(2)
  13. 一些值得注意的算法题——队列、栈
  14. iOS 关于布局问题的一些认识
  15. Zend Studio 12.5.1 破解、注册码
  16. 问题记录:模组屏调试点亮
  17. 将excel转换为Xml
  18. 无线专题 WAN口和LAN口、WLAN和WiFi区别
  19. 运用python简单的画圆
  20. Mysql----修改语句(alter)

热门文章

  1. 使用Spring boot,Thymeleaf,AngularJS从零开始构建一个新的Web应用程序-第1部分
  2. 创建示例HTTPS服务器以获取乐趣和收益
  3. 我发现我的Java重拍了!
  4. Java 9幕后花絮:新功能从何而来?
  5. 唯一的hashCodes不足以避免冲突
  6. Spring Data Solr教程:排序
  7. 在运行时交换出Spring Bean配置
  8. java获取文件列表_java获取指定目录中的文件列表
  9. 随机森林算法 python_Python实现的随机森林算法与简单总结
  10. 通用数据保护条例_欧盟《通用数据保护条例》——2019年的形势