F145F146_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)

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

标注

  • 建议使用相应的FP7指令,来代替使用此F型指令:FP_MODBUS_MASTER

  • 与其他F145或F146指令相比,可通过参数FunctionCode*直接设置所需Modbus命令。

  • F145F146指令只有在这两个指令均未激活时才可执行。评估程序中的"F145/F146未激活"标志以检查指令的状态。

  • F145指令仅请求要发送到从站的数据。实际处理发生在扫描结束时。

  • 评估"F145/F146错误"标志以检查发送是否正常完成或有错误。

  • 当播送时(SlaveAddress设置为0),确保仅在经过最大扫描时间后才执行发送。

  • 如果目标地址是特殊内部寄存器(从R9000开始)、特殊数据寄存器(从DT9000/DT90000开始)或文件寄存器FL,则无法执行F145F146指令。

  • 主站支持的命令:

    函数代码

    系统常量

    起始寄存器

    寄存器数

    参考编号(根据Modbus从站而定)

    01

    SYS_MODBUS_01_READ_COIL

    0–65535

    1–2040

    000001–065536

    02

    SYS_MODBUS_02_READ_INPUT

    0–65535

    1–2040

    100001–165536

    03

    SYS_MODBUS_03_READ_HOLDING_ REGISTER

    0–65535

    1–127

    400001–465536

    04

    SYS_MODBUS_04_READ_INPUT_ REGISTERS

    0–65535

    1–127

    300001–365536

    5

    SYS_MODBUS_05_FORCE_COIL

    0–65535

    1

    000001–065536

    6

    SYS_MODBUS_06_PRESET_ REGISTER

    0–65535

    1

    400001–465536

    15

    SYS_MODBUS_15_FORCE_COILS

    0–65535

    2–2040

    000001–065536

    16

    SYS_MODBUS_16_PRESET_ REGISTERS

    0–65535

    2–127

    400001–465536

  • Panasonic PLC的Modbus指定:

    参考编号

    Panasonic PLC的地址区域

    000001

    Y0

    002049

    R0

    100001

    X0

    400001

    DT0

    300001

    WL0

    302001

    LD0

提示

关于Panasonic PLC可用的参考编号及地址区域范围,请参阅PLC用户手册。如果参考编号超出支持的可用范围,将返回错误。

FP-X0, 复合通信单元: 请参阅可在互联网下载中心找到的对应手册。

错误标志

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。

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