0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

西门子博途: MODBUSPN说明

机器人及PLC自动化应用 来源:机器人及PLC自动化应用 2023-09-02 09:24 次阅读

MODBUSPN 说明

说明

该 MODBUSPN 指令允许在带有集成 PN 接口CPU 和支持 Modbus/TCP 协议的伙伴之间进行通信。支持功能代码 1、2、3、4、5、6、15 和 16。根据参数分配,该指令可用作客户端(S7 为客户端),也可用作服务器(S7 为服务器)。使用 MODBUSPN 指令在通信伙伴之间建立连接以传送数据并控制连接终止。

数据传输期间执行以下操作:

发送时,生成 MODBUS 特定的消息帧报头

接收时,检查 MODBUS 特定的消息帧报头

检查由客户端寻址的数据区是否存在

发生错误时,生成异常消息帧(仅限 S7 为服务器时)

与组态的数据块进行数据传输

还将对建立连接、终止连接以及数据接收所使用的时间进行监视。

“MODBUSPN”指令 V2.0 可用于 S7-300 及 S7-400。通过本地 CPU 接口进行连接。使用该指令时,无需其它任何硬件模块。

指令的工作原理

初始化

在“Init”输入中有上升沿时初始化指令 MODBUSPN。

必须根据设备组态分配初始化参数。

初始化参数将应用于背景 DB。

启动过程中不会评估运行时参数。

将检查参数数据块中数据的有效性。

如果在 Init 参数中检测到上升沿,则执行上述操作。如果检查完成后没有错误,则重置 Init,Init_Error 和 Init_Status 显示 0。

如果在检查期间出现错误,则会显示在输出 Init_Error 和 Init_Status 中。只要存在 Init 错误,就不能通过此块进行 Modbus/TCP 通信。必须首先更正 Init 错误。

循环模式

循环模式下,将在 OB1 或循环中断 OB 中调用 MODBUSPN。

将根据运行时参数激活块功能。

处理作业期间不会评估运行时参数的更改。

只要未执行初始化,就不会评估初始化参数。

处理连接

Modbus客户端主动建立连接。从参数数据块中的连接参数读取所需数据。

连接参数块中的参数 (active_est) 指定 PN CPU 将作为主动通信伙伴还是被动通信伙伴。

对于两种连接类型(主动和被动),在运行时均会通过 TCON 指令打开一个到链接伙伴的通信通道。

通过参数数据块中的 connect_at_startup 参数指定连接建立的时间。

通过 MODBUSPN 指令中的 DISCONNECT 参数终止连接。

“S7 为客户端”的作业初始化或“S7 为服务器”的指令激活

输出参数为动态显示,因此未决状态仅持续 1 个 CPU 周期。也就是说,必须将其复制到其它存储区,才能进一步处理或在监视表中显示。

S7 为客户端:作业初始化

作业通过触发输入 ENQ_ENR 的上升沿变化激活。根据输入参数 UNIT、DATA_TYPE、START_ADDRESS、LENGTH 和 WRITE_READ,会生成 MODBUS 请求帧,并通过 TCP/IP 连接发送到伙伴站。客户端等待服务器响应的组态时间 RECV_TIMEOUT。

如果发生超时(服务器没有响应),则激活的作业将正常结束。可启动新作业。

接收到响应消息后将执行有效性检查。如果检查成功,将执行所需动作,且作业成功执行未出现错误;输出 DONE_NDR 置位。如果在检查期间检测到错误,则作业正常结束,置位位 ERROR,并在 STATUS 中显示错误编号。

S7 为服务器:指令激活

指令已准备好在触发输入 ENQ_ENR 的上升沿接收来自客户端的请求消息。在这种情况下,服务器处于被动状态,并等待来自客户端的消息帧。将检查接收到的消息帧。如果检查成功,则对请求消息做出应答。DONE_NDR 位置位时,即通知用户消息通信已完成。此时,已执行的函数会显示在输出 UNIT、DATA_TYPE、START_ADDRESS、LENGTH 和 WRITE_READ 中。

