西门子销售工业控制经销商
PLC是什么意思?相信很多人处于大概知道是什么,又无法准确说出的阶段,作为专注于为企业提供数据采集和设备控制解决方案的众诚工业,今天和大家探讨一下。
而众诚工业还能根据用户需求,设计PLC控制程序,为客户提供PLC编程和上位机软件的定制化开发技术服务,满足用户的多种需求,比如,自主研发的洁净空调智能控制系统和通风排风智能控制系统就配置PLC,不仅具有报警和定时控制功能,还兼具可扩展性和兼容性,系统能被第三方系统集成。
以上PLC的基本介绍,相信大家对PLC也有一个初步的了解。PLC的型号、品牌不同,对应着其结构形式、性能、编程方式等等都有所差异,价格也各不相同,在挑选时候,建议先要明确自己的应用需求,比如具体的应用场景,希望实现的运动和控制功能,已经特殊的控制要求,这些将决定了PLC的选型和搭配组合。
简单地说,PLC就是一种小型的计算机,和我们常用的计算机不同的是,PLC是设备之间通过数字信号进行互动,而我们常用的计算机,是人和计算机的互动。
控制是PLC的核心功能,其控制类型主要分为以下几种1、开关量的开环控制。这是PLC*基本的控制功能,它能凭借其强大的逻辑运算能力,取代传统继电接触器的控制系统;
2、数据采集与监控。这是PLC非常必要的功能,否则它将无法完成现场控制;
3、数字量智能控制。PLC具有实现接收和输出高速脉冲的功能,近年来先进的PLC还开发了数字控制模块和新型运动单元模块,让工程师更加轻松地通过PLC实现数字量控制;
4、PLC能通过模拟量采集和调节温度、压力、速度等参数。
正因为PLC功能强大,且具有设计方便、重量体积小、能耗低、改造工作量小、通用性强、维护方便等易学易用的特点,深受工程师的欢迎,应用非常广泛,钢铁、石油、化工、纺织、交通、机械制造等等行业都能看到它的身影。
描述
MB_DATA_LEN IN UInt Modbus 数据长度:分配此请求中要访问的位数或字数。有效长
度的相关信息,请参见下面的 Modbus 功能表。
MB_DATA_PTR IN_OUT Variant 指向 Modbus 数据寄存器的指针:寄存器缓冲数据进入 Modbus
服务器或来自 Modbus 服务器。指针必须分配一个未进行优化的
全局 DB 或 M 存储器地址。
ConNECT IN_OUT Variant 引用包含系统数据类型为“TCON_IP_v4”的连接参数的数据块结
构。还支持以下数据类型:TCON_IP_V4_SEC、TCON_QDN 和
TCON_QDN_SEC。请参见“PROFINET 连接参数” (页 630)。
DONE OUT Bool 上一请求已完成且没有出错后,DONE 位将保持为 TRUE 一个扫
描周期时间。
BUSY OUT Bool • 0 - 无 MB_CLIENT 操作正在进行
• 1 - MB_CLIENT 操作正在进行
ERROR OUT Bool MB_CLIENT 执行因错误而结束后,ERROR 位将在一个扫描周期时
间内保持为 TRUE。STATUS 参数中的错误代码仅在 ERROR = TRUE
的一个循环周期内有效。
STATUS OUT Word 执行条件代码
Modbus 功能 23
描述
使用 Modbus 功能 23,可以在作业中执行以下操作:
1. 将数据从 CPU 传输到 Modbus 服务器,并写入一个或多个保持寄存器。
2. 从 Modbus 服务器的一个或多个保持寄存器中读取数据,将此数据传输到 CPU。
自指令版本 V6.0 起,“MB_CLIENT”指令支持 Modbus 功能 23。
参数
使用 Modbus 功能 23 时,MB_MODE 参数的值必须为 123。
参数 MB_DATA_ADDR、MB_DATA_LEN 和 MB_DATA_PTR 未占用,并且这些参数的值必须为
默认值。
使用 Modbus 功能 23 时,将使用六个新参数,如下表所述。这些参数中的每一个参数都以
“RD_”或“WR_”开头,用于表明其属于读或写任务。这些参数默认处于隐藏状态。使用Modbus 功能 23 时,这六个参数必须全部使用。如果使用其它 Modbus 功能,则这六个参
数的值必须为 0 或必须为空。否则,将返回 STATUS 值 16#818D。
表格 13-57 参数的数据类型
参数和类型 数据类型 描述
RD_MB_DATA_AD
DR
IN UInt 远程设备上的起始地址,要从该地址开始读取数据。
允许值:0 到 65535
RD_MB_DATA_LEN IN UInt 要从远程设备读取的寄存器数。
允许值:1 到 125
WR_MB_DATA_AD
DR
IN UInt 远程设备上的起始地址,要从该地址开始写入数据。
允许值:0 到 65535
WR_MB_DATA_LE
N
IN UInt 要写入远程设备的寄存器数。
允许值:1 到 121
RD_MB_DATA_PTR IN_OUT Variant 指向待从 Modbus 服务器读取的数据所在数据缓冲区的指针。
允许使用与 MB_DATA_PTR 相同的数据类型。
WR_MB_DATA_PT
R
IN_OUT Variant 指向待写入 Modbus 服务器的数据所在数据缓冲区的指针。
允许使用与 MB_DATA_PTR 相同的数据类型。
STATUS 参数
STATUS 值 16#8383、8189、818A 和 818B 的含义已扩展。添加了 STATUS 值 16#818D。
升级项目,升级指令
当使用 MB_CLIENT 指令(例如,指令版本 V5.2)升级现有项目时,程序不会自动使用新的
指令版本。要使用 Modbus 功能 23,必须手动升级指令版本。
REQ 参数
FALSE = 无 Modbus 通信请求
TRUE = 请求与 Modbus TCP 服务器通信
如果 MB_CLIENT 的实例没有激活且参数 DISConNECT=0,当 REQ=1 时,将启动一个新的
Modbus 请求。如果尚未建立连接,则建立一个新的连接。
如果在当前请求完成前 DISConNECT=0 且 REQ=1,从而执行 MB_CLIENT 的同一个实例,
则不会进行后续 Modbus 传送。一旦完成当前请求,如果通过 REQ=1 执行
MB_CLIENT,可处理新的请求。完成当前 MB_CLIENT 通信请求后,DONE 位将在一个周期内保持为 TRUE。DONE 位可用作
定时门,对多个 MB_CLIENT 请求进行排序。
说明
MB_CLIENT 处理期间输入数据的一致性
Modbus 客户端启动 Modbus 操作后,将在内部保存所有输入状态,在每次后续调用时
进行比较。比较用于确定此特定调用是否是活动客户端请求的发起者。可使用一个公用背景
数据块执行多个 MB_CLIENT 调用。
在主动处理 MB_CLIENT 操作期间应不改变输入,这一点很重要。若不遵循此规则,则
MB_CLIENT 无法确定活动实例。
MB_MODE 和 MB_DATA_ADDR 参数用于选择 Modbus 通信功能
MB_CLIENT 指令使用 MB_MODE 输入而非功能代码。MB_DATA_ADDR 分配远程数据的起始
Modbus 地址。
MB_MODE 和 MB_DATA_ADDR 一起确定实际 Modbus 消息中使用的功能代码。下表列出了
MB_MODE、MB_DATA_ADDR 和 Modbus 功能之间的对应关系:
表格 13-58 Modbus 功能
MB_MO
DE
Modbus 功能 数据长度 操作和数据 MB_DATA_ADD
R
0 01 1 到 2000 读取输出位:
每个请求 1 到 2000 个位
1 到 9999
101 01 1 到 2000 读取输出位:
每个请求 1 到 2000 个位
00000 到 65535
0 02 1 到 2000 读取输入位:
每个请求 1 到 2000 个位
10001 到 19999
102 02 1 到 2000 读取输入位:
每个请求 1 到 2000 个位
00000 到 65535
0 03 1 到 125 读取保持寄存器:
每个请求 1 到 125 个字MB_DATA_PTR 分配一个缓冲区来存储从 Modbus TCP 服务器读取或写入到该服务器的数据
数据缓冲区可位于未进行优化的全局 DB 或 M 存储区地址中。
对于 M 存储器中的缓冲区,使用 Any 指针格式。具体格式为 P#“位地址” “数据类型” “长度”,
例如 P#M1000.0 WORD 500。
MB_DATA_PTR 参数 指定一个通信缓冲区
• MB_CLIENT 通信功能:
– 从 Modbus 服务器地址(00001 到 09999)读写 1 位数据
– 从 Modbus 服务器地址(10001 到 19999)读取 1 位数据
– 从 Modbus 服务器地址(30001 到 39999)和(40001 到 49999)读取 16 位字数据
– 向 Modbus 服务器地址(40001 到 49999)写入 16 位字数据
• 向/从 MB_DATA_PTR 分配的 DB 或 M 储存器缓冲区传输字或位大小的数据。
• 如果通过 MB_DATA_PTR 分配 DB 为缓冲区,必须为所有 DB 数据元素分配数据类型。
– 1 位 Bool 数据类型代表一个 Modbus 位地址
– 16 位单字数据类型(如 WORD、UInt 和 Int)代表一个 Modbus 字地址
– 32 位双字数据类型(如 DWORD、DInt 和 Real)代表两个 Modbus 字地址
• 可以通过 MB_DATA_PTR 分配复杂的 DB 元素,例如
– 数组
– 指定的结构,其中每个元素都是唯一的。
– 指定的复杂结构,其中每个元素都具有唯一的名称以及 16 或 32 位数据类型。
• 不要求 MB_DATA_PTR 数据区位于同一个全局数据块(或 M 存储区)中。可分配一个数
据块供 Modbus 读取,分配另一个数据块供 Modbus 写入,或分配一个数据块用于各个
MB_CLIENT。
ConNECT 参数分配用于建立 PROFINET 连接的数据
必须使用全局数据块并存储所需的连接数据,才能在 ConNECT 参数中引用此 DB。
1. 创建新的全局 DB 或使用现有全局 DB 来存储 ConNECT 数据。可使用一个 DB 存储多个
TCON_IP_v4 数据结构。每个 Modbus TCP 客户端或服务器连接使用一个 TCON_IP_v4 数据结
构。可在 ConNECT 参数中引用连接数据。
2. 使用有帮助的名称对 DB 和静态变量进行命名。例如,将数据块命名为“Modbus 连接”,将
静态变量命名为“TCPactive_1”(针对 Modbus TCP 客户端连接 1)。
3. 在 DB 编辑器的“数据类型”(Data Type) 列中为示例静态变量“TCPactive_1”分配系统数据类型
“TCON_IP_v4
修改各 MB_CLIENT 连接的 TCON_IP_V4 DB 数据
• InterfaceID:在设备组态窗口中单击 CPU PROFINET 端口图像。单击“常规”
(General) 属性选项卡并使用该处显示的硬件标识符。
• ID:输入一个介于 1 到 4095 之间的连接 ID 编号。使用底层 TCON、TDISCON、TSEND 和
TRCV 指令建立 Modbus TCP 通信,用于 OUC(开放式用户通信)。
• ConnectionType:对于 TCP/IP,使用默认值 16#0B(十进制数 = 11)。
• ActiveEstablished:该值必须为 1 或 TRUE。主动连接,由 MB_CLIENT 启动 Modbus 通
信。
• RemoteAddress:将目标 Modbus TCP 服务器的 IP 地址输入到四个 ADDR 数组单元中。
例如,如上图所示输入 192.168.2.241。
• RemotePort:默认值为 502。该编号为 MB_CLIENT 试图连接和通信的 Modbus 服务器的
IP 端口号。一些第三方 Modbus 服务器要求使用其它端口号。
• LocalPort:对于 MB_CLIENT 连接,该值必须为 0。
多个客户端连接
Modbus TCP 客户端支持的并发连接数*多为 PLC 允许的开放式用户通信*大连接数。PLC 的
连接总数(包括 Modbus TCP 客户端和服务器)不得超过支持的开放式用户通信*大连接数
(页 602)。单独的并发客户端连接必须遵循以下规则:
• 各 MB_CLIENT 连接必须使用一个唯一的背景 DB
• 必须为各 MB_CLIENT 连接分配一个唯一的服务器 IP 地址
• 各 MB_CLIENT 连接分配一个唯一的连接 ID
• 是否需要唯一的 IP 端口号取决于服务器组态
各个背景 DB 必须使用不同的连接 ID。***背景 DB 和连接 ID 成对使用,且对每个连接必
须是唯一的。
表格 13-59 MB_CLIENT 背景数据块:用户可访问静态变量
变量 数据类型 默认值 说明
Blocked_Proc_Tim
eout
Real 3.0 在 Modbus 客户端实例受阻后,移除该激活的实例前需等待的时间
(秒)。例如,当已发出客户端请求,但应用程序在彻底完成该请
求前停止执行该客户端功能时,就会出现这种情况。*大 S7-1200
限值是 55 秒。
MB_Unit_ID Word 255 Modbus 设备标识符
Modbus TCP 服务器通过其 IP 地址寻址。MB_UNIT_ID 参数不
用于 Modbus TCP 寻址。
MB_UNIT_ID 参数与 Modbus RTU 协议中的从站地址相对应。如果
Modbus TCP 服务器用于采用 Modbus RTU 协议的网关,
MB_UNIT_ID 可用于标识在串行网络上连接的从站设备。
MB_UNIT_ID 将用于将请求转发给正确的 Modbus RTU 从站地址。
某些 Modbus TCP 设备可能要求 MB_UNIT_ID 参数保持受限范围
内。
RCV_TIMEOUT Real 2.0 MB_CLIENT 等待服务器响应请求的时间(秒)。
已连接 Bool 0 指示与所分配服务器的连接是已接通还是已断开:1 = 接通,0 =
断开
在指定时间段内,服务器无响应。请检查与 Modbus 服务器的连
接。只有在尝试了组态的可重复尝试次数之后,才会报告该错
误。
如果“MB_CLIENT”指令在指定时间内没有收到*初传输事务 ID
(请参见静态变量 MB_TRANSACTION_ID)的应答,则输出该错误
代码。
8380 本地 - 接收到的 Modbus 帧格式错误或字节数过少。
8381 远程 01 功能代码不受支持。
8382 本地 - • 帧头中的 Modbus 帧长度与接收到的字节数不一致。
• 字节数与实际传送的字节数不一致(仅功能 1 到 4)。例如,
当“MB_CLIENT”请求奇数个字,但“MB_SERVER”始终发送偶数
个字时,将发生该状况。
• 收到的帧的起始地址与已经保存的起始地址不一致(功能 5、
6、15、16)。
• 字数与实际传送的字数不一致(功能 15 和 16)。
远程 03 接收到的 Modbus 帧长度无效。检查服务器端。
8383 本地 - • 指令版本 < V6.0:读/写数据错误或访问了 MB_DATA_PTR
(页 1049) 地址外的区域。
• 指令版本 >= V6.0:读/写数据出错或访问了 MB_DATA_PTR、
RD_MB_DATA_PTR 或 WR_MB_DATA_PTR 地址外的区域。
远程 02 读/写数据错误或访问服务器地址区域以外的位置
8384 本地 - • 接收到无效的异常代码。
• 接收到的数据值与*初由客户端发送的数据值不同(功能 5、6
和 8)。
• 接收到无效状态值(功能 11)
远程 03 功能 5 数据值错误
8385 本地 - • 诊断代码不支持。
• 接收到的子功能代码与*初由客户端发送的代码不同(功能
8)。
远程 03 诊断代码不支持
8386 本地 - 接收到的功能代码与*初发送的代码不一致。
8387 本地 - 服务器接收到的 Modbus TCP 帧协议 ID 不为“0MB_SERVER 应
答中的
错误代码
(B#16#)
描述
8388 本地 - Modbus 服务器发送的数据长度与所请求的数据长度不同。只有
使用 Modbus 功能 5、6、15 或 16 时,才会发生该错误。
* 在程序编辑器中,状态代码可显示为整数或十六进制值。有关切换显示格式的信息,请参见“另请参见”。
表格 13-61 MB_CLIENT 执行条件代码 1
STATUS
(W#16#)
MB_CLIENT 参数错误
7001 MB_CLIENT 正在等待 Modbus 服务器响应指定 TCP 端口处的连接或断开连接请求。仅在第一
次执行连接或断开操作时才返回此代码。
7002 MB_CLIENT 正在等待 Modbus 服务器响应指定 TCP 端口处的连接或断开连接请求。等待连接
或断开操作完成时,将针对任何后续执行返回此代码。
7003 断开操作已成功完成(仅在一个 PLC 扫描周期内有效)。
80C8 服务器在指定的时间内未响应。MB_CLIENT 必须在分配的时间内使用*初传送的事务 ID 接收
响应,否则将返回此错误。检查与 Modbus 服务器设备的连接。
尝试过重试操作(若适用)后,才返回此错误。
8188 参数 MB_MODE 的值无效。
8189 • 指令版本 < V6.0:参数 MB_DATA_ADDR 中的数据地址无效。
• 指令版本 >= V6.0:参数 MB_DATA_ADDR、RD_MB_DATA_ADDR 或 WR_MB_DATA_ADDR 中
的数据地址无效
818A • 指令版本 < V6.0:参数 MB_DATA_LEN 中的数据长度无效。
• 指令版本 >= V6.0:参数 MB_DATA_LEN、RD_MB_DATA_LEN 或 WR_MB_DATA_LEN 中的数
据长度无效
818B 指向 DATA_PTR 区的指针无效。可以是 MB_DATA_ADDRESS 与 MB_DATA_LEN 的组合。
818C 指针 DATA_PTR 指向未经优化的 DB 区(必须是未经优化的 DB 区或 M 存储区)
818D 一个或多个参数的值不是默认值,但未通过指定的 Modbus 功能使用。
示例:如果 MB_MODE 的值为 123,则 MB_DATA_ADDR 和 MB_DATA_LEN 的值必须为 0,且
MB_DATA_PTR 必须为空。如果 MB_MODE 的值不是 123,则所有以“RD_”或“WR_”开头的参数
的值都必须为 0 或为空。
8200 端口正忙于处理现有的 Modbus 请求。
8380 接收到的 Modbus 帧不正确或接收到的字节太少。分配的连接 ID 参数和用于先前请求的 ID 不同。只能有一个单个连接 ID 与每个 MB_CLIENT 背
景数据块配合使用。
如果从一个服务器接收到的 Modbus TCP 协议 ID 不是 0,该代码也可作为内部错误返回。
8388 Modbus 服务器返回一些和请求内容不同的数据。该代码仅适用于 Modbus 功能 15 或 16。
1 除了上面列出的 MB_CLIENT 错误外,也可以从底层传输块通信指令(TCON、TDISCON、TSEND 和 TRCV)返回
错误。
MB_SERVER(作为 Modbus TCP 服务器通过 PROFINET 进行通信)指令
表格 13-62 MB_SERVER 指令
LAD/FBD SCL 描述
"MB_SERVER_DB"(
DISCONNECT:=_bool_in_,
CONNECT:=_variant_in_,
NDR=>_bool_out_,
DR=>_bool_out_,
ERROR=>_bool_out_,
STATUS=>_word_out_,
MB_HOLD_REG:=_variant_inout_);
MB_SERVER 作为 Modbus TCP 服务器,
通过 S7-1200 CPU 上的 PROFINET 端口
进行通信。不需要额外的通信硬件模块。
MB_SERVER 可接收与 Modbus TCP 客户
端的连接请求、接收 Modbus 功能请求
并发送响应消息。
表格 13-63 参数的数据类型
参数和类型 数据类型 描述
DISConNECT IN Bool MB_SERVER 尝试与伙伴设备进行“被动”连接。也就是说,服务器被
动地侦听来自任何请求 IP 地址的 TCP 连接请求。
如果 DISConNECT = 0 且不存在连接,则可以启动被动连接。
如果 DISConNECT = 1 且存在连接,则启动断开操作。该参数允许程
序控制何时接受连接。每当启用此输入时,无法尝试其它操作。
ConNECT IN Variant 引用包含系统数据类型为“TCON_IP_v4”的连接参数的数据块结构。还
支持以下数据类型:TCON_IP_V4、TCON_QDN 和 TCON_QDN_SEC。
请参见“PROFINET 连接参数” (页 630)。
MB_HOLD_REG IN_OUT Variant 指向 MB_SERVER Modbus 保持寄存器的指针:保持寄存器必须是一个
未经优化的全局 DB 或 M 存储区地址。储存区用于保存允许 Modbus
客户端使用 Modbus 寄存器功能 3(读)、6(写)、16(写)和 23
(写/读)访问的数据。
据类型 描述
NDR OUT Bool 新数据就绪:0 = 没有新数据,1 = 表示 Modbus 客户端已写入新数据
DR OUT Bool 数据读取:0 = 没有读取数据,1 = 表示 Modbus 客户端已读取该数据。
ERROR OUT Bool MB_SERVER 执行因错误而结束后,ERROR 位将在一个扫描周期时间内
保持为 TRUE。STATUS 参数中的错误代码仅在 ERROR = TRUE 的一个
循环周期内有效。
STATUS OUT Word 执行条件代码
ConNECT 参数分配用于建立 PROFINET 连接的数据
必须使用全局数据块并存储所需的连接数据,才能在 ConNECT 参数中引用此 DB。
1. 创建新的全局 DB 或使用现有全局 DB 来存储 ConNECT 数据。可使用一个 DB 存储多个
TCON_IP_v4 数据结构。每个 Modbus TCP 客户端或服务器连接使用一个 TCON_IP_v4 数据结
构。可在 ConNECT 参数中引用连接数据。
2. 使用有帮助的名称对 DB 和静态变量进行命名。例如,将数据块命名为“Modbus 连接”,将
静态变量命名为“TCPpassive_1”(针对 Modbus TCP 服务器连接 1)。
3. 在 DB 编辑器的“数据类型”(Data Type) 列中为示例静态变量“TCPactive_1”分配系统数据类型
“TCON_IP_v4”。
4. 扩展 TCON_IP_v4 结构,从而可以修改连接参数,如下图所示。
5. 修改 MB_SERVER 连接的 TCON_IP_v4 结构数据。
6. 输入 MB_SEVER ConNECT 参数的 DB 结构引用。本示例中应为“Modbus 连接”.TCPpassive_1。修改各 MB_SERVER 连接的 TCON_IP_V4 DB 数据
• InterfaceID:在设备组态窗口中单击 CPU PROFINET 端口图像。单击“常规”
(General) 属性选项卡并使用该处显示的硬件标识符。
• ID:为该连接输入一个介于 1 和 4095 之间的唯一编号。使用底层 TCON、TDISCON、
TSEND 和 TRCV 指令建立 M