一、前述
应用于工业控制现场的工业机器人大多需要解决与其他控制设备的信号互联问题,除了使用传统的硬接线互联,还有使用到软件通信方案。软件通信方案在许多应用场合具有通信数据量大,组态灵活,成本低等优势,一般各***的工业机器人均提供了各种通信接口,如RS232、现场总线、以太网接口等,以方便用户选用。
如川崎机器人控制器提供了RS232、以太网的通信接口,同时也可通过加装选配件支持多种主流现场总线,以解决与现场控制设备互联问题。在实际的通信应用中,当确定了双方的通信协议后,有的只需要按手册指导,进行相应的配置即可实现,如现场总线方案;但有的通信方案中,还需要应用层协议的支持,如RS232和以太网通信方案。
如川崎F型控制器,前面板提供了一个通用以太网通信端口。
该以太网端口与外围设备(PC等)连接从而创建如下图所示的以太网。
使用该端口,可与川崎公司提供的KCwinTCP/KRterm 终端软件、K-ROSET模拟软件通信外,同时还可与其他支持TCP/IP通信协议的设备进行通信。该以太网端口针对其他通用设备通信提供了基于TCP/IP通信用的套接字(Socket)接口的命令,支持基于四层TCP/IP体系结构中的前三层,包括网络接口层、网际层IP、运输层(TCP或UDP),对于实际通信应用,客户需要根据自己所选用的应用层通信协议,进行二次开发,以为用户的应用进程提供服务。
如在业界得到广泛应用的Modbus应用层协议,支持在串行链路和TCP/IP上的应用。
如在川崎机器人控制器上根据歀ModbusTCP规范进行二次开发,提供Modbus服务器(或客户机)和客户接口,则川崎机器人可与各种支持标准ModbusTCP协议的客户端(或服务器端)的系统或设备联结,组成现场以太网,这些系统或设备包括多种上位机组态软件、触摸屏、PLC、视觉系统、执行器、智能仪表、传感器等。
标准的Modbus组件结构模型如下图所示,图中下方两层TCP/IP栈和TCP管理层属标准TCP/IP协议层,川崎机器人控制器已内置对这两层协议的支持,用户无需另行开发,只需要使用川崎的基于TCP/IP通信用的套接字接口命令,进行下图所示通讯应用层的开发,在控制器内搭建Modbus服务器(或客户机)并提供Modbus客户接口,机器人的输入输出信号、内部信号、机器人状态信号等专用信号,以及应用程序(.pg、.as)内的数据均可通过客户Modbus接口透明化,开放给外部通信,由外部系统或设备进行读或写操作。
二、实现方案介绍
下面以机器人作为服务器(客户机的原理与实现方法也类似)为例,简述如何在机器人控制器上实现标准ModbusTCP协议。
机器人控制器与外部设备信息交换过程如下图所示:
1) 首先机器人控制器通过TCP_LISTEN命令指定端口号并创建套接字,该套接字用于等待客户端连接请求。
2) 控制器循环使用TCP_ACCEPT命令检查是否接收到客户端的连接请求,如接收到连接请求,则建立与客户端的连接并创建连接套接字。
3) 控制器成功创建与客户端的连接套接字后,循环使用TCP_RECV命令接收客户端发送来的数据,并按Modbus协议规范对数据进行解析,根据解析结果,生成Modbus应答,并通过TCP_SEND命令发送应答数据至客户端。
4) 在等待数据接收过程中,监视与客户端的连接状态,如客户端主动断开连接,则控制器释放该连接套接字,并返回第2步。
该ModbusTCP服务器端程序使用川崎公司的AS语言开发,在川崎机器人控制系统中被称为PC(Process Control)程序或过程控制程序,可与机器人控制程序同时执行。程序处理流程如下图所示。
(图删)
对于这种较为复杂的AS程序,推荐在PC机中使用川崎公司提供的编辑软件Notepad++ for AS进行编辑,该软件是在免费编辑软件Notepad中加入了AS语言的相关插件,使得软件支持AS语言的关键字、指令、命令和函数等,使用起来很方便。程序编辑保存后,下载到川崎机器人控制器中,将程序设置为控制电源开启时自动在后台启动运行,即可实现与外围设备的ModbusTCP通信连接。
ModbusTCP服务器程序的开发要注意三个关键点,一是对TCP通信命令的理解和使用,二是对标准ModbusTCP协议的理解和数据包的解析处理,三是要了解川崎机器人控制系统本身的特点,合理规划数据接口。
1、TCP通信命令
川崎机器人提供以下TCP通信命令:
- TCP_LISTEN 创建套接字并等待连接请求
- TCP_ACCEPT 检查是否接收到连接请求
- TCP_ConNECT 创建套接字并发送连接请求
- TCP_SEND 发送数据字符串
- TCP_RECV 接收数据字符串
- TCP_CLOSE 中断套接字通信
- TCP_END_LISTEN 结束等待连接请求
如其字面意义,上述命令实现的功能与一般通用的TCP通信协议指令基本相同,具有TCP通信协议编程基础的***很容易就能掌握,此外需要注意的是,在调用通信命令前,需判断是否会出现异常,如端口被占用、套接字非法等,异常调用会导致系统报错,并使机器人控制系统异常停止运行,从而影响机器人正常使用。
该ModbusTCP服务器可以同时连接多个客户端,满足与多个外围设备的通信需求,程序中可以预定义客户端***大连接数量。每个外围设备的通信占用一个连接套接字,当外围设备断开与服务器的连接后,服务器端应能检测到通信服务中止,并关闭连接套接字,为后续设备的再次连接预留连接资源。
2、标准ModbusTCP协议数据包的解析与处理
ModbusTCP服务器与客户端建立连接后,循环等待接收客户端发送的Modbus请求应用数据单元(ADU),请求(或响应)应用数据单元包括两部分,前面七个字节长的报文头称为MBAP报文头(Modbus协议报文头),MBAP之后的部分为协议数据单元PDU,PDU又由功能码和数据域组成。如下图所示:
基于TCP/IP协议的ModbusTCP与串行链路上的Modbus在传输的数据帧格式上有区别:
1) 由于网际层IP和传输层TCP已经负责对双方通信数据报进行了地址和端口解析处理,并将源主机发送的数据单元可靠交付到目的主机,ModbusTCP应用数据单元中已经不再包含地址域,不需要在应用层对外围设备的地址进行解析,而该地址域在串行链路上必要的。
2) ModbusTCP应用数据单元中增加了七字节的MBAP报文头,该报文头包括2字节的事务处理标识符、2字节的协议标识符、2个字节的长度域,以及1个字节的单元标识符。需要在应用层中对MBAP报文件头进行解析处理。
3) 由于采用面向连接的TCP协议,已经提供了可靠的传输服务,在ModbusTCP的应用数据单元中不再包含差错校验域,不需要进行串行链路中的数据帧的CRC计算和校验。
对ModbusTCP应用数据单元的解析处理分两步,首先是解析MBAP报文头,解析正确后提取后续的协议数据单元PDU,再对PDU进行解析,根据PDU的解析结果访问用户应用数据,并生成Modbus响应,发送应答给外围设备。相应的处理流程如下图所示:
(图删)
3、对外数据接口的规划
川崎机器人的PC程序和机器人控制程序可以公用的信号和变量包括:通用I/O信号、系统开关和全局变量。
通用I/O信号分为直接与外部通信的外部I/O信号和仅可在内部使用的I/O信号,其中外部输入信号相当于PLC的开关量输入信号,外部输出信号相当于PLC的开关量输出信号,内部I/O信号相当于PLC的内部寄存器。通用I/O信号有数量限制,外部输入信号、外部输出信号和内部I/O信号数量均***多不能超过960点。
系统开关是用于指示机器人各种系统设置或状态的信号,如开关名称POWER指示马达电源ON/OFF状态,TEACH_LOCK显示示教锁定的ON/OFF状态。系统开关的名称及其黙认值根据不同的机器人规格而不同。
全局变量是用于PC程序或机器人控制程序中的位姿信息、数字信息、字符信息的变量,各自对应于位姿变量、实型变量、字符串变量。全局变量一旦被定义,其值保存在存储器中,可在任何程序中使用。其中实数、整数、逻辑值和ASCII值都用实数值表达。
川崎机器人控制器的ModbusTCP服务器在提供对外数据交换服务时,需根据控制器自身的特性,提前规划制定对外数据接口范围,应遵循以下原则:
1、应尽量遵循行业通则,如Modbus的公共功能码0x02,代表读离散量输入信号功能,对于离散量输入信号,并且要求是只读功能的信号,其地址范围应限定于机器人控制器内的通用信号中的外部输入信号,其地址编号起始为1001。而不应将地址编号如1~32的外部输出信号或地址编号2001~2256内部信号划入功能码0x02的范围内,因为外部输出信号和内部信号原则上不仅可读,还可写,相当于线圈的定义,应划入功能码0x01(读线圈)和0x05(写单个线圈)范围内。
2、对外开放的通用信号数量不能超出机器人设置的***大信号数量,并且机器人专用信号设置中已被指定用于专用信号的通用信号不可写。读写超过***大信号数量,或写专用信号通道,会导致机器人报错并停止,应根据机器人设置对ModbusTCP服务器相关参数进行配置,以避免对机器人运行造成干扰。