自主仪器中ADAM ASCII协议通信接口的设计与实现
2013-06-27郭福田刘心红曾丽丽
郭福田,刘心红,曾丽丽,赵 忖,张 昕
(东北石油大学秦皇岛分校应用技术学院,河北秦皇岛066004)
自主仪器中ADAM ASCII协议通信接口的设计与实现
郭福田,刘心红,曾丽丽,赵 忖,张 昕
(东北石油大学秦皇岛分校应用技术学院,河北秦皇岛066004)
分析了工业控制系统中常用的研华ADAM 4000系列模块与计算机之间的通信协议,以及组态软件读取研华ADAM 4000系列模块的通信过程,在以单片机为核心的自主仪器中采用了研华ADAM 4000系列模块的部分通信协议,实现了自主仪器模拟ADAM模块与组态软件的通信,该方法为解决自行设计仪器与组态软件接口问题,提出了一种技术简单、方便易行的解决途径。
通信协议;ADAM模块;接口;组态软件;ASCII码
0 引言
随着计算机在工业领域的广泛应用,控制系统中涉及到种类繁多的控制设备和过程监控装置,使用常用编程语言开发工业控制软件,编程复杂,程序重复使用率低,维护不方便,已难以满足现场的各种需求[1]。组态软件的出现为解决这种实际问题提供了一种新的方法,使用户能根据自己的控制对象和控制目的任意组态,易于完成实际的计算机控制。当用户需求发生改变时,不需作很多修改可方便地完成软件的更新和升级。组态软件除了在画面制作上,易于实现动画效果、实时数据、历史数据和曲线的显示、多媒体应用和网络传输等功能外,其主要优势还在于组态软件提供了大量底层设备(PLC可编程控制器、智能仪表、智能模块、板卡、变频器等)的驱动程序,便于与市场上流行的各种工业控制板卡及数据采集模块接口,方便快捷地构建数据监控系统,在自动化控制领域的应用越来越多[2]。
笔者在开发大港油田某输油站远程监控系统中,上位机监控软件采用目前国内流行的组态软件组态王,系统中除了采用了多个研华ADAM 4052八路光隔离数据输入模块外,还根据实际系统的需要采用了多个自主开发的可燃气体报警器。组态软件驱动支持与ADAM 4052模块的通信,而不支持笔者前期自主开发的可燃气体报警器的通信协议。为了使组态王支持自主开发的设备(后文简称自主仪器)通信,需要对自主仪器的通信协议进行改造。考虑到研华ADAM模块在工业领域的广泛应用,以及其通信协议简单、可靠,实现方便等特点,决定在自主仪器中模拟研华ADAM 4000系列模块的通信协议,将自主仪器仿真为ADAM模块,使组态软件误以为自主仪器是ADAM模块而用ADAM模块的驱动程序实现与自主仪器的通信。
本文介绍了研华ADAM 4000系列模块与计算机通信的协议,分析了组态软件读取研华ADAM模块的通信过程,开发了自主仪器模拟为ADAM模块的通信协议,并用组态软件进行了通信测试,实现了自主仪器与组态软件通信的问题。
1 ADAM模块通信协议分析
ADAM 4000系列智能远程测控模块种类繁多,功能齐全,包括数字量输入/输出模块、模拟量输入/输出模块、频率测量模块、温度测量模块等,在工业远程测控领域应用极为广泛。ADAM 4000系列模块内置微控制器及RS-485通信接口,采用ASCII码字符串格式的简单串行通信协议[3],以查询应答方式与计算机构成主从通信,主机方可用任何高级语言进行编程。通信时由主机主动发出查询请求命令,ADAM模块作为从机处于等待主机来查询的应答状态。通信中收到与主机请求命令中指定地址相符的模块接收该命令,并判断请求命令正确之后,对请求进行处理,返回应答帧(包含主机查询的数据)。如判断请求命令不正确,如帧格式错误,校验错误等,则不会有应答。主机到ADAM模块的请求命令帧格式如下:
其中起始符是%$#@其中之一,分别对应不同类型的查询命令,如通信参数配置类命令以%开始,模块参数标定类命令以$开始,读取模块数据类指令以#开始,报警设置类命令以@开始等。模块地址为两个16进制的数值的ASCII码字符,其地址范围为0到FF,如模块地址为1则地址字段用“01”两个字符表示。命令字段为向模块发出的请求命令,由0到2个大写字母表示,如读取指定模块名称的命令,则命令字段为“M”。数据字段依据命令是否带有数据而存在,如对于模拟量输出模块,数据字段用“15.000”表示输出电流为15mA。帧结束字段均为回车符,其ASCII码值为0D。校验码用于检查数据传送时通信过程中有无误码,为了确保在干扰较大的工业环境中通信的可靠性,ADAM 4000系列模块可配置为采用校验和对传输帧进行校验,该校验码产生方法如下:从起始符到校验字段之前的所有字符的ASCII码之和,取和的16进制值的低2位的ASCII码作为校验字段。如对于读取指定模块名称的请求命令帧,模块未启用校验功能时,主机发送请求命令为$01M(cr)。模块启用校验功能后,主机发送的请求命令为$01MD2(cr),这里:
其中:24 30 31 4D分别为$0 1 M四个字符的ASCII码16进制数值,其和的低2位16进制数为D2即为校验和。
ADAM 4000系列模块对主机的正确请求命令的应答帧格式如下:
当模块收到无效的请求命令时应答帧的起始符为?,后跟模块地址和回车符作为应答。
当模块收到有效的命令时应答帧的起始符为!。地址和结束符同请求命令帧。数据字段为模块对主机请求命令应答的数据。校验码的算法同请求命令帧。
从以上介绍可以看出,ADAM 4000系列模块的通信协议简单、可靠,易于实现。但ADAM 4000系列模块有25种左右,每种又有十多条命令,在设计自主仪器时,可选择与自主仪器功能相近的ADAM模块,实现其必要的通信命令,其他功能直接在自主仪器软件中固定设置,不必采用通信命令设置,就可大大简化自主仪器的设计。
2 组态软件与自主仪器通信实现
在开发大港油田某输油站远程监控系统中,上位机采用组态软件组态王,下位机采用ADAM 4052开关量输入模块和笔者自主研发的以单片机为核心的可燃气体报警器,每台报警器检测多路可燃气体浓度值并具有浓度超限报警功能。为了实现组态软件与ADAM模块和自主仪器的通信,拟在报警器中采用ADAM模块的通信协议。由于报警器的功能与研华ADAM 4017八路模拟量输入模块类似,因此选用ADAM 4017模块的通信命令,使组态软件认为所连报警器为研华的ADAM 4017模块。
ADAM 4017模块有10种与上位机通信的命令,即模块通信参数配置命令、模块参数标定命令、读模块数据命令、报警状态命令等。这些命令全部实现将增加自主仪器设计难度,笔者通过对ADAM 4017模块与组态王通信过程分析,确认要实现组态软件与ADAM 4017模块通信最少需要实现两种命令:一种是$AAM,读模块名称命令,组态软件内部使用此命令与确认模块的运行是否正常。另一种是#AAN,N=1…8,读取一路模拟量数据的命令。
这两种命令使用方法如下:
2.1 $AAM[校验](cr)
这是主机发送读取地址为AA的模块名的命令,其中$为起始符,AA为模块地址,M为读取模块名命令,校验码为前面字符的校验和,(cr)为结束符。
如果上述命令中地址不存在或命令传输过程中出错,模块不作响应。若请求帧正确时,模块响应帧为:!AA(模块名)[校验](cr)。应答的起始符为!,模块名即模块的名称,其它同请求帧。
例如:不使用校验和时,主机发送请求帧$01M(cr),模块返回应答帧!014017(cr)。
如果使用校验和,则主机发送请求帧$01MD2(cr),模块返回应答帧!0140174E(cr)。其中D2和4E为校验和。
2.2 #AAN[校验](cr)
这是主机发送读取地址为AA的模块中第N(N为0到7)通道模拟量值的命令,其中#为起始符,AA为模块地址,N为通道号,校验码为前面字符的校验和,(cr)为结束符。
如果命令中地址不配或命令传输过程中出错,模块不作响应。若请求帧正确,模块响应帧为:>(数据)[校验](cr)。这里应答帧的起始符为>,数据为模拟输出的模拟量值,其它同发送的请求帧。
例如:不使用校验和时,主机发送请求帧#011(cr),模块返回应答帧>+7.2111(cr),其中模块地址为01,+7.2111为第一路模拟量数值。
如果使用校验和,则主机发送请求帧#0184(cr),模块返回应答帧>+7.211193(cr)。其中84为#018的校验和,93为>+7.2111的校验和。
注意,在自主仪器与上位机通信时,其地址是固定的,如第一台自主仪器的地址为01,则上述第1种请求命令帧固定为:$01M(cr)。但第2种命令来说,若要读取自主仪器8个通道的模拟量数据,则要实现的命令请求帧为:#010(cr)、#011(cr)、#012(cr)、#013(cr)、#014(cr)、#015(cr)、#016(cr)、#017(cr)。因此设计自主仪器模拟为ADAM 4017模块的8个通道时,要实现对9条命令的应答。
3 测试
笔者通过对自主研发的可燃气体报警器中单片机通信部分程序重新编程[4],实现了对第2节中介绍的两种通信请求命令的应答,将自主仪器伪装为ADAM 4017模块,监控系统中组态软件误以为是与ADAM 4017模块实际是与自主仪器进行通信。为了测试报警器的通信协议,构建图1所示的测试系统。监控机通过RS-232/RS-485转换器连接到具有ADAM 4017模块通信命令的报警器,报警器上接了四个可燃气体检测传感器,监控机上安装组态王软件。其系统连接如图1所示:
图1 测试系统连接图
测试系统功能为主机定时发送查询报警器的四路传感器数据命令,得到四路可燃气体浓度数据并显示,然后与可燃气体浓度预设报警上限进行比较,超过一定值时进行报警。
组态软件的设计过程如下:在其工程浏览器中新建一个COM1设备——报警器;在数据字典中新建4个I/O实数变量分别对应报警器的AIMIN1、AIMIN2、AIMIN 3、AIMIN 4模块输入通道,数据类型均选择FLOAT;新建监测画面,放置提示文本、数据文本及图形,布局如图2所示;设置数据文本的动画连接的模拟值输出为相应报警器的输入变量;图形的动画连接的填充属性设置为绿给分正常,红表示报警;配置运行系统主画面为该监测画面[5]。运行组态系统,可看到实时显示了可燃气体浓度的当前值及报警状态,如图3所示。
图2 组态软件监测设计图
图3 组态软件监测运行图
上述测试表明,组态软件可以正确地实时地读取自主仪器设备采集到的模拟量数据并进行相应的处理。
4 结束语
本文对自主研发的可燃气体报警器所采用的通信协议进行改造,模拟了研华ADAM模块中简单可靠的通信协议,实现了组态软件对自主仪器的驱动问题,使得自主仪器方便地用于由组态软件设计的监控系统中,充分利用了自主仪器和组态软件的优势。此通信技术已用在大港油田某大站的可燃气体监测报警监测系统中,多年来运行稳定,效果良好。本文提出的自主仪器与组态软件通信技术,可用于监控软件为组态王等组态软件,远程监控模块可以是模拟量的输入/输出,也可以是数字量输入/输出,通信协议可以仿真研华ADAM串行通信协议,也可以仿真组态软件支持的其它网络通信协议。该方法应用范围广,具有一定的推广价值。
[1]胡志华,赵文兵.工控组态软件[M].北京:电子工业出版社,2007:12-13.
[2]龚运新,方立友.工业组态软件实用技术[M].北京:清华大学出版社,2005:3-5.
[3]李传锋,沈安文,赵方亮.基于MSP430的智能仪表与组态王的通讯设计[J].微计算机信息,2007,23(8):91-92.
[4]郭福田,杨克远,包天悦.单片机应用基础教程[M].北京:石油工业出版社,2009:126-138
[5]张博文,邓广龙,李喜东.基于智能模块和组态王的机场环境监控系统设计[J].黑龙江科学,2012,3(8):44-46.
Design and Im plementation of Communications Interface w ith Adam ASCIIProtocol in Self-M aking Instrument
GUO Fu-tian,LIU Xin-hong,ZENG Li-li,ZHAO Cun,ZHANG Xin
(School of Applied Technology,School of Qinghuangdao of Northeast Petroleum University,Qinghuangdao 066004,China)
The paper analyses the communication protocol between PC and ADAM module in the industrial control system,and the communication process of the configuration software reading the ADAM 4000 Modules.U-sing the part of communication protocol of ADAM 4000 modules on instrument of development initiatively that core is single-chip microcomputer.that realized the communication between configuration software and instrument of development initiatively.Thismethod is sample and easy away of interface technology between configuration software and instrument of development initiatively.
communication protocol;ADAM module;interface;configuration software;ASCII code
郭福田(1965-),男,陕西蒲城人,东北石油大学秦皇岛分校应用技术学院副教授,从事计算机控制、数据通信等教学与研究。
河北省高等教育学会高等教育科学研究课题(GTXH2013-186)。
TP2
A
2095-0063(2013)06-0031-04
2013-09-21