C#上位机自由口通信上位机实战案例

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

接线端子接线说明
1/2接220V电源
3/4接485通信接口
18/19/20接Pt100铂热电阻

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

参数名称参数说明设定值
输入规格根据接入不同的类型,设置对应的代号21
通信地址用于定义仪表的通信地址,同一个总线不能重复5
波特率用于定义通信波特率,可设置4800、9600、192009600

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

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

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

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

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

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

参数代号参数说明备注
00H给定值单位与测量值一致
01HHIAL上限报警单位与测量值一致
02HLOAL下限报警单位与测量值一致
0BHInP输入规格输入规格详细见说明书
16HAddr通信地址仪表设备地址

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

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

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

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

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

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

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

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

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

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秒的频率定时向数据库中存储数据,便于后续查询。

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

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值