FP_MODBUS_MASTER

将数据写入从站或从从站中读取

可用的函数代码(包含编程示例)

SYS_MODBUS_01_READ_COIL

SYS_MODBUS_02_READ_INPUT

SYS_MODBUS_03_READ_HOLDING_REGISTER

SYS_MODBUS_04_READ_INPUT_REGISTERS

SYS_MODBUS_05_FORCE_COIL

SYS_MODBUS_06_PRESET_REGISTER

SYS_MODBUS_15_FORCE_COILS

SYS_MODBUS_16_PRESET_REGISTERS

使用此指令,通过采用Modbus RTU协议的通信端口,将数据从主站写入从站或从从站读取数据(如所用端口的系统寄存器中所定义)。确保对主站和从站设置相同的协议。

参数

输入

Port (WORD, INT, UINT)

根据PLC的类型指定通信端口:

  • COM端口,例如SYS_COM0_PORT

  • 以太网端口,例如SYS_ETHERNET_USER_CONNECTION_1

  • MCU/SCU,例如COM01中的16#xx01 (xx = 插槽编号)

SlaveAddress (WORD, INT, UINT)

从站的站号 (0–255)

如果SYS_ETHERNET_USER_CONNECTION_xx应用到输入Port,则设置为1

FunctionCode* (WORD, INT, UINT)

SYS_MODBUS_01_READ_COIL

SYS_MODBUS_02_READ_INPUT

SYS_MODBUS_03_READ_HOLDING_REGISTER

SYS_MODBUS_04_READ_INPUT_REGISTERS

SYS_MODBUS_05_FORCE_COIL

SYS_MODBUS_06_PRESET_REGISTER

SYS_MODBUS_15_FORCE_COILS

SYS_MODBUS_16_PRESET_REGISTERS

StartRegister (WORD, INT, UINT)

起始地址(0–65535)。地址类型根据由FunctionCode*指定的命令而定。

NumberOfRegisters* (WORD, INT, UINT)

发送的位数或字数。

  • 函数代码01、02为1–2040

  • 函数代码15为2–2040

  • 函数代码03、04为1–127

  • 函数代码16为2–127

MasterData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

要写入从站的数据在主站上的源地址。

输出

Result (WORD, INT, UINT)
  • 仅对于FP7
    • 0:正常完成

    • 1:通信端口用于主站通信

    • 2:通信端口用于从站通信

    • 3:已超过可同时使用的最大主站通信指令数

    • 4:发送超时

    • 5:响应接收超时

    • 6:接收数据错误

  • 对于其他PLC:设置为0

合作站的指定

通信模式

使用SCU或ET-LAN时

MODBUS

1-247

注释

对于通过Modbus进行的连接,请指定"1"。目标将由IP地址决定。

源数据区域起始地址的指定

通信模式

地址范围

MODBUS