错误的请求消息或导致错误消息。置位位 ERROR,在 STATUS 中显示错误编号,并且不处理客户端的请求。将根据错误情况向客户端发送异常消息帧。

参数

下表列出了指令“MODBUSPN”的参数:

参数 声明 数据类型 说明 取值范围 Init
id Input WORD 连接 ID 必须与参数 DB 中相关的 id 参数相同。 1 到 4095
W#16#1 到 W#16#FFF
db_param Input BLOCK_DB 参数 DB 的编号,包含此 Modbus 块实例的所有连接和 Modbus 数据 取决于 CPU
REG_KEY_DB Input BLOCK_DB 具有可用于授权的注册表项的数据块 取决于 CPU
RECV_TIMEOUT Input TIME 链接伙伴接收数据的监视时间
可以设置的最短时间为 20 ms。
T#20ms 到 T#+24d20h31m23s647ms
CONN_TIMEOUT Input TIME 建立或终止连接的监视时间
可以设置的最短时间为 100 ms。
T#100ms 到 T#+24d20h31m23s647ms
DISCONNECT Input BOOL 通过该参数,可以控制与 Modbus服务器建立和终止连接:
S7 为客户端:
TRUE:接收到响应消息后将立即建立连接。
S7 为服务器:
TRUE:如果 ENQ_ENR = FALSE,连接将终止。
TRUE
FALSE
ENQ_ENR Input BOOL S7 为客户端:
在上升沿启动作业
在服务器作出响应或输出错误消息之前,对输入参数所做的更改不会生效。
如果在 Modbus 请求期间再次设置了参数 ENQ_ENR,此后将不会进行任何其它传输。
S7 为服务器:
准备接收 TRUE 信号
TRUE
FALSE
LICENSED Output BOOL 块的授权状态
块已授权
块未授权

TRUE
FALSE
CONN_ESTABLISHED Output BOOL 与链接伙伴的连接已建立
与链接伙伴的连接已终止
TRUE
FALSE
BUSY Output BOOL 编辑 T 函数(TCON、TDISCON、TSEND 或 TRCV)的状态
T 函数正在进行中
T 函数未在进行中

TRUE
FALSE
DONE_NDR Output BOOL S7 为客户端:
TRUE:激活作业完成,且未出现错误。
S7 为服务器:
TRUE:已执行来自客户端的请求且已发送响应
TRUE
FALSE
ERROR Output BOOL FALSE:无错误
TRUE:出错。出错原因由 STATUS 参数指示。
FALSE
TRUE
STATUS Output WORD 错误编号或状态信息 0 到 FFFF
STATUS_FUNC Output STRING[8] 引起 STATUS 中出现的错误的指令名称 字符
IDENT_CODE Output STRING[18] 授权的标识号
可以使用该代码请求许可证的注册密钥REG_KEY。
字符
Init_Error Output BOOL TRUE:初始化期间出现错误。 TRUE/FALSE
Init_Status Output WORD 初始化状态 0 到 FFFF
UNIT InOut BYTE 单元标识符
(INPUT 用于客户端功能,OUTPUT 用于服务器功能)
0 到 255
B#16#0 到 B#16#FF
DATA_TYPE InOut BYTE 要编辑的数据类型:
(客户端功能的 INPUT、服务器功能的 OUTPUT)
线圈
输入
保持寄存器
输入寄存器
1
2
3
4
START_ADDRESS InOut WORD MODBUS 起始地址
(客户端功能的 INPUT、服务器功能的 OUTPUT)
0 到 65535
W#16#0000 到 W#16#FFFF
LENGTH InOut WORD 待处理值的数目(INPUT 用于客户端功能,OUTPUT 用于服务器功能)
线圈
读取功能
写入功能
输入
读取功能
保持寄存器
读取功能
写入功能
输入寄存器
读取功能

1 到 2000
1 到 1968

1 到 2000

1 到 125
1 到 123

1 到 125
WRITE_READ InOut BOOL 写入访问或
读取访问
(INPUT 用于客户端功能,OUTPUT 用于服务器功能)
TRUE
FALSE
Init InOut BOOL 在上升沿进行初始化 TRUE/FALSE

