APP下载

Modbus及Canopen总线在步行式艉部作业平台上的应用

2015-05-08方立国张剑锋吴吉伟

造船技术 2015年2期
关键词:报文步行总线

方立国, 顾 婷, 张剑锋, 吴吉伟

(1.上海船舶工艺研究所, 上海 200032; 2.昆山日门建筑装饰有限公司, 上海 200000)

Modbus及Canopen总线在步行式艉部作业平台上的应用

方立国1, 顾 婷2, 张剑锋1, 吴吉伟1

(1.上海船舶工艺研究所, 上海 200032; 2.昆山日门建筑装饰有限公司, 上海 200000)

步行式艉部作业平台可以不借助导轨,自行在船坞或船台上任意行走。通过分析步行式艉部作业平台的行走原理,给出了采用现场总线技术的系统组成方案,进而介绍了Modbus及Canopen现场总线的原理,并详细阐述了这两种现场总线在步行式艉部作业平台中的应用。

ModbusCanopen艉部作业平台

1 引言

图1 步行式艉部作业平台

艉部作业平台是安装船舶桨、舵等艉部部件的工装设备。传统的艉部作业平台采用滚轮加导轨的行走方式,其行走方向由铺在地上的导轨决定,在桨、舵安装过程中,需要多次布置导轨。步行式艉部作业平台(见图1)采用独特的步行行走方式,不用借助导轨,既可以向任意方向直行,也可以360°任意转向。步行式艉部作业平台通过1个主控制单元和4个独立的从控制单元对各种动作进行控制,主、从控制单元间通过Modbus-TCP进行数据和命令的交换,各从控制单元通过Canopen总线对伺服驱动器进行控制,同时又通过Modbus-RTU总线对变频器进行控制。现场总线的使用,使步行式艉部作业平台控制系统的组成既精简直观又稳定可靠,不仅方便维护且便于扩展。

2 步行式艉部作业平台

2.1 步行原理

步行式艉部作业平台的主承载平台由分布在主承载平台4个角上的4个主支撑油缸支撑,每个主支撑油缸下方都安装了一个行走脚,4个行走脚每同步平移一步,主承载平台也就跟着走了一步,通过这样一步接一步地行走,步行式艉部作业平台就实现了长距离行走。每个行走脚又由平移单元、升降单元和旋转单元3部分组成。当平移单元带着主支撑油缸前移一步后,行走脚自身也要跟着前移一步,以复位平移单元的推动油缸,然后再进行下一步的行走动作。主支撑油缸和行走脚之间的平移动作切换,通过升降单元实现,此过程我们称为“换步”。“换步”过程中主支撑油缸与行走脚升降单元同步调整,以实现主承载平台的高度在行走过程中始终保持恒定。当4个行走脚平行且平移方向相同时,主承载平台做平移动作,通过旋转单元改变各行走脚的角度,并相应地调整各行走脚的平移方向,主承载平台随即完成转向动作。

主承载平台通过平移动作和转向动作的组合,能够实现各种位置移动,满足桨、舵等艉部部件安装作业的要求。

2.2 控制系统组成

根据2.1节中步行原理可知,步行行走过程中既涉及大量的油缸同步控制,又涉及很多精确的角度旋转控制。通过任务分解,我们将控制系统分为1个主控制单元和4 个独立的从控制单元,主控制单元负责整台机器的总体控制,各从控制单元分别负责控制一个行走脚以及这个行走脚上的主支撑油缸和其他功能油缸的动作。步行式艉部作业平台的控制系统组成如图2所示。

图2 控制系统组成

主控制单元通过100 Mbps的Modbus-TCP,获取4个从控制单元的各种位置、角度、压力、报警等状态信息,同时又发送各种控制命令给各从控制单元,主控制单元实现Modbus-TCP客户机,并通过本机I/O端口和显示器实现机器与操作人员的人机对话。

从控制单元作为下位机,实现Modbus-TCP服务器,采集各位置传感器、压力传感器的过程数据和各限位、报警等点位输入信息,并直接控制相关油路电磁阀的动作。我们通过变频调速来调节柱塞式油泵的供油速度,以实现对各油缸推、拉速度的闭环控制,通过采用伺服电机驱动行走脚旋转单元,以实现对旋转角度的精确控制。从控制单元通过Modbus-RTU对变频器进行控制,通过Canopen总线对伺服驱动器进行控制。

3 Modbus

