邹益民 徐 赤
(兰州石化职业技术学院电子电气系1,甘肃 兰州 730060;杭州自动化技术研究院2,浙江 杭州 310012)
人们在设计新的控制系统及控制算法的过程中,往往首先借助Matlab的Simulink工具箱完成建模和仿真,直至获得满意的仿真结果[1]。由于在此过程中,我们常常会忽略实际对象系统可能存在的部分扰动和噪声,并对其数学模型作出某种假设和近似,因而造成仿真与实际应用相脱节,导致设计好的控制器与实际被控对象相联时,控制效果与仿真结果有较大出入。
Simulink提供实时仿真环境(real-time workshop,RTW)解决上述问题[2-4]。RTW 支持快速原型化及嵌入式目标设计两种类型的实时系统构建,但这两类方法或需要专用的板卡,或需要专门设计的嵌入式工控机系统,应用受到很大限制。本文探讨了使用Simulink串行通信模块以及高性价比的ADAM-4000模块构建简易半实物实时仿真系统的实施方案。
Simulink是MathWorks公司于1990年推出的产品,可用于动态系统建模、仿真和分析。从Matlab6.0版本开始,MathWorks公司在软件中增加了设备控制工具箱,提供了Simulink软件环境与外界进行串口通信的专用模块库[5]。该库包括以下两组串口通信模块:To Instrument和Query Instrument模块组以及 Serial Configuration、Serial Send和Serial Receive模块组。前一组模块除支持串口接口外,还支持GPIB、TCP/IP及USB等多种外部接口;后一组模块专用于串口通信。
本方案使用后一组模块实现串口通信,该组模块的功能说明如下。
①Serial Configuration模块用于配置串行口参数。可指定串口号、数据传输的波特率、数据位数、停止位数、奇偶校验模式等。
②Serial Send模块用于向串口发送二进制数据。可指定发送数据的类型、数据发送的前导及结束字符等。
③Serial Receive模块用于通过串口获取远程数据。配置功能与Serial Send模块相似。
研华ADAM-4000是一种应用广泛、性价比高的智能接口模块。该系列模块均支持RS-485串行异步半双工通信,通信协议除支持Advantech ASCII协议外,个别模块还支持Modbus/远程终端单元协议(remote terminal unit,RTU),从而确保其与任何计算机及工业控制系统均具有良好的兼容性[6]。
ADAM模块种类繁多,功能齐全,其中,ADAM-4018+和ADAM-4024两模块可方便地与常见的传感器、变送器、执行器等配合,为计算机控制提供现场接口。两模块功能简述如下。
①ADAM-4018+模拟量输入模块:8路16位分辨率模拟量差分输入模块,支持各型热电偶及±20 mA、4~20 mA电流输入。
②ADAM-4024模拟量输出模块:4路12位分辨率模拟量输出模块,支持0~20 mA、4~20 mA、±10 V输出。
上述两模块均支持Advantech ASCII和Modbus/RTU通信协议。
由于Modbus协议具有更高的传输速率、可靠性和通用性,故本方案选用其作为Simulink与ADAM模块间的通信协议。
使用Modbus协议通信时,通过读写指定的寄存器即可获得模块的输入输出信号值。依据模块的采样分辨率和信号范围,其对应关系如下所述。
①ADAM-4018+模拟量输入模块
该模块分辨率为16位,其输入测量值大小可由式(1)计算:
式中:areg为Modbus模入寄存器的读出值;L1、L0分别为被测信号的上、下限;d为计算所得的信号测量值。
如被测信号为4~20 mA电流,寄存器读出值为29FDH,则对应的电流测量值为:
②ADAM-4024模拟量输出模块
该模块分辨率为12位,其输出信号值大小可由式(2)计算:
式中:areg为Modbus模出寄存器的读出值;L1、L0分别为输出信号的上、下限;d为计算所得信号输出值。
如输出为0~20 mA电流,则6EFH对应的电流输出值为:
d=6EFH ×20/4 095=1 775×20/4 095=8.67 mA
将ADAM-4000模块状态拨至INIT状态,并通过ADAM-4000-5000 Utility软件,即可将通信协议设置为Advantech ASCII或 Modbus。
Modbus协议采用RS-485或RS-232作为其物理层,数据通信基于主-从技术,仅主设备能初始化传输,而从设备则只能对主设备查询请求作出响应[7-8]。Modbus协议的传输模式又可细分为ASCII和远程终端单元(RTU)两种模式。
①ASCII模式:消息中的每个字节(8 bit)都作为两个ASCII字符发送。这种方式的主要优点是字符发送的时间间隔可达到1 s而不产生错误,适用于慢速网络。
②RTU模式:消息中的每个字节(8 bit)包含两个4 bit的十六进制字符。这种方式的主要优点是传输速率较高。本方案即采用这种传输模式。
为保证数据传输的高可靠性,Modbus提供了多种错误校验方法。奇偶校验可作用于每个字符;帧校验纵向冗余码(longitudinal redundancy check,LRC)和循环冗余码(cyclic redundancy check,CRC)则作用于整个消息帧,分别适用于ASCII和RTU传输模式。
3.2.1 读取模入状态(功能码04)
本功能可使主站获得从站的模拟量输入值。主站命令帧中可指定从哪一个模拟量开始,连续读取多少模拟量(每路模拟量包含2个字节,高位在前、低位在后)。从站应答帧中的数据是按上述要求读取的模拟量数据。
以下为读取17号节点模入点0108~0110的数值示例,各模入点读出值分别为555(022BH)、0及100(0064H)。
①查询RTU帧
读取模入状态的查询RTU帧格式如图1所示。
图1 读模入状态的查询RTU帧Fig.1 RTU query frame of reading analog inputs
②应答RTU帧
读取模入状态的应答RTU帧格式如图2所示。
图2 读模入状态的应答RTU帧Fig.2 RTU response frame of reading analog inputs
3.2.2 强制单路模出(功能码06)
本功能可使主站设定从站某路模拟量输出的值。主站命令帧中可指定将哪一路模拟量输出值修改为预定值。从站正常应答是将报文原文发回。以下为强制17号从站模出点136为039EH的示例,给出了强制模出状态的查询、应答RTU帧格式。
①查询RTU帧
强制模出状态的查询RTU帧格式如图3所示。
图3 强制模出状态的查询RTU帧Fig.3 RTU query frame of enforcing analog output
②应答RTU帧
强制模出状态的应答RTU帧格式如图4所示。
图4 强制模出状态的应答RTU帧Fig.4 RTU response frame of enforcing analog output
系统框图如图5所示。其中,虚线框中部分由Simulink软件实现所需的控制算法及与ADAM模块的RS-485通信功能;ADAM-4018+用于获取测量变送器给出的4~20 mA电流信号,并通过RS-485接口发送至Simulink软件(Modbus总线地址为2,读模入功能码为04);Simulink软件通过RS-485接口给出控制输出信号(Modbus总线地址为3,强制单路输出功能码为06),再经ADAM-4024转换为0~20 mA输出电流,驱动执行机构,最终达到对被控对象的控制目标。
图5 仿真系统组成框图Fig.5 Composition of the simulation system
Simulink功能模块连接图如图6所示。
图6 Simulink功能模块连接图Fig.6 Connections of Simulink functional modules
由ADAM-4018+给出的测量信号,经Simulink中的串口接收模块接收后,通过自定义的“接收响应串分析处理函数”,获得被控参数的测量值。该测量值经PID模块实现运算处理后,转换为4~20 mA输出值。该输出值再经自定义的“发送命令串生成函数”,由Simulink中的串口发送模块发送至ADAM-4024模块,用于驱动执行机构。图6中的串口组态模块用于完成串行口配置。在此,串行口为COM1,波特率为9 600 bit/s,8个数据位,1个停止位,无奇偶校验。
Simulink可使用内置于Matlab/Simulink中的丰富的各类功能模块,也允许用户使用嵌入式函数或是S函数创建用户自定义模块[9]。其中,嵌入式函数与Matlab的M-函数语法结构非常相似,方便熟悉Matlab的使用者掌握与应用。而S函数则是一种具有特殊调用格式的 Matlab函数,可通过 Matlab、C、C++、Fortran等语言编写,功能强大,但使用也更加复杂。本方案借助嵌入式函数,实现如图6所示的“发送命令串生成函数”和“接收响应串分析处理函数”功能模块。
4.2.1 CRC-16 循环冗余码计算
计算CRC-16码的功能可由查表法快速完成[10],因篇幅所限,此处略去。
4.2.2 发送命令串产生
以下程序用于产生发送命令串,实现ADAM-4024模出值修改和ADAM-4018+模入值读取功能。
4.2.3 响应串接收
由于ADAM-4018+与ADAM-2024响应串的长度不同,分别为7 B与8 B,故程序中使用内部缓冲区组合响应串并进行甄别及判读。本部分程序框图如图7所示。
图7 响应串处理程序框图Fig.7 Processing program of the response string
读ADAM-4024通道0模出值的程序如下。
由于Simulink的纯数字仿真往往难以精确模拟真实的控制对象,本文给出了一种使用ADAM-4000模块构成现场接口的简易半实物仿真控制系统及其详细硬软件实现方案。通过简单的PID仿真实例表明,本文所述方法将控制算法应用于实际的被控对象,可获得更真实的控制效果。
借助本文提出的方法可有效缩短控制系统及算法设计的研发周期,满足控制器设计灵活性和快速性的需要,为高级控制算法的研究和验证提供了一个良好的实验平台。
[1]魏克新,工石亮,陈志敏,等.MATLAB语言与自动控制系统设计[M].2版.北京:机械工业出版社,2004.
[2]徐国政,陈勇.基于Matlab/xPC Target的数据采集系统[J].微计算机信息,2005(1):63 -64.
[3]李根,唐臻宇,耿海翔,等.基于Matlab/RTW的控制系统一体化新型设计方法[J].中国测试,2010,36(1):75 -77.
[4]齐振恒,孙中杰,李涛.RTW嵌入式代码自动生成机制与代码结构分析[J].计算机测量与控制,2010,18(3):639 -642.
[5]赵云鹏.MATLAB串口通信在数据采集中的应用[J].微计算机信息,2006,22(1):111 -112.
[6]李梅,段晨东,韩旻,等.基于ADAM模块的恒温恒湿空调监控系统[J].仪表技术与传感器,2008(2):74-75.
[7]封亚斌.采用串口通信技术实现Modbus数据通信[J].自动化仪表,2004,25(10):56 -58.
[8]汪义旺,崔鸣,祁春清.RS-485/Modbus在FFU控制系统中的应用[J].自动化仪表,2010,31(6):39 -41,44.
[9]陈永春.从Matlab/Simulink模型到代码实现[M].北京:清华大学出版社,2002.
[10]孟开元.Modbus通信协议中CRC校验的快速C语言算法[J].福建电脑,2004(11):63 -64.