通用串行接口 (USS) 通信
USS 指令可控制支持通用串行接口 (USS) 的电机驱动器的运行。可以使用 USS指令通过与 CM 1241 RS485 通信模块或 CB 1241 RS485 通信板的 RS485连接与多
个驱动器通信。一个 S7-1200 CPU 中较多可安装三个 CM 1241 RS422/RS485模块和一个 CB 1241 RS485 板。每个 RS485 端口较多操作十六台驱动器。
USS
协议使用主从网络通过串行总线进行通信。主站使用地址参数向所选从站发送消息。如果未收到传送请求,从站本身不会执行传送操作。各从站之间无法进行直接
消息传送。USS通信以半双工模式执行。以下 USS 图示显示了一个驱动器应用示例的网络图。
基于 PROFIBUS 或 PROFINET 的 USS 通信S7-1200 CPU V4.1 版本以及 STEP 7 V13 SP1 扩展了 USS 的功能,可以使用PROFINET 或 PROFIBUS 分布式 I/O 机
架与各类设备(RFID 阅读器、GPS设备和其它)进行通信:
● PROFINET :可以将 S7-1200 CPU 的以太网接口连接至 PROFINET接口模块。可通过机架中 PtP 通信模块以接口模块实现与 PtP 设备的串行通信。
● PROFIBUS :在 S7-1200 CPU 机架左边插入 PROFIBUS 通信模块。将PROFIBUS 通信模块连接至 PROFIBUS 接口模块的机架。可通过机架中 PtP通信模块以接口
模块实现与 PtP 设备的串行通信
出于这个原因,S7-1200 支持两组 PtP 指令:
● 早期 USS 指令 :这些 USS 指令存在于 S7-1200 的 V4.0版本之前,并且仅可通过 CM 1241 通信模块或 CB 1241 通信板进行串行通信。
● USS 指令 :这些 USS 指令具备早期指令的所有功能,并且增添了连接PROFINET 和 PROFIBUS 分布式 I/O 的功能。这些 USS 指令可用于组态分布
式 I/O机架中 PtP 通信模块与 PtP 设备之间的通信。要使用这些 USS 指令,S7-1200 CM1241 模块的固件版本不得低于 V2.1。
说明
用于 S7-1200 的 V4.1
版本时,可以对所有类型的点对点通信使用点对点指令:串行通信、基于 PROFINET的串行通信和基于 PROFIBUS 的串行通信。STEP 7
提供早期点对点指令的目的仅是为了支持现有程序。早期命令仍适用于所有 S7-1200CPU。无须对之前程序的指令进行转换。
选择 USS 指令的版本
在 STEP 7 中可使用两个版本的 USS 指令:
● 版本 2.0(早期指令)较初在 STEP 7 Basic/Professional V13 中提供。
● 版本 2.1 在 STEP 7 Basic/Professional V13 SP1 中提供。
可以从兼容性和移植便利性方面考虑,选择将相应的指令版本插入用户程序中。
不能将两个版本的指令用于同一模块,但不同的模块可以使用不同版本的指令。
使用指令树将 USS 指令放入程序时,将根据所选的 USS 指令在项目树中创建新的 FB 或FC 实例。 在项目树的“PLC_x > 程序块 > 系统块 > 程序资源”(PLC_x
> Program blocks >System blocks > Program resources) 下可看到新的 FB 或 FC 实例。
要确认程序中 USS
指令的版本,必须检查项目树的属性而不是程序编辑器中显示的框的属性。
选择项目树的 USS FB 或 FC实例,单击右键,选择“属性”(Properties),然后选择“信息”(Information) 页查看 USS指令的版本号。
使用 USS 协议的要求
四条 USS 指令使用两个 FB 和两个 FC 来支持 USS 协议。 一个 USS 网络使用一个USS_Port_Scan 背景数据块 (DB)。 USS_Port_Scan 背景数据块包含供该 USS
网络中所有驱动器使用的临时存储区和缓冲区。 各 USS 指令共享此数据块中的信息。
连接到一个 RS485 端口的所有驱动器(较多 16 个)是同一 USS 网络的一部分。
连接到另一 RS485 端口的所有驱动器是另一 USS 网络的一部分。 各 USS网络通过单独的数据块进行管理。 与各 USS 网络相关的所有指令必须共享该数据块。
这包括用于控制各 USS 网络上的所有控制器的所有USS_Drive_Control、USS_Port_Scan、USS_Read_Param 和 USS_Write_Param指令。
USS_Drive_Control 指令是一个函数块 (FB)。 在程序编辑器中放置 USS_Drive_Control指令时,系统将通过“调用选项”(Call options) 对话框提示您为该 FB
分配 DB。
如果对于该 USS 网络而言,它是该程序中的**条 USS_Drive_Control指令,则可以接受默认的 DB 分配(或根据需要更改名称),将相应地创建一个新 DB。
但是,如果对于该通道它不是**条 USS_Drive_Control指令,则必须使用“调用选项”(Call options) 对话框中的下拉列表选择先前为该 USS网络分配的 DB
名称。
USS_Drive_Control 指令是一个函数块 (FB),并且其通过点对点 (PtP) RS485通信端口处理 CPU 和驱动器之间的实际通信。 每次调用此 FB可处理与一个驱动器
的一次通信。 用户程序必须尽快调用此 FB以防止与驱动器通信**时。 可在主程序循环 OB 或任何中断 OB 中调用此 FB。USS_Read_Param 和 USS_Write_Param
指令都是函数 (FC)。 在编辑器中放置这些 FC时不分配 DB。 而您必须给这些指令的“USS_DB”输入分配合适的 DB 引用。双击该参数字段,然后单击参数助手
图标可查看可用的 DB 名称。
通常,应在循环中断 OB 中调用 USS_Port_Scan FB。该循环中断 OB的循环时间应设置为较小调用间隔的一半左右(例如,1200 波特的通信应使用 350 ms
或更短的循环时间)。
用户程序通过 USS_Drive_Contro FB 可访问 USS 网络上*的驱动器。
其输入和输出是驱动器的状态和控制。 如果网络上有 16个驱动器,则用户程序必须具有至少 16 个 USS_Drive_Control调用,每个驱动器一个调用。 应该以控
制驱动器工作所需的速率调用这些块。
只能在主程序循环 OB 中调用 USS_Drive_Control FB。
小心
从 从 OB 调用 USS 指令时的考虑事项
只能在主程序循环 OB 中调用 USS_Drive_Control、USS_Read_Param 和USS_Write_Param。可在任何 OB 中调用 USS_Port_Scan FB,通常是在循环中断 OB
中调用。
不要在**级比 USS_Port_Scan 指令所在 OB 的**级高的 OB 中使用USS_Drive_Control、USS_Read_Param 和 USS_Write_Param 指令。 例如,不要将
USS_Port_Scan 放置在主程序循环 OB 中,而将 USS_Read_Param 放置在循环中断OB 中。如果未能防止 USS_Port_Scan执行的中断,则会产生意外错误,进而导
致人身伤害。
USS_Read_Param 和 USS_Write_Param FC 可读取和写入远程驱动器工作参数。
用户程序可包含尽可能多的这些功能,但在任何特定时刻,每个驱动器只能激活一个读或写请求。 只能在主程序循环 OB 中调用 USS_Read_Param 和
USS_Write_Param FC。
计算与驱动器通信所需的时间
与驱动器进行的通信与 S7-1200 扫描周期不同步。
在完成一个驱动器通信事务之前,S7-1200 通常完成了多个扫描。
USS_Port_Scan 间隔是一个驱动器事务所需的时间。
下表列出了各个通信波特率下的较小 USS_Port_Scan 时间间隔。 比 USS_Port_Scan间隔更频繁地调用 USS_Port_Scan FB 不会增加事务数。 如果通信错误导致
尝试 3次才能完成事务,则驱动器**时间隔是处理该事务可能花费的时间。 默认情况下,USS协议库对每个事务较多自动进行 2 次重试。
6ES72411CH320XB0 | CM1241 RS485 /422通讯模块 |
6ES72411AH320XB0 | CM1241 RS232通讯模块 |
6ES72411CH301XB0 | CB1241 RS485信号板通讯模块 |
6ES72784BD320XB0 | SM1278 I/O Link Master |
6ES72213AD300XB0 | SB1221 数字量信号板模块,支持5V DC输入信号, 4输入 5V DC,较高频率200KHZ |
6ES72213BD300XB0 | SB1221 数字量信号板模块,支持24V DC输入信号,4输入 24V DC ,较高频率200KHZ |
6ES72221AD300XB0 | SB1222 数字量信号板模块 支持5V DC 输出信号, 4输出 5V DC,较高频率200KHZ |
6ES72221BD300XB0 | SB1222 数字量信号板模块 4输出 24V DC 0.1A 较高频率200KHZ |
6ES72230BD300XB0 | SB1223 数字量信号板模块 2输入24V DC/ 2输出24V DC |
6ES72233AD300XB0 | SB1223 数字量信号板查模块,支持5V DC输入信号,2输入 5V DC/2输出 5V DC 0.1A,较高频率200KHZ |
6ES72233BD300XB0 | SB1223 数字量信号板模块,支持24 V DC输入信号, 2输入24V DC/ 2输出24V DC 0.1 A ,较高频率200KHZ |
6ES72324HA300XB0 | SB1232, 模拟量信号板模块, 1AO |
6ES72314HA300XB0 | SB1231, 模拟量信号板模块, 1AI, 10位分辩率, (0-10V) |
6ES72315PA300XB0 | SB1231, 热电阻信号板模块,1 RTD 类型: Platinum (Pt) |
6ES72315QA300XB0 | SB1231, 热电偶信号板模块,1 TC1 类型: J, K |
请按订货号进行购买
Modbus RTU
概述
S7-1200 CPU V4.1 版本以及 STEP 7 V13 SP1 扩展了 Modbus RTU 的功能,可以使用PROFINET 或 PROFIBUS 分布式 I/O 机架与各类设备(RFID 阅读器、GPS
设备和其它)进行通信:
● PROFINET :可以将 S7-1200 CPU 的以太网接口连接至 PROFINET接口模块。可通过机架中 PtP 通信模块以接口模块实现与 PtP 设备的串行通信。
● PROFIBUS :在 S7-1200 CPU 机架左边插入 PROFIBUS 通信模块。将PROFIBUS 通信模块连接至 PROFIBUS 接口模块的机架。可通过机架中 PtP
通信模块以接口模块实现与 PtP 设备的串行通信。
出于这个原因,S7-1200 支持两组 PtP 指令:
● 早期 Modbus RTU 指令 :这些 Modbus RTU 指令存在于 S7-1200 的 V4.0版本之前,并且仅可通过 CM 1241 通信模块或 CB 1241 通信板进行串行通信。
● Modbus RTU 指令 :这些 Modbus RTU指令具备早期指令的所有功能,并且增添了连接 PROFINET 和 PROFIBUS 分布式I/O 的功能。借助 Modbus RTU 指令,
您可组态分布式 I/O 机架中 PtP 通信模块与PtP 设备的之间通信。要使用这些 Modbus RTU 指令,S7-1200 CM 1241模块的固件版本不得低于 V2.1。
说明
用于 S7-1200 的 V4.1
版本时,可以对所有类型的点对点通信使用点对点指令:串行通信、基于 PROFINET的串行通信和基于 PROFIBUS 的串行通信。STEP 7提供早期点对点指令的目的
仅是为了支持现有程序。无论对于 V4.1 CPU 或 V4.0还是更早版本的 CPU,早期指令仍然有效。无须对之前程序的指令进行转换。
选择 Modbus RTU 指令的版本
在 STEP 7 中可使用两个版本的 Modbus RTU 指令:
● 版本 1.1 较初在 STEP 7 Basic/Professional V13 中提供。
● 版本 2.1 在 STEP 7 Basic/Professional V13 SP1 中提供。
可以从兼容性和移植便利性方面考虑,选择将相应的指令版本插入用户程序中。
不能将两个版本的指令用于同一模块,但不同的模块可以使用不同版本的指令。
不要在同一 CPU 程序中同时使用 1.x 和 2.y 指令版本。 用户程序的 Modbus RTU
指令必须具有相同的主版本号(1 1.x、2 2.y 或 V V.z)。
主版本组内的各个指令可具有不同的次版本号 (1.x x)。
单击指令树任务卡上的图标可启用指令树的标题和列
要更改 Modbus RTU
指令的版本,请从下拉列表中选择相应版本。
可以选择一组指令或分别选择各个指令。
使用指令树将 Modbus RTU 指令放入程序时,将在项目树中创建新的 FB 实例。
在项目树的“PLC_x > 程序块 > 系统块 > 程序资源”(PLC_x > Program blocks > Systemblocks > Program resources) 下可看到新的 FB 实例。
要确认程序中 Modbus RTU
指令的版本,必须检查项目树的属性而不是程序编辑器中显示的框的属性。
选择项目树的 Modbus RTU FB
实例,单击右键,选择“属性”(Properties),然后选择“信息”(Information) 页查看 ModbusRTU 指令的版本号。
可执行 Modbus_Comm_Load 来组态端口以使用 Modbus RTU 协议。 为使用 ModbusRTU 协议组态端口后,该端口只能由 Modbus_Master 或 Modbus_Slave 指令使
用。
对用于 Modbus 通信的每个通信端口,都必须执行一次 Modbus_Comm_Load 来组态。
为要使用的每个端口分配一个一的 Modbus_Comm_Load 背景数据块。 较多可在 CPU中安装三个通信模块(RS232 或 RS485)和一个通信板 (RS485)。 从启动
OB 调用Modbus_Comm_Load 并执行它一次,或使用**个扫描系统标记发起调用以执行它一次。
只有在必须更改波特率或奇偶校验等通信参数时,才再次执行 Modbus_Comm_Load。
如果将 Modbus 库与分布式机架中的模块结合使用,则必须在一个循环中断例程中执行Modbus_Comm_Load 指令(例如,每秒或每隔 10 秒执行一次)。
如果分布式机架的电源中断或者卸下了模块,则在模块恢复运行时,仅向 PtP 模块发送HWConfig 参数组。 由 Modbus_Master 启动的所有请求都会**时,并且
Modbus_Slave转入静默状态(对任何消息均无响应)。 循环执行 Modbus_Comm_Load解决了这些问题。
将 Modbus_Master 或 Modbus_Slave 指令放入用户程序中时,将为其分配背景数据块。
* Modbus_Comm_Load 指令的 MB_DB 参数时将引用该背景数据块。
Modbus_Master 通信规则
● 必须先执行 MB_COMM_LOAD 组态端口,然后 Modbus_Master指令才能与该端口通信。
● 如果要将某个端口用于初始化 Modbus 主站请求,则 MB_SLAVE不应使用该端口。Modbus_Master执行的一个或多个实例可使用该端口,但是对于该端口,所有
Modbus_Master执行都必须使用同一个 Modbus_Master 背景数据块。
● Modbus 指令不使用通信中断事件来控制通信过程。用户程序必须轮询Modbus_Master 指令以了解传送和接收的完成情况。
● 建议对于给定的端口,从程序循环 OB 中调用所有 Modbus_Master执行。Modbus_Master指令只能在一个程序循环或循环/延时执行等级执行。它们不能同时在
两种执行**级中执行。如果一个 Modbus_Master 指令被另一个执行**级更高的 Modbus_Master取代,将导致不正确的操作。Modbus_Master
指令不能在启动、诊断或时间错误执行**级执行。
● Modbus_Master 指令启动传输后,必须连续执行已启用 EN输入的该实例,直到返回状态 DONE=1 或状态 ERROR=1为止。在这两个事件其中之一发生前,一个特
殊的 Modbus_Master实例被视为已激活。原始实例激活后,调用已启用 REQ输入的其它任何实例都将导致错误。如果原始实例的连续执行过程停止,则请求状态
保持激活一段时间,该时间由静态变量“Blocked_Proc_Timeout”*。一旦**出该时间段,则下一个使用激活的 REQ 输入调用的 Modbus_Master
指令成为激活实例。这可以防止单个 Modbus_Master指令独占或锁定对端口的访问。如果在由静态变量“Blocked_Proc_Timeout”*的时间段内没有启用原始激
活的实例,则下次执行此实例(未设置REQ)时将清除激活状态。如果设置了 REQ,则此次执行将启动新的Modbus_Master 请求,如同其它实例未曾激活一样。
REQ 参数
0 = 无请求;1 = 请求将数据传送到 Modbus 从站可使用电平或边沿触发的触点控制此输入。只要此输入启用,状态机便会启动,以确保在
当前请求完成前不允许使用同一背景数据块的任何其它 Modbus_Master发出请求。在当前请求执行期间,将捕获所有其它输入状态并内部保存,直到接收到响应
或检测到错误。
如果在当前请求完成前 REQ 输入 = 1,从而再次执行 Modbus_Master的同一实例,则不会进行任何后续传送。但是,如果当前请求已完成,因为 REQ 输入 =
1 而再次执行 Modbus_Master 时,便会发出新请求。
DATA_ADDR 和 MODE 参数用于选择 Modbus 功能类型
DATA_ADDR(从站中的 Modbus 起始地址):*要在 Modbus从站中访问的数据的起始地址。
Modbus_Master 指令使用 MODE 输入而非功能代码输入。MODE 和 Modbus地址一起确定实际 Modbus 消息中使用的功能代码。下表列出了 MODE 参数、Modbus
功能代码和 Modbus 地址范围之间的对应关系。
对于“扩展寻址”模式,根据功能所使用的数据类型,数据的较大长度将减小 1 个字节或 1 个字。
DATA_PTR 参数
DATA_PTR 参数指向要写入或读取的 DB 或 M地址。如果使用数据块,则必须创建一个全局数据块为读写 Modbus从站提供数据存储位置。
说明
DATA_PTR 数据块类型必须允许直接寻址该数据块必须允许直接(**)寻址和符号寻址。创建该数据块时,必须选择“标准”(Standard) 访问属性。
DATA_PTR 参数的数据块结构
● 这些数据类型对 Modbus 地址 30001 到 39999、40001 到 49999 和 400001 到465536 的 字读取有效,对 Modbus 地址 40001 到 49999 和 400001 到
465536的 字写入也有效。
– WORD、UINT 或 INT 数据类型的标准数组
– *的 WORD、UINT 或 INT 结构,其中每个元素都具有一的名称和 16
位数据类型。
– *的复杂结构,其中每个元素都具有一的名称以及 16 或 32 位数据类型。
● 用于 Modbus 地址 00001 到 09999 的 位读取和写入和 10001 到 19999 的位读取。
– 布尔数据类型的标准数组。
– 一命名的布尔变量的已命名布尔结构。
● 尽管不是必需的,但还是建议每个 Modbus_Master指令都具有各自的单独存储区。此建议的原因在于,如果多个 Modbus_Master指令读取和写入同一个存储
区,发生数据损坏的可能性会更大。
● 不要求 DATA_PTR
数据区位于同一个全局数据块中。可创建一个具有多个区域的数据块供 Modbus读取、一个数据块供 Modbus 写入或一个数据块用于各个从站。