zoukankan      html  css  js  c++  java
  • 三菱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:xiketang123

    SLMP通信流程

    在正式开始SLMP通信之前,需要做一些准备工作,具体通信流程如下:(1) 电缆与外部设备的连接:进行用于SLMP通信的连接。(2) 参数设置:通过工程工具设置模块参数。(3) 写入至CPU模块:将已设置的参数写入至CPU模块。通过电源OFF→ON或复位,将参数设为有效。(4) 初始处理状态的确认:模块参数设置后,确认CPU模块的初始处理正常结束。(5) SLMP通信:服务器将从外部设备接收SLMP报文,客户端将向外部设备发送SLMP报文。

    SLMP报文格式

    通信协议报文一般分为请求报文和响应报文,请求报文是指上位机主动发动给SLMP设备的报文,响应报文是指SLMP设备响应请求而返回的报文。无论是请求报文还是响应报文,一般都是由“帧头”和“应用数据”构成。SLMP请求报文格式如下所示:

     SLMP响应报文格式如下所示:

     对于帧头,一般是指TCP与UDP帧头,对于上位机侧,需要在对象设备侧附加CPU模块侧(指令报文)的帧头后进行发送,一般会自动附加,上位机开发不需要考虑。对于CPU模块侧,会自动附加对象设备侧(响应报文)的帧头,因此无需用户设定。对于应用数据,主要是由副帧头和文本两部分组成,副帧头用于显示该报文为指令报文还是响应报文,文本则是各种不同功能的请求数据或响应数据。SLMP报文按照编码格式区分,可以分为ASCII编码和二进制,这两种方式报文发送的内容有所不同,具体如图1和图2所示:

     图1 ASCII编码格式通信

    图2 二进制编码格式通信

    二进制编码格式相对于ASCII编码格式来说,报文更短更紧凑,因此通信速度也更快,因此,一般我们选择二进制编码格式通信居多,后面的内容均以二进制编码为例进行阐述。

    SLMP报文组成

    SLMP报文格式根据报文类型为请求报文和响应报文,数据格式也会有所不同,当该帧报文为请求报文时,具体格式如下图所示:

     当该帧报文为响应报文时,具体格式如下图所示:获取更多资料请+vx:xiketang123

    下面针对各个部分进行说明:

    • 副帧头:副帧头部分占用4个字节,主要用来显示该帧报文是指令报文还是响应报文,如果该帧报文是指令报文,那么副帧头内容为50H 00H,反之,如果该帧报文为响应报文,那么副帧头内容为D0H 00H,具体如图所示:

     

    • 网络编号及目标站号:网络编号及目标站号各占一个字节,它们的值与网络架构是息息相关的,下图展示了三种不同的网络架构:

     

    一般情况第一种网络架构使用居多,后面都以这种架构为例进行阐述,网络编号为00H,目标站号为FFH。获取更多资料请+vx:xiketang123

    • 请求目标模块I/0编号占两个字节,默认为FFH 03H。

    • 请求目标多点站号占一个字节,默认为00H。

    • 请求数据长是指从保留到请求数据,总共的字节长度之和,响应数据长是指结束代码和响应数据的长度和。

    • 保留占两个字节,默认值为00H 00H。

    • 结束代码占两个字节,正常结束时值为00H 00H,异常结束时值为00H 04H。

    • 请求数据是指作为执行的指令及子指令的参数数据,根据指令及子指令的情况,有时无需指定“请求数据”,后续会做详细讲解。

    • 响应数据是指作为请求数据的执行结果,根据指令来定,有时不会返回响应报文,后续会做详细讲解。

    • 指令与子指令是报文的命令码,根据读取和写入不同的存储区会呈现不同的值。对于批量读取,指令为0401H,子指令根据位或字分别为0001H和0000H,对于批量写入,指令为1401H,子指令根据位或字分别为0001H和0000H。

    • 对于批量读取,请求数据由起始软元件编号、软元件代号及软元件点数三部分组成,其中起始软元件编号占3个字节,软元件代号占1个字节,软元件点数占2个字节。

    • 对于批量写入,请求数据由起始软元件编号、软元件代号及写入数据三部分组成,其中起始软元件编号占3个字节,软元件代号占1个字节,写入数据占N个字节。

    • 对于批量读取,响应数据将实际读取的数据按照指定的格式进行返回。

    • 对于批量写入,响应数据部分为空。

  • 相关阅读:
    Python编程题24--回文数
    Python编程题23--移动零
    Python编程题22--只出现一次的数字
    Python编程题21--每日温度
    Python编程题20--最大子序和
    Python编程题19--比特位计数
    推荐系统中对比实验工具--伯乐bole
    pytorch中反向传播的loss.backward(retain_graph=True)报错
    win10彻底禁止自动更新(家庭版操作)
    linux使用清华源安装工具,切换清华源
  • 原文地址:https://www.cnblogs.com/xiketang/p/15181434.html
Copyright © 2011-2022 走看看