Modbus是由Modicon公司于1979年发明的,其现已被广泛应用于工业控制领域,并已成为我国国家标准GB/T19582-2008。Modbus支持RS-232、RS-422、RS-485和以太网设备,许多工业设备,包括PLC,DSC,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。

3.1 Modbus协议

Modbus使用主(客户机)-从(服务器)通讯模式,定义了一个与物理层无关的简单协议数据单元(PDU)。特定总线或网络上的Modbus协议映射能够在应用数据单元(ADU)上引入一些附加域,如图3所示。

图3 Modbus协议数据组成

地址域为从站地址,网络中每个从站必须有一个唯一的寻址地址(站号),从1~247,0号地址是广播地址,主站没有地址。功能码和数据组成了Modbus的协议数据单元(PDU),应用数据单元(ADU)的最后是两个字节的差错校验码。

对于正常通讯,从站响应主站时,复制主站功能码,表示无差错响应,并返回主站请求的数据。如果检测到异常,从站将主站功能码加128形成与功能码相对应的差错码,表示这是一个异常响应,异常响应时,响应数是对应检测到的异常情况的异常码,其通讯模型如图4所示。

图4 Modbus通讯模型

Modbus主站通过不同的功能码,可以按位也可以按字访问从站的各种寄存器,Modbus设备常用功能码如表1所示。

通过主站对从站问询、从站对主站应答的过程,主从站之间完成数据的传输。Modbus协议定义了两种串行链路的传输模式:RTU模式和ASCII模式。而RTU模式的速度更快捷,使用也更广泛,我们着重介绍RTU模式。

3.2 Modbus-RTU

在RTU(Remote Terminal Unit)模式中,Modbus 报文中每个8位字节含有两个4位十六进制字符。每个字节(11位)的格式为:

1起始位;

8数据位, 首先发送最低有效位;

1奇偶校验位;

1停止位;

也可以不用奇偶校验,无校验时要求2个停止位。RTU模式的报文帧格式如图5所示。

表1 Modbus常用功能码

图5 Modbus-RTU报文帧

在RTU模式,报文帧由时长至少为3.5个字符时间的总线空闲间隔区分,整个报文帧必须以连续的字符流发送,当有连续3.5个以上字符的总线空闲出现时,网络认为一个RTU报文帧传送完成。RTU报文帧使用循环冗余校验(Cyclical Redundancy Checking,简称CRC)的算法进行错误检验,CRC 域检验整个报文的内容,不管报文有无奇偶校验,均执行此检验。对循环冗余校验(CRC)的详细算法,本文不做赘述。

3.3 Modbus-TCP

Modbus-TCP是Modbus协议在以太网上的实现。IANA(Internet Assigned Numbers Authority,互联网编号分配管理机构)给Modbus协议赋予的TCP编口号为502,这是目前工业自动化领域中唯一分配到的端口号。Modbus-TCP将Modbus协议数据单元(PDU)打包在TCP数据包中,其数据帧如图6所示。

图6 Modbus-TCP报文数据

Modbus-TCP的协议数据单元(PDU)与Modbus-RTU的协议数据单元(PDU)格式、内容完全相同,但是在Modbus-TCP的应用数据单元(ADU)中,多了MBAP报文头,少了差错校验域,Modbus-RTU与Modbus-TCP的帧结构对比如图7所示。

图7 Modbus-TCP报文格式

传输协议(TCP)面向连接,基于TCP的Modbus报文已无需在应用数据单元(ADU)中再次进行循环冗余校验(CRC)。而MBAP报文头则有如下格式:

事务处理标识符:标志某个Modbus询问/应答的传输,由客户机生成,服务器应答时,复制该值。

协议标识符:0=Modbus协议,1=UNI-TE协议,由客户机生成,服务器应答时,复制该值。

长度:后续字节的计数,主站侧由客户机生成,服务器应答时,重新计算该值。

单元标识符:串行链路或其他总线上连接的远程从站的识别码,由客户机生成,服务器应答时,复制该值。

4 Canopen

Canopen是基于CAN总线的一个应用层协议,广泛应用于工业控制领域。

4.1 CAN总线

CAN (Controller Area Network)是二十世纪80年代初德国Bosch公司为解决现代汽车中众多电控单元(ECU)之间的数据交换而开发的一种串行通信协议,目前最新的CAN总线规范是CAN2.0B。CAN总线是多主站总线系统,总线报文具有基于帧标识符的优先级,通过改进带有检测冲突的载波侦听多路存取(CSMA/CD)机制,总线冲突通过非破坏性位序列仲裁的方法进行解决。