Modbus 地址的解释

MODBUS 数据模型包括以下区域:

线圈

输入

保持寄存器

输入寄存器

部分系统(例如 MODICON PLC)会通过寄存器地址或位地址区分这些存储器。 例如,偏移量为 0 的保持寄存器被称为寄存器 40001(存储器类型 4xxxx,Reference 0001)。

这往往会引起混淆,因为一些手册中描述或表示的是 Application Layers 的寄存器地址,而其它手册使用的是协议中实际传送的寄存器地址/位地址。

MODBUSPN 在其 start、end 和 START_ADDRESS 参数中使用的是实际传送的 Modbus 地址。 也就是说,可通过各个功能代码传送从 0000H 到 FFFFH 的寄存器地址/位地址。

实例

在参数 DB 中可以按十进制或十六进制格式指定 Modbus 地址。

参数 十进制表示法 十六进制表示法 含义
data_type 3 B#16#3 保持寄存器
db 11 W#16#B DB 11
start 0 W#16#0 起始地址: 0
end 499 W#16#1F3 结束地址: 499
data_type 3 B#16#3 保持寄存器
db 12 W#16#C DB 12
start 720 W#16#2D0 起始地址: 720
end 900 W#16#384 结束地址: 900

下图显示了 SIMATIC 存储区与按寄存器划分和按位划分的 Modbus 设备存储器分配的对比。 分配基于上述参数分配。

在 Modbus 设备中:

以黑色显示的 Modbus 地址表示Data Link Layer;以灰色显示的地址表示Applikation Layer。

在 SIMATIC 中:

第一列中的 SIMATIC 地址是 DB 中的偏移量。 Modbus 寄存器编号显示在括号中。

d734f092-48dd-11ee-97a6-92fbcf53809c.png

Modbus 通信的参数分配

无需在网络编辑器中为使用 CPU 的集成 PN 接口的通信组态连接。将利用 TCON 和 TDISCON 指令建立和终止连接。

参数数据块

建立连接和处理 Modbus 消息所需的数据在 PLC 数据类型 MB_PN_PARAM 中定义。此 PLC 数据类型包含连接专用的数据结构和 Modbus 参数结构。

数据块中每个与通信伙伴的连接都需要一个 PLC 数据类型的实例;可以在其中定义连接参数和 Modbus 参数。可以为各个附加连接扩展数据块,也可以创建新数据块。

该数据块或这些数据块仅用于连接和 Modbus 参数;请勿用其保存任何其它参数。

“MODBUSPN”指令的每个实例都需要一个唯一的连接。为该指令的每个实例创建一个单独的连接描述结构。

d786b08a-48dd-11ee-97a6-92fbcf53809c.png

Param_DB 结构

“Connection settings”结构中的连接参数

在第一个结构“Connection settings”中,定义连接专用的参数,例如,通信伙伴的本地硬件接口和 IP 地址。指令 TCON 和 TDISCON 使用这些参数来建立或终止连接。

必须严格遵守连接参数块的数据结构,否则无法建立连接。

“Modbus settings”结构中的 Modbus 参数

第二个结构“Modbus settings”中存储操作模式和地址引用所需的数据,例如,数据块中映射的 Modbus 区域和作为 Modbus 服务器或 Modbus 客户端的 S7 的操作模式。必须遵守 Modbus 参数的数据结构,否则将无法正确处理。

组态

有两种组态连接和 Modbus 参数的方式可供选择。

选项:
创建新的全局数据库并将其打开。添加参数并为该参数选择数据类型 MB_PN_PARAM。如果下拉列表中未显示该数据类型,可手动输入。
对于该方式,可在一个数据块中插入多个实例。

选项:
通过“添加新块”(Add new block) 创建新的数据块,并将“类型”(Type) 选择为 MB_PN_PARAM。带有已插入连接和 Modbus 结构的新数据块将打开。

该块为只读。无法添加任何其它参数。可以编辑现有参数。

更改值

不可在运行期间更改参数数据块中的值。更改参数后,必须通过 Init = TRUE 重新初始化块。

“Connection settings”连接参数

