• 技术文章

    宇电智能温度仪表在NET上位机组态软件开发中的解决方案

    2021-03-12 09:04:53  来源:天津星阁教育科技有限公司

    宇电智能温度仪表在C#/.NET上位机开发中的应用

     

    付加劲 天津星阁教育科技有限公司 天津 300450

     

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

     

    关键字:组态软件;上位机;宇电温度控制器;VS2019

     

    Abstract:As a general-purpose software, configuration software has a relatively large system structure, many functional software packages, and a relatively expensive price. It is also troublesome to implement some complex business logic or custom protocols. In recent years, the development and application of C#/.NET host computer has become more and more extensive. Compared with the traditional configuration software, C# development host computer has the characteristics of flexibility, easy learning, and strong scalability. This article uses VS2019 as the development software, SQLite as the data storage software, and the hardware uses the Xiamen Yudian temperature controller to develop a universal host computer monitoring system.

     

    1 引言

       在工业自动化领域,上位机软件一直在扮演着一个至关重要的角色。一般情况下,我们通常会采用组态软件来开发上位机,然而,组态软件作为一种通用软件,体系结构较为庞大、功能软件包多、价格也比较昂贵,而且对于一些复杂的业务逻辑或自定义的协议,实现起来比较麻烦。

       近几年来,高级语言开发上位机应用越来越广泛,相对于传统的组态软件,采用高级语言开发上位机具有更灵活、扩展性更强、更便宜的特点。在众多的高级语言当中,微软.NET平台下的C#显得尤为突出。C#/.NET开发上位机相对于其他的语言而言,更加方便快捷,而且可以获取到的资料也相对比较多。

     

    2 AIBUS简介

       AIBUS协议是宇电为AI系列仪表开发的一个协议,其指令比Modbus更简单、更可靠,而且通信速率比Modbus更高,同时也具备组网功能,可以在一个RS485总线上连接多达80台仪表。

     

    2.1 AIBUS报文结构

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

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

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

     

    2.2 AIBUS报文说明

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

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

    表1:AI仪表常用参数

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

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

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

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

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

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

    返回报文:无论是读还是写,仪表都返回以下10个字节数据:

    返回:测量值 PV + 给定值SV + 输出值MV及报警状态 + 所读/写参数值 + 校验码

    PV、SV 及所读参数值各占 2 个字节,低位字节在前,高位字节在后,整数无法表示小数点,要求用户在上位机处理;MV 占一个字节,数值范围-110~+110,状态位占一个字节,校验码占 2个字节,共 10个字节。

     

    3 仪表接线设置

       在实现上位机通信前,需要搭建仪表通信环境,这里主要针对仪表的接线及相关参数设置进行说明。

    3.1 仪表接线说明

       针对AI-500系列仪表,通信接口为485接口,因此需要通过将485总线转换成USB接口,然后再接入上位机,根仪表测试的接线图,还需要接入220V电源、Pt100铂热电阻,具体接线方式如下表所示:

    表2:AI仪表接线图

    3.2 仪表设置说明

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

    表3: AI仪表参数设置

    参数设置完毕,可以看到仪表上已经可以显示室内温度。

    为了便于组成网络,这里选择3个仪表,将另外2个仪表的输入规格和波特率设置成一样,但是通信地址分别设置成3和4,在接线方面,直接将485接口的A和B并接在一起即可,网络接线图如下所示:

    图1:网络结构图

     

    4 AIBUS通信协议开发

    4.1 串口通信

       在创建好Windows窗体应用后,创建一个类,取名为AIBUS,AIBUS协议基于串口通信,因此先要实现基本的串口连接与断开,通过调用SerialPort组件实现,代码如下图所示:

    图2:串口连接

    4.2 读取参数

       每次通信返回结果可能包含很多参数,这里主要获取5个重要的参数,分别是实际值、设定值、参数值、高限报警、低限报警,并将这5个参数封装成一个类,如下图所示:

    图3:通信对象

       参考协议中的读取报文,读取参数将地址代号与参数代号作为参数,然后将返回值解析成一个AIBUSParam对象,如下图所示:

    图4:读取参数

       读取报文中涉及到校验,对于读取校验,按照协议进行校验和累加,zui终结果转换2个字节返回,如下图所示:

    图5:读取校验

    4.3 解析报文

       解析报文先是判断返回报文校验是否正确,然后按照协议进行解析,返回AIBUSParam对象,验证报文主要是做校验判断,对前面N-2个字节做校验,然后与zui后2个字节对比,这样就可以知道报文校验是否正确,如下图所示:

    图6:验证报文

       验证报文通过后,需要根据协议来对返回的报文进行解析,zui终返回成一个AIBUSParam对象,如下图所示:

    图7:解析报文

    4.4 写入参数

       参考协议中的写入报文,写入参数将地址代号、参数代号与参数值作为参数,返回值仍然解析成一个AIBUSParam对象,如下图所示:

    图8:写入参数

       写入报文中涉及到校验,对于写入校验,按照协议进行校验和累加,zui终结果转换2个字节返回,如下图所示:

    图9:写入校验

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

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

    5.1 UI界面设计

       监控系统UI界面主要包括三部分,分别为实时曲线、系统日志及参数显示,设计布局如下图所示:

    图10:上位机UI界面设计

    5.2 配置信息管理

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

    图11:配置信息

    5.3 实时日志显示

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

    图12:实时日志

    5.4实时读取及断线重连

       实时读取采用的是多线程的方式,直接轮询读取各个仪表的参数,读取完成后进行二次解析并显示。对于断线重连,每次如果读取失败,则将错误次数加1,当读取错误次数超过max错误次数时,说明读取异常,当出现读取异常时,需要判断COM口是否存在,如果仍然存在,则不需要重新连接,直接继续读取即可,如果COM口不存在,则需要重新连接,从而实现自动断线重连。

    5.5实时数据存储

       实时数据存储采用SQLite数据库,通过开启一个线程定时器,按照1秒的频率

    留言
    林经理
    谷瀑服务条款》《隐私政策