CAN总线使用“显性”和“隐性”两个互补的逻辑值来表示“0”和“1”,当总线上同时发送“显性”和“隐性”时,总线的逻辑值为“显性”,如图8所示。CAN总线收发器通过CAN_H和CAN_L两个差分双绞线传输物理电平。

图8 CAN总线电平

CAN总线空闲时,CAN_H和CAN_L两线上的电平都维持在大约2.5 V,总线显示隐性,当有CAN_H线高出CAN_L线2 V以上的差分电压时,总线状态显示显性。标准的CAN总线报文帧结构如图9所示。

SOF:帧起始位,标志一个CAN报文的开始。

Identifier:帧标识符,报文优先级由帧标识符决定,数字越小,优先级越高。

RTR:远程传输请求位,1代表远程帧,0代表数据帧。

IDE:标识符扩展位,0代表标准CAN报文,1代表扩展CAN报文。如果IDE=1,Identifier由29位组成,其低18位紧跟在IDE位后面。

r:保留位。

DLC:指示数据长度。

Data Field:CAN报文的数据。

Checksum:循环冗余校验码(CRC)。

DEL:校验域分隔符,是1个隐性位。

ACK:应答间隙,发送节点发送1,接收节点发送0。

DEL:应答域分隔符,是1个隐性位。

EOF:帧结束域,是连续7个隐性位。

ITM:帧间空间。

CAN总线通过非破坏性位序列仲裁的方法解决总线冲突,当多个节点同时向总线发报文时,优先级最高的报文会最终被发送,总线一有空闲,未发送的报文立即启动。这种冲突解决机制,既提高了总线的利用效率,又增加了总线吞吐能力。

4.2 Canopen协议

CAN总线仅仅定义了ISO11898标准的物理层和数据链路层,没有规定应用层,本身并不完整,需要一个高层协议来定义CAN报文中的11/29位标识符及8字节数据的使用。Canopen作为CAN总线的一种应用层协议,是CAN-in-Automation(CiA)组织定义的标准之一,在工业控制系统中有着广泛的应用。Canopen协议将CAN报文的11位标识符(扩展帧为29位标识符的高11位)分成两部分,如图10所示。

图10 COB-ID

Node-ID取值1~127,表示Canopen网络中的节点地址,也就表示Canopen网络的最大容量是127台设备,地址0是广播地址,节点不能使用。Function Code(功能码)在Canopen协议中,决定着报文的优先级。

Canopen的核心概念是设备对象字典(OD:Object Dictionary),对象字典是一个有序的对象组,每个对象采用一个16位的索引和一个8位的子索引来寻址。Canopen网络中每个节点都有一个对象字典,对象字典中包含了描述这个设备和它的网络行为的所有参数。一个节点的对象字典由这个节点的电子数据文档(EDS:Electronic Data Sheet)描述。

Canopen通讯模型定义了4种报文(通讯对象):

(1) 管理报文。

主要负责初始化,配置和网络管理,这些服务都是基于主从通讯模式:在CAN网络中,只能有一个管理报文的主节点以及一个或多个从节点。

(2) 服务数据对象SDO(Service Data Object)。

通过使用索引和子索引,SDO主节点能够访问从节点对象字典中的对象,SDO主节点发起请求,从节点进行应答。

(3) 过程数据对象PDO(Process Data Object)。

数据从一个生产者传到一个或多个消费者,数据长度限制在1~8个字节。PDO数据既可以同步传输,又可以异步传输,不需要任何节点应答,有很好的实时性,多用来传送实时数据。

(4) 预定义报文或者特殊功能对象。

Canopen协议预定义:同步(SYNC)、时间标记(Time Stamp)、紧急事件(Emergency)、节点/寿命保护(Node/Life guarding)和Boot-UP对象。

通过Canopen协议,不同厂商的各类设备都可以经由CAN总线互连在一起,Canopen主节点通过从节点的电子数据文档,可以便捷地对从节点进行配置和访问。

5 Modbus和Canopen在步行式艉部作业平台上应用

步行式艉部作业平台的主控制单元(上位机)采用研华PCM-3363嵌入式工业控制计算机,以c/c++语言进行编程,既可以完成复杂地计算,又可以进行灵活地控制,还可以方便地对下位机进行组态和编程。下位机采用施耐德TM258型PLC做为控制器,PLC在工业现场环境下有较好的稳定性和可靠性,TM258集成了Modbus-TCP/RTU接口、Canopen接口、各种传感器接口和可灵活扩展的I/O,既方便使用又节约成本。