参数 说明
block_length 该参数定义连接参数的长度,且无法更改。
固定值: W#16#40
id 为每个逻辑连接分配一个新连接 ID。此 ID 在整个 CPU 中必须是唯一的。调用 MODBUSPN 时指定 ID;该 ID 将用于 T 块(TCON、TSEND、TRCV 和TDISCON)的内部调用。
值范围: W#16#1 到 W#16#FFF
connection_type 建立连接的连接类型通过 TCON 指令定义。CPU 决定必须要设置的值。
TCP(兼容模式):
B#16#01 针对 CPU 315 或 317 <= FW V2.3
TCP:
B#16#11 针对 CPU 315 或 317 >= FW V2.4、IM 151-8 PN/DP CPU、CPU314C、CPU319、CPU412、CPU414 和 CPU416
该信息可能因固件不同而有所不同。
active_est 该参数表示连接建立类型,主动或被动。Modbus 客户端负责建立主动连接而 Modbus 服务器负责建立被动连接。
主动连接的建立: TRUE
被动连接的建立:FALSE
local_device_id local_device_id 定义所用 PN CPU 的 IE 接口。根据不同的 PN CPU 类型,需要不同的设置。
IM 151-8 PN/DP CPU:
CPU 314C、315 或 317:
CPU 319:
CPU 412、414 或 CPU 416
B#16#1
B#16#2
B#16#3
B#16#5
local_tsap_id_len 参数 local_tsap_id(= 本地端口号)的长度是特定的。
主动连接的建立: 0
被动连接建立: 2
rem_subnet_id_len 目前尚未使用此参数,必须将其分配为 B#16#0。
rem_staddr_len 指定 rem_staddr 参数的长度,该参数为通信伙伴的 IP 地址。如果要通过未指定的连接进行通信,则不为伙伴指定 IP 地址。
未指定的连接: B#16#0
指定的连接: B#16#4
rem_tsap_id_len 此参数指示参数 rem_tsap_id 的长度和远程通信伙伴的端口号。
主动连接的建立: 2
被动连接建立: 0
next_staddr_len 在此处定义参数 next_staddr 的长度。
对于 PN 接口: B#16#0
local_tsap_id 使用该参数设置本地端口号。表示类型会因 connection_type 参数不同而有所不同。CPU 决定值范围。端口号在 CPU 中必须唯一。
对于 connection_type B#16#01:
local_tsap_id[1]
local_tsap_id[2]
local_tsap_id[3-16]
对于 connection_type B#16#11:
local_tsap_id[1]
local_tsap_id[2]
local_tsap_id[3-16]

用十六进制格式表示的端口号low byte
用十六进制格式表示的端口号high byte
B#16#00

用十六进制表示的端口号high byte
用十六进制格式表示的端口号low byte
B#16#00
rem_subnet_id 目前尚未使用此参数,必须将其分配为 0。
rem_staddr 在此字节数组中输入远程通信伙伴的 IP 地址。使用未指定的连接时,不输入 IP 地址。表示类型取决于 connection_type 参数。示例:IP 地址 192.168.0.1:
对于 connection_type B#16#01:
rem_staddr[1] =
rem_staddr[2] =
rem_staddr[3] =
rem_staddr[4] =
rem_staddr[5-6]=
对于 connection_type B#16#11:
rem_staddr[1] =
rem_staddr[2] =
rem_staddr[3] =
rem_staddr[4] =
rem_staddr[5-6]=

B#16#01 (1)
B#16#00 (0)
B#16#A8 (168)
B#16#C0 (192)
B#16#00(保留)

B#16#C0 (192)
B#16#A8 (168)
B#16#00 (0)
B#16#01 (1)
B#16#00(保留)
rem_tsap_id 使用该参数设置remote端口号。表示类型会因 connection_type 参数不同而有所不同。CPU 决定值范围。
对于 connection_type B#16#01:
rem_tsap_id[1]
rem_tsap_id[2]
rem_tsap_id[3-16]
对于 connection_type B#16#11:
rem_tsap_id[1]
rem_tsap_id[2]
rem_tsap_id[3-16]