0–65535 (16#FFFF)

接收的数据量指定

传输方法

发送的数据量

要使用的命令

字传输

1–127字

  • 要读取WY和WR,请使用SYS_MODBUS_01_READ_COIL

  • 要读取WX,请使用SYS_MODBUS_02_READ_INPUT

  • 要读取DT,请使用SYS_MODBUS_03_READ_HOLDING_REGISTER

  • 要读取WL和LD,请使用SYS_MODBUS_04_READ_INPUT_REGISTERS

位传输

1–2040位

  • 要读取Y和R,请使用SYS_MODBUS_01_READ_COIL

  • 要读取X,请使用SYS_MODBUS_02_READ_INPUT

使用SCU的示例程序

  • 从CPU单元的COM1端口发送指令,从外部设备(站号1)的数据区域DT400–DT401读取数据,并写入PLC的数据寄存器DT100–DT101

  • 确认主站通信清除–发送标志为TRUE (XC)且未在同一端口中进行发送(YC),然后执行SEND指令。

  • 要执行RECV指令,请指定合作伙伴站号(U1)、起始地址(DT400)、数据量(U2)和用于存储数据的PLC起始地址(DT100)。

编程期间的注意事项

  • 仅在选择了MEWTOCOL或MODBUS时主站通信才会被启用。确认相应通道的主站通信清除–发送标志(XC–XE)为TRUE,然后执行SEND/RECV指令。

  • 对于正在进行主站通信的通信端口,不可执行另一个SEND/RECV指令。确认主站通信发送标志(YC–YE)为FALSE,然后执行指令。

  • 对于正在进行站通信的端口,不可执行SEND/RECV指令。

  • 如没有响应,则主站通信发送标志(YC–YE)将在设置于CPU配置中的超时期间内保持为TRUE

  • 对于不同的COM端口,最多可同时执行16个SEND/RECV指令。

I/O分配

COM端口号

名称

说明

1

2

0

XC

XD

XE

主站通信清除–发送标志

MEWTOCOL-COMMEWTOCOL-COMMODBUS-RTU设置为通信模式且PLC处于RUN模式时,将变为TRUE

YC

YD

YE

主站通信发送标志

由SEND和RECV指令发送数据时变为TRUE。完成发送后变为FALSE

Y0

Y1

Y2

主站通信发送完成标志

当程序控制通信或主站通信发送正常完成时变为TRUE,当发送异常完成时变为FALSE

注释

触点用于读取操作状态。请勿使用用户程序向其中写入内容。

使用以太网的示例程序

  • 从CPU单元的LAN端口发送指令,从外部设备的数据区域DT400–DT401读取数据,并写入PLC的数据寄存器DT100–DT101

  • 确认连接1的主站通信清除–发送标志为TRUE (X90)且未在同一端口中进行发送(Y90),然后执行发送指令。

  • 要执行RECV指令,请指定合作伙伴站号(U1)、起始地址(DT400)、数据量(U2)和用于存储数据的PLC起始地址(DT100)。

编程期间的注意事项

  • 仅在选择了MEWTOCOL或MODBUS时主站通信才会被启用。确认相应连接的主站通信清除–发送标志(X90–X9F)为TRUE,然后执行SEND/RECV指令。

  • 对于正在进行主站通信的连接,不可执行另一个SEND/RECV指令。确认主站通信发送标志(Y90–Y9F)为FALSE,然后执行指令。

  • 对于正在进行从站通信的连接,不可执行SEND/RECV指令。

  • 对于不同的端口,最多可同时执行16个SEND/RECV指令。

  • 要在FP7的LAN端口之间进行通信,请为合作伙伴站号指定“U1”。目标由IP地址确定。

时间图

  1.  (1) 主站通信清除–发送标志,例如sys_bIsEthernetUserConnection1MasterCommunication
  2.  (2) 确认主站通信清除–发送标志为TRUE且主站通信发送标志为FALSE
  3.  (3) 主站通信发送标志,例如sys_bIsEthernetUserConnection1MasterCommunicationActive

    发送过程中主站通信发送标志TRUE

    发送完成后主站通信发送标志FALSE

  4.  (4) 执行此指令
  5.  (5) 主站通信发送完成标志,例如sys_bIsEthernetUserConnection1CommunicationError

    正常完成FALSE

    异常完成TRUE

  6.  (6) 发送数据
  7.  (7) 响应接收处理

I/O分配

I/O编号

名称

说明

X90–X9F

主站通信清除–发送标志

MEWTOCOL-COMMEWTOCOL-COMMODBUS-RTU设置为通信模式且PLC处于RUN模式时,将变为TRUE

Y90–Y9F

主站通信发送标志

由SEND和RECV指令发送数据时变为TRUE。完成发送后变为FALSE

Y70–Y7F

主站通信发送完成标志

当程序控制通信或主站通信发送正常完成时变为TRUE,当发送异常完成时变为FALSE

注释

触点用于读取操作状态。请勿使用用户程序向其中写入内容。

错误标志

sys_bIsOperationErrorHold(变为TRUE并保持为TRUE)
  • 如果从站或主站数据超出可用地址范围。
  • 如果通信模式未被设置为MEWTOCOL-COM主站/从站或Modbus RTU主站/从站。
  • 如果所选的COM端口需要尚未安装的通信插件。
sys_bIsOperationErrorNonHold(对于一次扫描变为TRUE)
  • 如果从站或主站数据超出可用地址范围。
  • 如果通信模式未被设置为MEWTOCOL-COM主站/从站或Modbus RTU主站/从站。
  • 如果所选的COM端口需要尚未安装的通信插件。

示例

SYS_MODBUS_01_READ_COIL

将此常量应用于输入参数FunctionCode*时,将执行相应的Modbus命令。

针对已连接的从站为通过系统寄存器被配置为Modbus RTU从站的Panasonic PLC的特殊情况,将从下述项目中读取一个或多个位:

  • Y输出

  • R (内部继电器)

示例

执行Modbus命令01:从以变量StartRegister设置的起始寄存器56起始的Modbus从站中读取1位。然后命令会将1位存储至以变量bBool2设置的地址起始的主站中。 从站的地址根据设备的Modbus规格转换为设备特定地址。

如果已连接的从站为Panasonic PLC,起始寄存器56将对应于输出Y383*16+8=56)。

SYS_MODBUS_02_READ_INPUT

将此常量应用于输入参数FunctionCode*时,将执行相应的Modbus命令。

针对已连接的从站为通过系统寄存器被配置为Modbus RTU从站的Panasonic PLC的特殊情况,将从下述项目中读取一个或多个位:

  • X输入

示例