5.1 上位机的通讯实现

TCP/IP使用带有检测冲突的载波侦听多路存取(CSMA/CD)机制规避冲突,网络工作是半双工模式,报文的延迟也不可预测。为提高网络通讯的实时性,我们在主控制单元配置一个交换机(switch hub),以全双工的方式进行网络询问。

上位机上电后初始化完毕,专门创建一个通讯任务。通讯任务对下位机建立TCP连接后,循环获取控制任务产生的通讯命令,对下位机进行访问。本项目中所有Modbus-TCP访问都是基于16位比特的,通讯数据类型定义如下:

typedef struct{

struck_MBAP mbap; //报文头

uint8_t function_code; //功能码

uint16_t start_read_address; //读寄存器起始地址

uint16_t start_write_address; //写寄存器起始地址

uint16_t read_register_count; //读寄存器数量

uint16_t write_register_count; //写寄存器数量

uint16_t send_data[MAX_SEND_REGISTERS]; //数据发送缓冲区

uint16_t receive_data[MAX_RECEIVE_REGISTERS]; //数据接收缓冲区

}MB_tcp_command;

为简化程序设计,我们采用boost.asio库进行网络访问,同时加入响应超时处理,在超时回调函数和套接字异步数据接收的回调函数中,进行必要的错误处理。通讯任务的协议实现代码如下:

communication_init(); //通讯相初始化

……

io_service io_serv; //构建asio对象

ip::tcp::socket sock(io_serv); //构建套接字对象

deadline_timer timer(io_serv); //构建超时定时器对象

ip::tcp::endpoint endp(slave_ID,502); //远程地址,监听502端口

sock.connect(endp); //建立TCP连接

……

while(true){ //进入任务循环

……

io_serv.reset(); //对象复位

get_command_data(m_command); //获取控制任务的通讯命令

get_t_data(m_command,t_data); //将通讯命令转为Modbus-TCP帧

sock.write_some(buffer(t_data,t_size)); //发送请求

timer.expires_from_now(boost::posix_time::microsec(timeout)); //启用超时定时器

timer.async_wait(boost::bind (&hander_timeout, _1)); //异步等待

sock.async_read_some(buffer(r_data,r_size),boost::bind(handle_read, _1, _2)); //异步接收响应数据

iosev.run(); //启动异步操作

get_r_data(r_data); //校验接收到数据的有效性

set_command_data(r_data,m_command,); //将收到的响应数据发还给控制任务

……

}

5.2 下位机组态

下位机首先要在PLC的编程软件SoMachine中,对系统配置进行组态。SoMachine中集成了对LM23A型伺服系统进行控制的功能块,为简化PLC的程序设计,我们直接采用了LM23A型伺服系统。PLC配置如图11所示。

作为Modbus-TCP服务器,TM258型PLC不需要做任何配置,也不用编写全任何通讯程序,只要以太网IP地址设置好,直接使用参与通迅的寄存器就可以了。通过Modbus-RTU对变频器控制时,PLC和变频器的串口参数要确保一致,PLC配置好Modbus-RTU主站后,在调用PLC通讯功能块时,需要将读写寄存器的地址对应到变频器中相关速度、加速度等控制参数和扭矩、电流等状态参数的地址上。通过Canopen对伺服驱动控制时,直接调用PLC提供的伺服控制功能块就可以了。

图11 SoMochine配置

5.3 PLC通讯程序编写

Modbus-RTU的通讯,是通过调用PLC的相关功能块来完成,主要使用的功能块有:ADDM(将字符串转换为地址)、READ_VAR(读数据)、WRITE_VAR(写数据)和WRITE_READ_VAR(读写数据)这4个。以结构化文本(ST语言)调用WRITE_READ_VAR功能块的程序如下:变量定义:

PROGRAM Modbus_fun23

VAR

transducer_add: ADDRESS; // 变频器地址变量

get_add:ADDM; // 将字符串转化成功能块可用的地址变量

fun_23: WRITE_READ_VAR; //将读写功能块作为功能码23进行调用

temp:BOOL; //临时变量

END_VAR

程序代码:

get_add(

Execute:= NOT start, //启动功能块,变量start在第1次扫描后置1

Addr:= '1.1', //变频器地址,在串口1上,站地址为1

AddrTable:= transducer_add, //生成地址变量

Done=> temp, //地址转换完成

);

