西门子销售断路器经销商
PLC是什么意思?相信很多人处于大概知道是什么,又无法准确说出的阶段,作为专注于为企业提供数据采集和设备控制解决方案的众诚工业,今天和大家探讨一下。
而众诚工业还能根据用户需求,设计PLC控制程序,为客户提供PLC编程和上位机软件的定制化开发技术服务,满足用户的多种需求,比如,自主研发的洁净空调智能控制系统和通风排风智能控制系统就配置PLC,不仅具有报警和定时控制功能,还兼具可扩展性和兼容性,系统能被第三方系统集成。
以上PLC的基本介绍,相信大家对PLC也有一个初步的了解。PLC的型号、品牌不同,对应着其结构形式、性能、编程方式等等都有所差异,价格也各不相同,在挑选时候,建议先要明确自己的应用需求,比如具体的应用场景,希望实现的运动和控制功能,已经特殊的控制要求,这些将决定了PLC的选型和搭配组合。
简单地说,PLC就是一种小型的计算机,和我们常用的计算机不同的是,PLC是设备之间通过数字信号进行互动,而我们常用的计算机,是人和计算机的互动。
控制是PLC的核心功能,其控制类型主要分为以下几种1、开关量的开环控制。这是PLC*基本的控制功能,它能凭借其强大的逻辑运算能力,取代传统继电接触器的控制系统;
2、数据采集与监控。这是PLC非常必要的功能,否则它将无法完成现场控制;
3、数字量智能控制。PLC具有实现接收和输出高速脉冲的功能,近年来先进的PLC还开发了数字控制模块和新型运动单元模块,让工程师更加轻松地通过PLC实现数字量控制;
4、PLC能通过模拟量采集和调节温度、压力、速度等参数。
正因为PLC功能强大,且具有设计方便、重量体积小、能耗低、改造工作量小、通用性强、维护方便等易学易用的特点,深受工程师的欢迎,应用非常广泛,钢铁、石油、化工、纺织、交通、机械制造等等行业都能看到它的身影。
进入的 Modbus 消息功能代码(3、6 和 16)在 Modbus 保持寄存器中读取/写入字,该寄存
器可以在 M 存储区或数据块中。保持寄存器的类型由 MB_HOLD_REG 参数指定。
说明
MB_HOLD_REG 参数分配
定义为字数组、整数、宽字符、无符号整数、字节、短整数、无符号短整数、字符、双字、
双整数、无符号双整数或实数的 Modbus 保持寄存器可以存放在任何存储区中。
定义为结构的 Modbus 保持寄存器必须存放在未经优化的 DB 中。
对于 M 存储区中的 Modbus 保持寄存器,使用 Any 指针格式。其格式为 P#“位地址”“数
据类型”“长度”。例如 P#M1000.0 WORD 500。
下表给出了 Modbus 地址到保持寄存器的映射示例,这种映射用于 Modbus 功能代码 03(读
取字)、06(写入字)和 16(写入字)。DB 地址的实际上限取决于每种 CPU 型号的*大
工作存储器限值和 M 存储器限值。
表格 13-65 Modbus 地址到 CPU 存储器地址的映射示例
Modbus 地址 MB_HOLD_REG 参数示例Modbus 应用协议标头是每个 Modbus TCP 消息的前 7 个字节。此标头包含事务标识符、协
议标识符、长度和设备标识符。MB_SERVER 指令响应消息包含与 Modbus 请求消息中接收
的事务标识符、协议标识符和设备标识符相同的值。“长度”(Length) 字段由 MB_SERVER 指
令算得。
多个服务器连接
可以创建多个服务器连接。单个 PLC 可与多个 Modbus TCP 客户端建立并发连接。
Modbus TCP 服务器支持的并发连接数*多为 PLC 允许的开放式用户通信*大连接数。PLC 的
连接总数(包括 Modbus TCP 客户端和服务器)不得超过支持的开放式用户通信*大连接数。
可在客户端和服务器类型的连接之间共享 Modbus TCP 连接单独的并发服务器连接必须遵循以下规则:
• 各 MB_SERVER 连接必须使用一个唯一的背景数据块。
• 必须为各 MB_SERVER 连接分配一个唯一的 IP 端口号。每个端口只能用于 1 个连接。
• 必须为各 MB_SERVER 连接分配一个唯一的连接 ID。
• 必须为每个连接(带有各自的背景数据块)单独调用 MB_SERVER。
连接 ID 对于每个单独的连接必须是唯一的。每个单独的背景 DB 必须使用单一的连接 ID。背
景 DB 和连接 ID 成对使用,且对每个连接必须是唯一的。
表格 13-66 Modbus 诊断功能代码
MB_SERVER Modbus 诊断功能
代码 子功能 描述
08 0x0000 返回查询数据回送测试:MB_SERVER 将向 Modbus 客户端回送接收到的数据字。
08 0x000A 清除通信事件计数器:MB_SEVER 将清除用于 Modbus 功能 11 的通信事件计数器。
11 获取通信事件计数器:MB_SERVER 使用内部通信事件计数器来记录发送到 Modbus 服
务器的 Modbus 成功读取和写入请求次数。该计数器不会因任何功能 8、功能 11 请求
或任何导致通信错误的请求而递增。
广播功能不能用于 Modbus TCP,因为在任何时刻仅存在一个客户端-服务器连接。
MB_SERVER 指令数据块 (DB) 变量
下表给出了存储在 MB_SERVER 背景数据块中的公共静态变量(可在用户程序中使用)。
表格 13-67 MB_SERVER 公共静态变量
变量 数据类
型
默认值 描述
HR@Start@Offset Word 0 指定 Modbus 保持寄存器的起始地址
Re Word 0 该服务器接收到的所有请求的数量。
Server_Message_Coun
t
Word 0 该特定服务器接收到的请求的数量。
Xmt_Rcv_Count Word 0 出现错误的传输或接收的数量。如果接收到一条无效的
Modbus 消息,该值加 1。
Exception_Count Word 0 需要返回例外的 Modbus 特定错误数
Success_Count Word 0 该特定服务器接收到的且无协议错误的请求数指示与所分配客户端的连接是已接通还是已断开:1 = 接通,0 =
断开
UInt 0 CPU 可写入的输出字节的起始地址(QB0 至 )
UInt 65535 远程设备可以写入的字节数。如果 = 0,则远程设备
无法写入输出。
示例:要想只允许 QB10 到 QB17 可写入,则 = 10 且
= 8。
UInt 0 CPU 可读取的输出字节的起始地址(QB0 至 )
UInt 65535 远程设备可以读取的输出字节数。如果 = 0,则远程
设备无法读取输出。示例:要想只允许 QB10 到 QB17 可读取,
则 = 10 且 = 8。
IB_Read_Start UInt 0 CPU 可读取的输入字节的起始地址(IB0 至 IB65535)
IB_Read_Count UInt 65535 远程设备可以读取的输入字节数。如果 IB_Count = 0,则远程设
备无法读取输入。示例:要想只允许 IB10 到 IB17 可读取,则
IB_Start = 10 且 IB_Count = 8。
NDR_immediate Bool FALSE 与参数 NDR(新数据就绪)含义相同。MB_SERVER 在处理
Modbus TCP 写请求的同一调用中更新“NDR_immediate”。
DR_immediate Bool FALSE 与参数 DR(数据读取)含义相同。MB_SERVER 在处理 Modbus
TCP 写请求的同一调用中更新“DR_immediate”。
用户程序可以将数据写入控制 Modbus 服务器操作和以下变量中:MB_SERVER 指令数据块 (DB) 变量可用性的版本要求如下:
表格 13-68 MB_SERVER 指令数据块 (DB) 变量可用性的版本要求:指令、TIA Portal 和 S7‑1200
CPU
MB_SERVER 指令版本 TIA Portal 的版本 S7-1200 CPU 固件
(FW) 版本
数据块变量
4.2 V14 SP1 CPU 固件 V4.0 或更高
版本
5.0 或以上版本 V15 或以上版本 CPU 固件 V4.2 或更高
版本
IB_Read_Start
IB_Read_Count
NDR_immediate
DR_immediate
HR@Start@Offset
Modbus 保持寄存器地址从 40001 开始。这些地址与保持寄存器的 PLC 存储器起始地址对应。
可以使用“HR@Start@Offset”变量将 Modbus 保持寄存器的起始地址定义为除 40001 外
的其它数字。
例如,如果保持寄存器起始于 MW100 且长度为 100 个字,偏移量 20 可指定保持寄存器的
起始地址为 40021 而不是 40001。小于 40021 或大于 40119 的任何地址都将导致寻址错误。
表格 13-69 Modbus 保持寄存器寻址示例
HR@Start@Offset 地址 *小值 *大值
0 Modbus 地址(字) S7-1200 地址 MW100 MW298
20 Modbus 地址(字) S7-1200 地址 MW100 MW298
HR@Start@Offset 是 MB_SERVER 背景数据块中的一个字数据,用于分配 Modbus 保持寄存器
的起始地址。将 MB_SERVER 放入程序后,可利用参数助手下拉列表设置该公共静态变量。例如,将 MB_SERVER 放入 LAD 程序段后,可以切换到上一程序段,并分配HR@Start@Offset。
必须在执行 MB_SERVER 前分配起始地址。
使用默认 DB 名称
输入 Modbus 服务器变量:
1. 将光标放在参数字段中,输入 m 字符。
2. 从 DB 名称下拉列表中选择
“MB_SERVER_DB”。
3. 从 DB 变量下拉列表中选择
“MB@SERVER@DB.HR@Start@Offset”。
访问数据块 (DB) 中的数据区域,而不是直接访问 Modbus 地址
可以访问 DB 中的数据区域。在全局 DB“属性”(Attributes) 属性页中,必须取消选中“仅存储
在装载存储器中”(only store in load memory) 和“优化块访问”(Optimized block access) 复
选框。
如果 Modbus 请求到达时尚未为相应功能代码的 Modbus 数据类型定义数据区域,则
MB_SERVER 指令会按之前的指令版本处理请求:直接访问过程映像和保持寄存器。
如果已为功能代码的 Modbus 数据类型定义了数据区域,则 MB_SERVER 指令会对该数据区
域进行读写操作。具体是读操作还是写操作取决于作业类型。
说明
如果组态了数据区域,则 MB_SERVER 指令会忽略与数据区域的 data_type 对应的背景数据
块中,静态变量组态的偏移或范围。这些偏移和范围仅适用于 MB_HOLD_REG 所引用的过
程映像或存储器。数据区域的启动和长度参数会提供自身定义偏移和范围的方法
单个 Modbus 请求只能对一个数据区域进行读写操作。如果要读取覆盖多个数据区域的保持
寄存器,则需要多个 Modbus 请求。
数据区域的定义规则如下:
• 用户*多可在不同数据块中定义八个数据区域,每个数据块只能包含一个数据区域。单个
MODBUS 请求只能对恰好一个数据区域进行读写操作。每个数据区域对应于一个
MODBUS 地址区域。可以在实例数据块的“Data_Area_Array”静态变量中定义数据区域。
• 如果要使用的数据区域不到八个,则所需数据区域必须紧密相连,没有间隙。在处理过
程中,数据区域中的第一个空白条目会终止数据区域搜索。例如,如果已定义字段元素
1、2、4 和 5,由于字段元素 3 留空,则“Data_Area_Array”只会识别字段元素 1 和 2。Data_Area_Array 字段包含八个元素:Data_Area_Array[1] 到 Data_Area_Array[8]
• 每个字段元素 Data_Area_Array[x](其中 1 <= x <= 8)都是 MB_DataArea 类型的 UDT,
结构如下:
参数 数据类型 含义
data_ type UInt 映射到此数据区域的 MODBUS 数据类型的标识符:
• 0:空字段元素或未使用数据区域的标识符。此时,数据
块、起始和长度的值不相关。
• 1:过程映像输出(与功能代码 1、5 和 15 一起使用)
• 2:过程映像输入(与功能代码 2 一起使用)
• 3:保持寄存器(与功能代码 3、6 和 16 一起使用)
• 4:输入寄存器(与功能代码 4 一起使用)
注:如果已定义 MODBUS 数据类型的数据区域,则指令
MB_SERVER 不能再直接访问此 MODBUS 数据类型。如果该
数据类型的 MODBUS 请求地址与定义的数据区域不对应,则
STATUS 中会返回值 W#16#8383。
db UInt MODBUS 寄存器或后续定义的位所映射的目标数据块的编号
数据块编号在数据区域中必须是唯一的。不得在多个数据区
域中定义相同的数据块编号。
在全局 DB“属性”(Attributes) 属性页中,必须取消选中“仅存
储在装载存储器中”(only store in load memory) 和“优化块
访问”(Optimized block access) 复选框。
数据区域也是从数据块的字节地址 0 开始。
允许值:1 到 60999
起始 UInt 映射到数据块中的首个 MODBUS 地址(从地址 0.0 开始)
允许值:0 到 65535
长度 UInt 位数(对于 data_type 的值 1 和 2)或寄存器数量(对于
data_type 的值 3 和 4)。
相同 MODBUS 数据类据区域定义示例:
• 第一个示例:data_type = 3,db = 1,start = 10,length = 6
CPU 将保持寄存器 (data_type = 3) 映射到数据块 1 (db = 1),将 Modbus 地址 10 (start
= 10) 置于数据字 0,将*后一个有效 Modbus 地址 15 (length = 6) 置于数据字 5。
• 第二个示例:data_type = 2,db = 15,start = 1700,length = 112
CPU 将输入 (data_type = 2) 映射到数据块 15 (db = 15),将 Modbus 地址 1700 (start =
1700) 置于数据字 0,将*后一个有效 Modbus 地址 1811 (length = 112) 置于数据字
111。
条件代码
表格 13-70 MB_SERVER 执行条件代码 1
STATUS
(W#16#)
发送到 Modbus
服务器的响应代
码 (B#16#)
Modbus 协议错误
7001 MB_SERVER 正在等待 Modbus 客户端连接到指定的 TCP 端口。仅在第一次执行
连接或断开操作时才返回此代码。
7002 MB_SERVER 正在等待 Modbus 客户端连接到指定的 TCP 端口。等待完成连接或
断开操作时,将针对任何后续执行返回此代码。
7003 断开操作已成功完成(仅在一个 PLC 扫描周期内有效)。
8187 MB_HOLD_REG 无效,可能指向优化的 DB 或小于 2 个字节的区域。
818C 指针 MB_HOLD_REG 指向未经优化的 DB 区(必须是未经优化的全局 DB 区或 M
存储区)或受阻过程的超时时间超过 55 秒限值。(仅适用于 S7-1200)
8381 01 不支持此功能代码
8382 03 数据长度错误:
• 接收到的 Modbus 帧长度无效。
• Modbus 帧头中输入的帧长度与实际接收到的字节数不一致。
• Modbus 帧头中输入的字节数与实际接收到的字节数不一致(功能 15 和
16)。
8383 02 数据地址错误或访问的数据超出 MB_HOLD_REG 地址区的界限
不支持该数据诊断代码(功能代码 08)
8389 数据区域定义无效:
• data_type 值无效
• 数据块编号无效或不存在:
– db 值无效
– 数据块编号不存在
– 数据块编号已由另一个数据区域使用
– 数据块具有优化访问权限
– 数据块不在工作存储器中
• 长度值无效
• 属于同一 MODBUS 数据类型的 MODBUS 地址范围重叠
1 除了上面列出的 MB_SERVER 错误外,也可以从底层传输块通信指令(TCON、TDISCON、
TSEND 和 TRCV)返回错误。ED_CLIENT(作为 Modbus TCP 客户端通过 PROFINET 进行冗余通信)
使用该指令可在 S7-1200 CPU 与支持 Modbus TCP 协议的设备之间建立连接。
表格 13-71 MB_RED_CLIENT 指令
LAD/FBD SCL 描述
"MB_RED_CLIENT_DB"(
REG_KEY:=_string_in_,
USE_ALL_CONN:=_bool_in_
REQ:=_bool_in_,
DISCONNECT:=_bool_in_,
MB_MODE:=_usint_in_,
MB_DATA_ADDR:=_udint_in_,
MB_DATA_LEN:=_uint_in_,
LICENSED=>_bool_out_
IDENT_CODE=>_string_out_
DONE=>_bool_out_,
BUSY=>_bool_out_,
ERROR=>_bool_out_,
STATUS_0A=>_word_out_,
STATUS_1A=>_word_out_,
STATUS_0B=>_word_out_,
STATUS_1B=>_word_out_,
RED_ERR_S7=>_bool_out_,
RED_ERR_DEV=>_bool_out_,
TOT_COM_ERR=>_bool_out_,
MB_DATA_PTR:=_variant_inout_);
MB_RED_CLIENT 指令作为
Modbus TCP 客户端通过
PROFINET 连接进行通信。
可使用指令 MB_RED_CLIENT 在客
户端和服务器之间建立冗余连接、
发送 Modbus 请求、接收响应并通
过 Modbus TCP 客户端控制连接终
止。针对 Modbus TCP 服务器的 Modbus 查询
REQ 为电平控制参数。这意味着只要输入置位 (REQ = TRUE),指
令就会发送通信请求。如果连接尚未建立,此时便会建立,且随
后立即发送 Modbus 帧。
在服务器响应或输出错误消息之前,对输入参数的更改不会生效。
如果在 Modbus 请求期间设置了参数 REQ,此后将不会进行
任何其它传输。
DISConNECT IN Bool 借助该参数,可以控制 Modbus 服务器连接的建立和终止:
• 0:与通过 ConNECT 参数组态的连接伙伴(请参见 ConNECT
参数)建立通信连接。
• 1:断开通信连接。在终止连接的过程中,不执行任何其它功
能。成功终止连接后,STATUS_x 参数将输出值 0003。
MB_MODE 2
IN USInt 选择 Modbus 请求模式(读取、写入或诊断)或直接选择
Modbus 功能
MB_DATA_ADDR 2
IN UDInt 取决于 MB_MODE 的 Modbus 地址
MB_DATA_LEN IN UInt 数据长度:数据访问的位数或寄存器数
MB_DATA_PTR 2
IN_OUT Variant 指向待从 Modbus 服务器接收的数据或待发送到 Modbus 服务器
的数据所在数据缓冲区的指针。
LICENSED 1 OUT Bool • 0:指令未获授权
• 1:指令已获授权
IDENT_CODE 1 OUT STRING[18
]
授权标识。使用此字符串申请 REG_KEY 注册码。
DONE OUT Bool 如果激活的 Modbus 作业在至少一个连接上成功完成,则输出参
数 DONE 中的该位将立即置“1”。
BUSY OUT Bool • 0:无正在进行的 Modbus 请求
• 1:正在处理 Modbus 请求
在建立和终止连接期间,输出参数 BUSY 不会置位。
ERROR OUT Bool • 0:无错误
• 1:激活的 Modbus 作业在任何组态的连接上都不能成功传
输。出错原因由参数 STATUS_x 指示。
STATUS_0A 3 OUT Word 连接 0A 上指令的详细状态信息。