用十六进制表示的端口号low byte
用十六进制表示的端口号low byte
B#16#00

用十六进制表示的端口号high byte
用十六进制表示的端口号low byte
B#16#00
next_staddr 该参数定义所用 CP 的机架和插槽编号。使用 CPU 的集成 PN 接口时,必须将该参数设置为 0。
next_staddr[1-6] B#16#00
spare 未使用此参数,必须将其设设置为默认值 0。

“Modbus settings”Modbus 参数

参数 说明
server_client TRUE: S7 是服务器
FALSE: S7 是客户端
single_write 在“S7 为客户端”操作模式下,如果参数 single_write = TRUE ,则功能代码 5 和 6 用于执行长度为 1 的写入作业。
如果 single_write = FALSE,则功能代码 15 和 16 用于所有写入作业。
connect_at_startup 指定连接建立的时间。
如果将 connect_at_startup 设置为 TRUE,将在 CPU 重新启动后立即建立连接。此种情况下,只有正确建立连接 (CONN_ESTABLISHED = TRUE) 后才能启动数据请求,否则将在 ERROR 和 STATUS 中显示相应的错误。
FALSE:如果 ENQ_ENR,则连接建立
设置为TRUE: 重新启动后立即建立连接
八个数据区 S7 存储器中有八个可以用于映射 MODBUS 地址的数据区。必须至少定义第一个数据区,其余七个数据区可选择性定义。根据作业类型,将从数据区读取数据或向其中写入数据。
任何作业都只能从一个 DB 读取数据或向一个 DB 写入数据。访问寄存器或位于多个 DB 中的位值时,即使编号连续无间隔,也将分为两个作业。组态时请务必注意。
一个数据块中可以映射的 Modbus 区(寄存器或位值)数目比一个消息帧可以处理的数目多。
data_type data_type 参数指定该数据块中映射的 MODBUS 数据类型。如果在 data_type 中输入值 0,则不使用相应的区域。
标识符
0
1
2
3
4
数据类型
未使用区域
线圈
输入
保持寄存器
输入寄存器
数据宽度