fun_23(

Execute:= temp, //启动通讯

Addr:= transducer_add, //通讯目的地址

Timeout:= 5, //设置超时为0.5 s

ObjType:= Objecttype.MW, //操作保持寄存器

FirstWriteObj:= start_add_of_write_parameter , //写命令参数的起始地址

WriteQuantity:= count_of_write_parameter, //写命令参数的数量

WriteBuffer:= ADD(send_data), //写命令参数的具体数据

FirstReadObj:= start_add_of_write_parameter, //读状态参数的起始地址

ReadQuantity:= count_of_write_parameter, //读状态参数的数量

ReadBuffer:= ADD(receive_data), //将变频器状态参数保存

Busy=> start, //用于循环启动通讯传输

);

通过Canopen对伺服的控制更简单,我们不用专门编写对伺服对象字典的控制程序,PLC为我们提供了丰富的已经打包好的集通讯与控制于一体的功能块。我们对伺服进行绝对位置定位的结构化文本(ST语言)程序如下:

变量定义:

PROGRAM servo_ctrl

VAR

abs_move: MC_MoveAbsolute_LXM23; //绝对位置定位功能块

ok:BOOL; //定位完成

END_VAR

程序代码:

abs_move(

Execute:=go, //执行移动,上升沿启动

Position:=aim_position, //设定目标位置,以编码器脉冲表示

Velocity:= move_velocity, //设置电机转动速度

Axis:= servo , //指定要移动的电机

Done=> ok, //移动完成标志

);

6 结束语

Modbus在工业上的应用历史悠久,使用简单,性能可靠,价格低廉,如今已广泛应用于工业控制的角角落落,而Canopen一经推出,便得到了广泛应用,尤其在欧洲,使用已经非常普便,因其时实性突出,如今已成为许多伺服驱动器的标准配置。通过现场总线的使用,我们可以方便地简化控制系统的组成,减少大量的现场配线,既增强系统的稳定性,又节约成本。此外,现场总线具有良好的扩展特性,每一个总线线路上,都可以方便地增加新的设备,也可以方便地更换故障设备,既便于系统扩展,也便于系统维护。通过上位机中安装SSH服务器,我们还可以安全地通过网络对控制系统进行在线监控、调试和升级。实践证明,Modbus和Canopen总线,适合在步行式艉部作业平台上应用,也为步行式艉部作业平台的进一步改进和升级创造了很好的接口条件。

[1] GB/T19582-2008.基于Modbus协议的工业自动化网络规范[S].2008.

[2] CAN in Automation. CANopen Application Layer and CommunicationProfile. CiA Draft Standard 301 Version 4.02[S].2002.

[3] Boterenbrood H. CANopen high-level protocol for CAN-bus[S].NIKHEF Amsterdam,2000:3-8.

[4] 刘沛津,谷立臣,韩行等.基于Modbus/TCP的火电厂实时数据集成及网络通信控制器研制[J].电力自动化设备,2009,29(8):128-131.

[5] 赵飞.基于STM32的CANopen运动控制主从站开发[D].武汉:华中科技大学,2011.

[6] 饶运涛,邹继军,郑勇芸.现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社,2003.

[7] 罗剑峰.Boost程序库完全开发指南:深入C++“准”标准库[M].北京:电子工业出版社,2010.

[8] Schneider electric.SoMachineModbus and ASCII Read/Write FunctionsPLCCommunication Library Guide[S].2014.

ApplicationofModbusandCanopenBusonWalkingSternWorkPlatform

FANGLi-guo1,GUTing2,ZHANGJian-feng1,WUJi-wei1

(1.ShanghaiShipbuildingTechnologyResearchInstitute,Shanghai200032,China; 2.KunshanNihonFlushCo.,Ltd.,Shanghai200000,China)

The walking stern work platform can move on dock or slipway without lead rail. According to the movement principle of the platform, the system composition scheme of field bus technology is provided, the principle of Modbus and Canopen bus are introduced, and the applications of the two field buses on walking stern work platform are deeply elaborated.

Modbus Canopen Stern work platform

方立国(1981-),男,高级工程师。

U

A

猜你喜欢

报文步行总线
基于J1939 协议多包报文的时序研究及应用
魔方小区
步行回家
低轨星座短报文通信中的扩频信号二维快捕优化与实现
CTCS-2级报文数据管理需求分析和实现
浅析反驳类报文要点
一种基于CAN总线的误码测试方法
CAN总线并发通信时下位机应用软件设计
基于CAN总线的水下通信系统设计
宝马F02车总线系统