西门子销售WinCC软件经销商
PLC是什么意思?相信很多人处于大概知道是什么,但是又无法准确说出的阶段,作为专注于为企业提供数据采集和设备控制解决方案的众诚工业,今天和大家探讨一下。
而众诚工业还能根据用户需求,设计PLC控制程序,为客户提供PLC编程和上位机软件的定制化开发技术服务,满足用户的多种需求,比如,自主研发的洁净空调智能控制系统和通风排风智能控制系统就配置PLC,不仅具有报警和定时控制功能,还兼具可扩展性和兼容性,系统能被第三方系统集成。
以上PLC的基本介绍,相信大家对PLC也有一个初步的了解。PLC的型号、品牌不同,对应着其结构形式、性能、编程方式等等都有所差异,价格也各不相同,在挑选时候,建议先要明确自己的应用需求,比如具体的应用场景,希望实现的运动和控制功能,已经特殊的控制要求,这些将决定了PLC的选型和搭配组合。
简单地说,PLC就是一种小型的计算机,和我们常用的计算机不同的是,PLC是设备之间通过数字信号进行互动,而我们常用的计算机,是人和计算机的互动。
控制是PLC的核心功能,其控制类型主要分为以下几种1、开关量的开环控制。这是PLC*基本的控制功能,它能凭借其强大的逻辑运算能力,取代传统继电接触器的控制系统;
2、数据采集与监控。这是PLC非常必要的功能,否则它将无法完成现场控制;
3、数字量智能控制。PLC具有实现接收和输出高速脉冲的功能,近年来先进的PLC还开发了数字控制模块和新型运动单元模块,让工程师更加轻松地通过PLC实现数字量控制;
4、PLC能通过模拟量采集和调节温度、压力、速度等参数。
正因为PLC功能强大,且具有设计方便、重量体积小、能耗低、改造工作量小、通用性强、维护方便等易学易用的特点,深受工程师的欢迎,因此应用非常广泛,钢铁、石油、化工、纺织、交通、机械制造等等行业都能看到它的身影。
数据类型 描述
ERROR OUT Bool 上一请求因错误而终止后,ERROR 位将保持为 TRUE 一个扫
描周期时间。如果执行因错误而终止,则 STATUS 参数的错
误代码值仅在 ERROR = TRUE 的一个扫描周期内有效。
STATUS OUT Word 执行错误代码
Modbus 通信功能代码(1、2、4、5 和 15)可以在 CPU 的输入过程映像及输出过程映像中
直接读写位和字。对于这些功能代码,MB_HOLD_REG 参数必须定义为大于一个字节的数据
类型。下表给出了 Modbus 地址与 CPU 过程映像的映射示例。
表格 13-87 Modbus 地址到过程映像的映射
Modbus 功能 S7-1200
代码 功能 数据区 地址范围 数据区 CPU 地址
01 读位 输出 1 到 8192 输出过程映像 Q0.0 到 Q1023.7
02 读位 输入 10001 到 1819
2
输入过程映像 I0.0 到 I1023.7
04 读字 输入 30001 到 3051
2
输入过程映像 IW0 到 IW1022
05 写位 输出 1 到 8192 输出过程映像 Q0.0 到 Q1023.7
15 写位 输出 1 到 8192 输出过程映像 Q0.0 到 Q1023.7
Modbus 通信功能代码(3、6、16)使用 Modbus 保持寄存器,该寄存器可以是 M 存储区
地址范围或数据块。保持寄存器的类型由 Modbus_Slave 指令的 MB_HOLD_REG 参数指定。
说明
MB_HOLD_REG 数据块类型
Modbus 保持寄存器数据块必须允许直接(**)寻址和符号寻址。创建该数据块时,必须
选择“标准”(Standard) 访问属性。
自 Modbus_Slave 指令版本 V4.0 或更高版本起,可以启用数据块属性“优化块访问”
(Optimized block access)。只能在具有以下数据类型的优化存储器中使用单个元素或元素数
组:Bool、Byte、Char、Word、Int、DWord、Dint、Real、USInt、UInt、UDInt、SInt 或
WChar。描述
08 0000H 返回查询数据回送测试:
• 在 STEP 7 V15.1 版本之前,Modbus_Slave 将向 Modbus 主站回送接收到的
数据字。
• 自 STEP 7 V15.1 或更高版本起,Modbus_Slave 指令 V4.1 或更高版本会回
送接收到的一个或多个数据字。
08 000AH 清除通信事件计数器:Modbus_Slave 将清除用于 Modbus 功能 11 的通信事件
计数器。
11 获取通信事件计数器:Modbus_Slave 使用内部通信事件计数器来记录发送到
Modbus_Slave 的 Modbus 成功读取和写入请求次数。该计数器不会因功能 8、
功能 11 或广播请求而增加。同样也不会因任何导致通信错误(例如,奇偶校
验错误或 CRC 错误)的请求而增加。
Modbus_Slave 指令支持来自任何 Modbus 主站的广播写请求,只要该请求是用于访问有效
地址的请求即可。对于广播不支持的功能代码,Modbus_Slave 将生成错误代码“0x8188通信规则
• 必须先执行 Modbus_Comm_Load 组态端口,然后 Modbus_Slave 指令才能通过该端口
通信。
• 如果某个端口作为从站响应 Modbus_Master,则请勿使用 Modbus_Master 指令对该端
口进行编程。
• 对于给定端口,只能使用一个 Modbus_Slave 实例,否则将出现不确定的行为。
• Modbus 指令不使用通信中断事件来控制通信过程。用户程序必须通过轮询
Modbus_Slave 指令以了解传送和接收的完成情况来控制通信过程。
• Modbus_Slave 指令必须以一定的速率定期执行,以便能够及时响应来自 Modbus_Master
的进入请求。建议每次扫描时都从程序循环 OB 执行 Modbus_Slave。也可以从循环中断
OB 执行 Modbus_Slave,但并不建议这么做,因为中断例程的延时过长可能会暂时阻止
其它中断例程的执行。
Modbus 定时信号
必须周期性执行 Modbus_Slave,才能接收来自 Modbus_Master 的每个请求并随之按要求响
应。Modbus_Slave 的执行频率取决于 Modbus_Master 的响应超时时间。下图对此进行了说
明。
庠⫴
朝枽ὓⲀ䱏㜟朝
◶⾽
〟愈㜟朝
ῷ䰂⓺愪
◶⾽
庮㜟㜟朝
庠⫴
朝枽
ὤ䰂⓺愪
$'5 )& 'DWD &5&
&5&
$'5
$'5 )& 'DWD &5&
响应超时时间 RESP_TO 是 Modbus_Master 等待 Modbus_Slave 开始响应的时间。该时间段
不是由 Modbus 协议定义的,而是属于每个 Modbus_Master 的一个参数。必须基于用户
Modbus_Master 的具体参数确定 Modbus_Slave 的执行频率(相邻两次执行之间的时间)。
在 Modbus_Master 的响应超时时间内至少应执行两次 Modbus_Slav下表显示了可在程序中使用的 Modbus_Slave 的背景数据块中的公共静态变量。
表格 13-90 Modbus_Slave 背景数据块静态变量
变量 数据类型 默认值 描述
HR@Start@Offset Word 0 分配 Modbus 保持寄存器的起始地址(默认值 = 0)
Extended_Addressi
ng
Bool FALSE 组态单字节或双字节从站寻址:
• FALSE = 单字节地址
• TRUE = 双字节地址
Request_Count Word 0 该从站接收到的所有请求的数量
Slave_Message_Co
unt
Word 0 该特定从站接收到的请求的数量
Bad_CRC_Count Word 0 接收到的具有 CRC 错误的请求的数量
Broadcast_Count Word 0 接收到的广播请求的数量
Exception_Count Word 0 需要通过向主站返回异常来确认的 Modbus 特定错误
Success_Count Word 0 该特定从站接收到的没有协议错误的请求数量
MB_DB MB_base - Modbus_Comm_Load 指令的 MB_DB 参数必须连接
Modbus_Slave 指令的 MB_DB 参数。
QB_Start UInt 0 CPU 可写入的输出字节的起始地址(QB0 至 QB65535)
QB_Count UInt 65535 远程设备可以写入的字节数。如果 QB_Count = 0,则远程设
备无法写入输出。
示例:要想只允许 QB10 到 QB17 可写入,则 QB_Start = 10
且 QB_Count = 8。
QB_Read_Start UInt 0 CPU 可读取的输出字节的起始地址(QB0 至 QB65535)
QB_Read_Count UInt 65535 远程设备可以读取的输出字节数。如果 QB_Count = 0,则远
程设备无法读取输出。示例:要想只允许 QB10 到 QB17 可读
取,则 QB_Start = 10 且 QB_Count = 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。
用户程序可以将数据写入控制 Modbus 服务器操作和以下变量中:Modbus_Slave 指令数据块 (DB) 变量可用性的版本要求如下:
表格 13-91 Modbus_Slave 指令数据块 (DB) 变量可用性的版本要求:指令、TIA Portal 和
S7‑1200 CPU
Modbus_Slave 指令版本 TIA Portal 的版
本
S7-1200 CPU 固件
(FW) 版本
数据块变量
3.0 V14 SP1 CPU 固件 V4.0 或更高
版本
QB_Start
QB_Count
4.0 或以上版本 V15 或以上版本 CPU 固件 V4.2 或更高
版本
QB_Start
QB_Count
QB_Read_Start
QB_Read_Count
IB_Read_Start
IB_Read_Count
HR@Start@Offset
Modbus 保持寄存器地址从 40001 或 400001 开始。这些地址与保持寄存器的 PLC 存储器
起始地址对应。不过,可以组态“HR@Start@Offset”变量,将 Modbus 保持寄存器的起始地址
定义为除 40001 或 400001 之外的其它值。例如,如果保持寄存器被组态为起始于 MW100 并且长度为 100 个字。偏移量 20 可指定保
持寄存器的起始地址为 40021 而不是 40001。低于 40021 和高于 400119 的任何地址都将
导致寻址错误。
表格 13-92 Modbus 保持寄存器寻址示例
HR@Start@Offset 地址 *小值 *大值
0 Modbus 地址(字) 40001 40099
S7-1200 地址 MW100 MW298
20 Modbus 地址(字) 40021 40119
S7-1200 地址 MW100 MW298
HR@Start@Offset 是一个字值,用于指定 Modbus 保持寄存器的起始地址,存储在
Modbus_Slave 背景数据块中。将 Modbus_Slave 放入程序后,可利用参数助手下拉列表设
置该公共静态变量值。
例如,将 Modbus_Slave 放入 LAD 程序段后,可以切换到先前的程序段,分配
HR@Start@Offset 值。该值必须在执行 Modbus_Slave 前分配。
使用默认 DB 名称输入 Modbus 从站变量:
1. 将光标放在参数字段中,然后输入 m 字符。
2. 从下拉列表中选择“Modbus_Slave_DB”。
3. 将光标放在 DB 名称的右侧(引号字符的后
面),然后输入句点字符。
4. 从下拉列表中选择
“Modbus@Slave@DB.HR@Start@Offset”。
Extended_Addressing
Extended_Addressing 变量的访问方式与上述的 HR@Start@Offset 参考相似,只是
Extended_Addressing 变量是布尔值。布尔值必须通过输出线圈(而非 MOVE 块)写入访问数据块 (DB) 中的数据区域,而不是直接访问 Modbus 地址
可以在全局 DB“属性”(Attributes) 属性页面中访问 DB 中的数据区域。必须取消选中“仅存储
在装载存储器中”(only store in load memory) 和“优化块访问”(Optimized block access) 复
选框。
如果 Modbus 请求到达时尚未为相应功能代码的 Modbus 数据类型定义数据区域,则
Modbus_Slave 指令会按之前的指令版本处理请求:直接访问过程映像和保持寄存器。
如果已为功能代码的 Modbus 数据类型定义了数据区域,则 Modbus_Slave 指令会对该数据
区域进行读写操作。具体是读操作还是写操作取决于作业类型。
说明
如果组态了数据区域,则 Modbus_Slave 指令会忽略与数据区域的 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