Bit
Bit
Word
Word
db db 参数指定映射 MODBUS寄存器或下面定义的位值的数据块。DB 编号 0 为系统保留,不允许使用。
DB 编号 1 到 65535(W#16#0001 到 W#16#FFFF)

数据块必须比已组态数据所需的长度多两个字节。最后的两个字节供内部使用。
start
end
start 指定 DB 的数据字 0 中映射的第一个 Modbus 地址。end 参数定义最后一个 MODBUS 地址。
对于寄存器访问,带有最后一个 Modbus 地址输入的 S7 DB 中的数据字编号如下计算:
DBW 编号 = (end – start) * 2
对于位访问,带有最后一个 Modbus 地址输入的 S7 DB 中的数据字节编号如下计算:
DBB 编号 = (end – start + 7) / 8
定义的数据区不得重叠。end 参数不得小于 start。如果发生错误,指令启动将中止并提示错误。如果两个值相同,则将分配一个 Modbus 地址(1 个寄存器或 1 个位值)。
在 S7 存储器区域映射 MODBUS 地址的示例。
MODBUS 地址 0 到 65535(W#16#0000 到 W#16#FFFF)
internal_send_buffer 该数组用于发送数据的指令中。不允许访问或更改该区域。
internal_recv_buffer 该数组用于接收数据的指令中。不允许访问或更改该区域。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19155

    浏览量

    229044
  • S7-300
    +关注

    关注

    8

    文章

    225

    浏览量

    34237
  • S7-400
    +关注

    关注

    1

    文章

    63

    浏览量

    14669
  • MODBUS总线
    +关注

    关注

    0

    文章

    22

    浏览量

    10023
  • TCP通信
    +关注

    关注

    0

    文章

    146

    浏览量

    4215

原文标题:西门子博途: MODBUSPN

文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    北京回收西门子组态软件

    回收西门子变频器SINAMICS V10系列变频器回收西门子触摸屏回收西门子组态软件回收西门子
    发表于 05-27 12:16

    西门子洗衣机说明

    西门子洗衣机说明
    发表于 05-14 17:27 124次下载
    <b class='flag-5'>西门子</b>洗衣机<b class='flag-5'>说明</b>书

    西门子大赛1200电梯参考程序

    西门子大赛1200电梯参考程序,V13文件.有需要的加油!
    发表于 06-22 15:56 183次下载

    西门子编程线说明

    本文档内容介绍了西门子编程线,管脚说明以及详细参数说明
    发表于 11-28 19:36 6次下载
    <b class='flag-5'>西门子</b>编程线<b class='flag-5'>说明</b>

    解析ABB机器人与西门子S7-1200 profinet通讯

    西门子软件中做PLC硬件组态,设置以太网连接。
    的头像 发表于 01-18 16:55 4.9w次阅读
    解析ABB机器人与<b class='flag-5'>西门子</b>S7-1200 profinet通讯

    西门子plc的型号选择_西门子plc型号说明

    本文主要介绍了西门子plc的型号选择及型号说明。首先需要根据工艺要求:确定输入、输出点数,也就是DI、DO、AI、AO。
    发表于 07-25 10:38 2.4w次阅读

    西门子PLC的符号详细教程说明

    本文档的主要内容详细介绍的是西门子PLC的符号详细教程说明
    发表于 03-21 14:38 66次下载
    <b class='flag-5'>西门子</b>PLC的符号详细教程<b class='flag-5'>说明</b>

    西门子802D功能说明

    西门子802D功能说明
    发表于 04-23 09:36 7次下载

    西门子PLC编程软件下载

    西门子PLC编程软件TIA V13 SP1 SIMATIC_WinCC_Runtime_Professional_SP1_for_V13---江西工控论坛有下载密码www.jx-gongkong.com
    发表于 03-01 11:04 60次下载

    软件安装说明

    西门子推出的 TIA 软件将所有的自动化软件工具统一到一个开发环境中,可在 同一开发环境下组态西门子绝大部分的可编程控制器、HMI 和驱动器,如图 2-1-1 所示。 在控制器和驱
    发表于 10-31 16:26 1次下载

    Unity3D与西门子PLC通讯

    本文是做实体PLC和Unity的通讯,如果没有实体PLC可以参考我之前的文上位机与西门子TIA的PROFINET通讯仿真(虚拟通讯),这篇
    发表于 04-19 11:43 6次下载
    Unity3D与<b class='flag-5'>西门子</b>PLC通讯

    如何在平台调试西门子G120变频器

      随着工业自动化迈向智能化越来越近,科技工作者不断的突破,近年在传动领域,采用工业以太网(Profinet)和变频器通讯非常广泛,今天我们简单的介绍下在平台调试西门子G120变频器。
    的头像 发表于 04-25 10:17 2.8w次阅读
    如何在<b class='flag-5'>博</b><b class='flag-5'>途</b>平台调试<b class='flag-5'>西门子</b>G120变频器

    西门子1200/1500PLC单按钮启停控制10种设计方法

    西门子1200/1500PLC单按钮启停控制10种设计方法
    的头像 发表于 08-31 09:14 7740次阅读
    <b class='flag-5'>西门子</b><b class='flag-5'>博</b><b class='flag-5'>途</b>1200/1500PLC单按钮启停控制10种设计方法

    西门子plc单按钮启停的十种方法(1200/1500PLC)

    西门子1200/1500PLC单按钮启停控制10种设计方法
    发表于 08-31 09:15 6247次阅读
    <b class='flag-5'>西门子</b>plc单按钮启停的十种方法(<b class='flag-5'>博</b><b class='flag-5'>途</b>1200/1500PLC)

    如何在平台调试西门子G120变频器

    随着工业自动化迈向智能化越来越近,科技工作者不断的突破,近年在传动领域,采用工业以太网(Profinet)和变频器通讯非常广泛,今天我们简单的介绍下在平台调试西门子G120变频器。
    发表于 09-07 12:50 4697次阅读
    如何在<b class='flag-5'>博</b><b class='flag-5'>途</b>平台调试<b class='flag-5'>西门子</b>G120变频器