执行Modbus命令02:从以变量StartRegister设置的起始寄存器66起始的Modbus从站中读取1位。然后命令会将1位存储至以变量bBool2设置的地址起始的主站中。 从站的地址根据设备的Modbus规格转换为设备特定地址。

如果已连接的从站为Panasonic PLC,起始寄存器66将对应于输入X424*16+2=66)。

SYS_MODBUS_03_READ_HOLDING_REGISTER

将此常量应用于输入参数FunctionCode*时,将执行相应的Modbus命令。

针对已连接的从站为通过系统寄存器被配置为Modbus RTU从站的Panasonic PLC的特殊情况,将从下述项目中读取一个或多个位:

  • DT(数据寄存器)

示例

执行Modbus命令03:从以变量StartRegister设置的起始寄存器100 起始的Modbus从站中读取2个字。然后命令会将2个字存储至以变量rCount2设置的地址起始的Modbus主站2中。 从站的地址根据设备的Modbus规格转换为设备特定地址。

如果已连接的从站为Panasonic PLC,起始寄存器100将对应于数据寄存器DDT100

寄存器最大数量:127。

SYS_MODBUS_04_READ_INPUT_REGISTERS

将此常量应用于输入参数FunctionCode*时,将执行相应的Modbus命令。

针对已连接的从站为通过系统寄存器被配置为Modbus RTU从站的Panasonic PLC的特殊情况,将从下述项目中读取一个或多个位:

  • WL0–WL127链接继电器

  • LD0–LD256 (链接数据寄存器)

示例

执行Modbus命令04:从以变量StartRegister设置的起始寄存器2018 起始的Modbus从站中读取7个字。然后命令会将7个字存储至以变量MasterData设置的LD25起始的主站中。 从站的地址根据设备的Modbus规格转换为设备特定地址。

如果已连接的从站为Panasonic PLC,起始寄存器2018将对应于链接数据寄存器LD18

寄存器最大数量:127。

SYS_MODBUS_05_FORCE_COIL

将此常量应用于输入参数FunctionCode*时,将执行相应的Modbus命令。

已连接的从站为Modbus RTU模式的Panasonic PLC时,一个或多个位将被写入:

  • Y输出

  • R (内部继电器)

示例

执行Modbus命令05:向以变量MasterData设置的地址WY1起始的Modbus从站中写入1位。然后命令会将1位存储至以变量StartRegister设置的起始寄存器35起始的Modbus从站中。 从站的地址根据设备的Modbus规格转换为设备特定地址。

如果已连接的从站为Panasonic PLC,地址35将对应于输出Y232*16+3=35)。

使用SYS_MODBUS_15_FORCE_COILS函数代码写入多个位数据时

寄存器最大数量: 1

SYS_MODBUS_06_PRESET_REGISTER

将此常量应用于输入参数FunctionCode*时,将执行相应的Modbus命令。

已连接的从站为Modbus RTU模式的Panasonic PLC时,一个或多个位将被写入:

  • DT(数据寄存器)

示例

执行Modbus命令 06:向以变量MasterData设置的地址 DT14起始的Modbus从站中写入1个字。然后命令会将1个字存储至以变量StartRegister设置的起始寄存器21起始的Modbus从站中。 从站的地址根据设备的Modbus规格转换为设备特定地址。

如果已连接的从站为Panasonic PLC,起始寄存器21将对应于数据寄存器DT21

使用SYS_MODBUS_15_FORCE_COILS函数代码写入多个位数据时

寄存器最大数量: 1

SYS_MODBUS_15_FORCE_COILS

将此常量应用于输入参数FunctionCode*时,将执行相应的Modbus命令。

已连接的从站为Modbus RTU模式的Panasonic PLC时,一个或多个位将被写入:

  • Y输出

  • R (内部继电器)

示例

执行Modbus命令15:向以变量MasterData设置的地址WY1起始的Modbus从站中写入64位。然后命令会将64位存储至以变量StartRegister设置的起始寄存器48起始的Modbus从站中。 从站的地址根据设备的Modbus规格转换为设备特定地址。

如果已连接的从站为Panasonic PLC,地址48将对应于输出Y303*16=48)。

SYS_MODBUS_16_PRESET_REGISTERS

将此常量应用于输入参数FunctionCode*时,将执行相应的Modbus命令。

已连接的从站为Modbus RTU模式的Panasonic PLC时,一个或多个位将被写入:

  • DT(数据寄存器)

示例

执行Modbus命令16:向以变量rCount1设置的地址起始的Modbus从站中写入数据。然后命令会将数据存储至以变量StartRegister设置的起始寄存器100起始的Modbus从站2中。 从站的地址根据设备的Modbus规格转换为设备特定地址。

如果已连接的从站为Panasonic PLC,起始寄存器100将对应于数据寄存器DDT100

寄存器最大数量:127。

最后更新日期: 此页面上的反馈松下热线