西门子销售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 <= x <= 8)都是 MB_DataArea 类型的 UDT, 结构如下: 参数 数据类型 含义 data_ type UInt 映射到此数据区域的 MODBUS 数据类型的标识符: • 0:空字段元素或未使用数据区域的标识符。此时,数据 块、起始和长度的值不相关。 • 1:过程映像输出(与功能代码 1、5 和 15 一起使用) • 2:过程映像输入(与功能代码 2 一起使用) • 3:保持寄存器(与功能代码 3、6 和 16 一起使用) • 4:输入寄存器(与功能代码 4 一起使用) 注:如果已定义 MODBUS 数据类型的数据区域,则指令 Modbus_Slave 不能再直接访问此 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 数据类型的 MODBUS 地址区域不得重叠。 允许值:1 到 65535数据区域定义示例: • 第一个示例: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-95 Modbus_Slave 执行条件代码(通信和组态错误)1 STATUS (W#16#) 描述 80D1 接收方发出了暂停主动传输的流控制请求并且在指定的等待时间内未重新激活该传 输。 在硬件流控制期间,如果接收方在指定的等待时间内没有声明 CTS,也会产生该错 误。 80D2 传送请求中止,因为没有从 DCE 收到任何 DSR 信号。 80E0 因接收缓冲区已满,消息被终止。 80E1 因出现奇偶校验错误,消息被终止。 80E2 因组帧错误,消息被终止。 80E3 因出现超限错误,消息被终止。 80E4 因指定长度超出总缓冲区大小,消息被终止。 8180 无效端口 ID 值或 Modbus_Comm_Load 指令出错 8186 Modbus 站地址无效 8187 指向 MB_HOLD_REG DB 的指针无效:区域太小 818C MB_HOLD_REG 指针无效。数据区域必须是以下之一: • 典型数据块 • 符号或保持数据块中基本数据类型的数组RC 错误 8381 01 不支持功能代码或在广播内不支持 8382 03 数据长度错误 8383 02 数据地址错误或地址超出 DATA_PTR 区的有效范围 8384 03 数据值错误 8385 03 不支持此数据诊断代码值(功能代码 08) 8389 数据区域定义无效: • data_type 值无效 • 数据块编号无效或不存在: – db 值无效 – 数据块编号不存在 – 数据块编号已由另一个数据区域使用 – 数据块具有优化访问权限 – 数据块不在工作存储器中 • 长度值无效 • 属于同一 MODBUS 数据类型的 MODBUS 地址范围 重叠 1 除了上述列出的 Modbus_Slave 错误,还可能返回底层 PtP 通信指令的错误。 说明 设置 PROFIBUS 通信的*大记录长度 在使用 CM1243-5 PROFIBUS 主站模块控制使用 RS232、RS422 或 RS485 点对点模块的 ET 200SP 或 ET 200MP PROFIBUS 设备时,需要按如下规定将“max_record_len”数据块变量 明确设置为 240: 运行 Modbus_Comm_Load 后,在背景数据块的 Send_P2P 部分(例如, "Modbus_Slave_DB".Send_P2P.max_record_len)将“max_record_len”设为 240。 只有 PROFIBUS 通信需要明确分配 max_record_len ;Profinet 通信已经使用有效的