三菱PLC之SLMP协议报文说明
SLMP是三菱PLC用于CPU模块或外部设备(个人计算机或显示器等)使用以太网对PLC设备进行数据访问的一种协议,SLMP协议是基于TCP/IP,因此会存在服务器和客户端的功能区分。
服务器功能是指CPU模块基于来自外部设备的要求报文(命令),执行数据处理的收发。而客户端功能是指可以使用专用命令向外部设备发送要求报文(命令),并从外部设备接收响应报文。服务器和客户端之间的通信过程如图所示。
三菱的SLMP协议有两种不同的报文帧,分别为3E帧和1E帧,1E帧只支持FX5U/FX5UC CPU模块。这里说明一下,SLMP的报文格式与三菱的MC协议的帧是相同的。SLMP的3E帧兼容MC协议的Qna系列3E帧,SLMP的1E帧兼容MC协议的A系列1E帧,因此也可以通过MC协议将使用的外部设备连接到SLMP对应设备上。(获取学习资料请加VX:xiketang777)
SLMP通信流程
在正式开始SLMP通信之前,需要做一些准备工作,具体通信流程如下:(1) 电缆与外部设备的连接:进行用于SLMP通信的连接。(2) 参数设置:通过工程工具设置模块参数。(3) 写入至CPU模块:将已设置的参数写入至CPU模块。通过电源OFF→ON或复位,将参数设为有效。(4) 初始处理状态的确认:模块参数设置后,确认CPU模块的初始处理正常结束。(5) SLMP通信:服务器将从外部设备接收SLMP报文,客户端将向外部设备发送SLMP报文。(获取学习资料请加VX:xiketang777)
SLMP报文格式
通信协议报文一般分为请求报文和响应报文,请求报文是指上位机主动发动给SLMP设备的报文,响应报文是指SLMP设备响应请求而返回的报文。无论是请求报文还是响应报文,一般都是由“帧头”和“应用数据”构成。SLMP请求报文格式如下所示:
SLMP响应报文格式如下所示:
对于帧头,一般是指TCP与UDP帧头,对于上位机侧,需要在对象设备侧附加CPU模块侧(指令报文)的帧头后进行发送,一般会自动附加,上位机开发不需要考虑。对于CPU模块侧,会自动附加对象设备侧(响应报文)的帧头,因此无需用户设定。对于应用数据,主要是由副帧头和文本两部分组成,副帧头用于显示该报文为指令报文还是响应报文,文本则是各种不同功能的请求数据或响应数据。SLMP报文按照编码格式区分,可以分为ASCII编码和二进制,这两种方式报文发送的内容有所不同,具体如图1和图2所示:
图1 ASCII编码格式通信(获取学习资料请加VX:xiketang777)
图2 二进制编码格式通信
二进制编码格式相对于ASCII编码格式来说,报文更短更紧凑,因此通信速度也更快,因此,一般我们选择二进制编码格式通信居多,后面的内容均以二进制编码为例进行阐述。
SLMP报文组成
SLMP报文格式根据报文类型为请求报文和响应报文,数据格式也会有所不同,当该帧报文为请求报文时,具体格式如下图所示:
当该帧报文为响应报文时,具体格式如下图所示:(获取学习资料请加VX:xiketang777)
下面针对各个部分进行说明:
- 副帧头:副帧头部分占用4个字节,主要用来显示该帧报文是指令报文还是响应报文,如果该帧报文是指令报文,那么副帧头内容为50H 00H,反之,如果该帧报文为响应报文,那么副帧头内容为D0H 00H,具体如图所示:
-
网络编号及目标站号:网络编号及目标站号各占一个字节,它们的值与网络架构是息息相关的,下图展示了三种不同的网络架构:(获取学习资料请加VX:xiketang777)
一般情况第一种网络架构使用居多,后面都以这种架构为例进行阐述,网络编号为00H,目标站号为FFH。请求目标模块I/0编号占两个字节,默认为FFH 03H。
- 请求目标模块I/0编号占两个字节,默认为FFH 03H。
- 请求目标多点站号占一个字节,默认为00H。
- 请求数据长是指从保留到请求数据,总共的字节长度之和,响应数据长是指结束代码和响应数据的长度和。
- 保留占两个字节,默认值为00H 00H。
- 结束代码占两个字节,正常结束时值为00H 00H,异常结束时值为00H 04H。
- 请求数据是指作为执行的指令及子指令的参数数据,根据指令及子指令的情况,有时无需指定“请求数据”,后续会做详细讲解。
- 响应数据是指作为请求数据的执行结果,根据指令来定,有时不会返回响应报文,后续会做详细讲解。
- 指令与子指令是报文的命令码,根据读取和写入不同的存储区会呈现不同的值。对于批量读取,指令为0401H,子指令根据位或字分别为0001H和0000H,对于批量写入,指令为1401H,子指令根据位或字分别为0001H和0000H。
- 对于批量读取,请求数据由起始软元件编号、软元件代号及软元件点数三部分组成,其中起始软元件编号占3个字节,软元件代号占1个字节,软元件点数占2个字节。
- 对于批量写入,请求数据由起始软元件编号、软元件代号及写入数据三部分组成,其中起始软元件编号占3个字节,软元件代号占1个字节,写入数据占N个字节。
- 对于批量读取,响应数据将实际读取的数据按照指定的格式进行返回。
- 对于批量写入,响应数据部分为空。
- ==================END================