恭喜,你发布的帖子
发布于 2025-06-05 17:28:49
4楼
5、编程使用
5.1 数据类型
5.1.1 基本数据类型
基本数据类型:包括位、位序列、整数、浮点数、日期时间。此外字符也属于基本数据类型。
此外 BCD 码虽然不属于数据类型,但也是一种数字表示方式。
5.1.2 char和string
一、char 和 string 的定义:
1、数据类型为 char (Character) 的变量长度为 8 bit 位,占用1个 byte 的内存。char 数据类型将单个字符存储为 ASCII 编码形式。
通常是指计算机中使用的字母、数字和符号,包括:1、2、3、A、B、C、常见符号等。每个字符占用空间为1字节。
2、数据类型为 string 的操作数可存储多个字符,最多可包括 254 个字符。字符串中的第一个字节为总长度,第二个字节为有效字符数量。
字符串(string)在存储上类似字符的数组,所以它每一个元素都是可以提取的字符,如:"abcdefg"叫字符串,而其中的每个元素叫字符。
二、char 和 string 在西门子 PLC 中的格式
例如,在 PLC 中创建一个 DB 块,并将属性设置为标准 DB 块,在 DB1 块中创建如下的字符串和字符,并赋予起始值。
5.1.3 wchar和wstring
一、wchar 和 wstring 的定义:
1、数据类型为 wchar(宽字符)的变量长度为 16 位,占用2个 byte 的内存。 wchar 数据类型将扩展字符集中的单个字符保存为 UFT-16 编码形式。
2、数据类型为 wstring (宽字符串)的操作数用于在一个字符串中存储多个数据类型为 wchar 的 Unicode 字符。如果未指定长度,则字符串的长度为预置的 254 个字。
Unicode 是国际标准字符集,可译为万国码或统一码等,包含中日韩越汉字和世界上绝大多数语言文字。
如需了解 Unicode 码,请查看下面链接:Unicode码
二、wchar 和 wstring 在西门子 PLC 中的格式
本节以汉字为例说明汉字在西门子 PLC 中的格式。
例如,在 PLC 中创建一个 DB 块,并将属性设置为标准 DB 块,在 DB1 块中创建如下的汉字字符串和汉字字符,并赋予起始值。
5.2 OB 组织块
5.2.1 OB组织块介绍
1. S7-1500支持的错误处理OB
https://support.industry.siemens.com/cs/cn/zh/view/79030417
组织块是操作系统和用户程序之间的接口。OB 用于执行具体的程序:
1)在 CPU 启动时;
2)在一个循环或延时时间到达时;
3)当发生硬件中断时;
4)当发生故障时;
5)组织块根据其优先级执行。
5.2.2 程序循环组织块
程序循环 OB
一、 程序循环 OB 的功能
程序循环 OB 在 CPU 处于 RUN 模式时,周期性地循环执行。可在程序循环 OB 中放置控制程序的指令或调用其它功能块(FC 或 FB)。主程序(Main)为程序循环 OB ,要启动程序执行,项目中至少有一个程序循环 OB 。操作系统每个周期调用该程序循环 OB 一次,从而启动用户程序的执行。
S7-1500 允许使用多个程序循环 OB ,按 OB 的编号顺序执行。OB1 是默认设置,其它程序循环 OB 的编号必须大于或等于123。程序循环 OB 的优先级为1,可被高优先级的组织块中断;程序循环执行一次需要的时间即为程序的循环扫描周期时间。最长循环时间缺省设置为150ms。如果您的程序超过了最长循环时间,操作系统将调用 OB80(时间故障OB );如果 OB80 不存在,则 CPU 停机。
5.2.3 延时中断组织块
● 延时中断 OB 的功能
延时中断 OB 在经过一段指定的时间延时后,才执行相应的 OB 中的程序。
S7-1500 最多支持 20 个延时中断 OB ,通过调用“SRT_DINT”指令启动延时中断 OB 。在使用“SRT_DINT”指令编程时,需要提供 OB 号、延时时间,当到达设定的延时时间,操作系统将启动相应的延时中断 OB ;尚未启动的延时中断 OB 也可以通过“CAN_DINT”指令取消执行,同时还可以使用“QRY_DINT”指令查询延时中断的状态。延时中断 OB 的编号必须为20~23,或大于、等于123。
5.2.4 循环中断组织块
● 循环中断 OB 的功能
循环中断 OB 在经过一段固定的时间间隔后执行相应的中断 OB 中的程序。
S7-1500 最多支持 20 个循环中断 OB ,在创建循环中断 OB 时设定固定的间隔扫描时间。在 CPU 运行期间,可以使用“SET_CINT”指令重新设置循环中断的间隔扫描时间、相移时间;同时还可以使用“QRY_CINT”指令查询循环中断的状态。循环中断 OB 的编号必须为30~38,或大于、等于123。
5.2.5 硬件中断组织块
● 硬件中断 OB 的功能
硬件中断 OB 在发生相关硬件事件时执行,可以快速的响应并执行硬件中断 OB 中的程序(例如立即停止某些关键设备)。
硬件中断事件包括内置数字输入端的上升沿和下降沿事件以及 HSC(高速计数器)事件。当发生硬件中断事件,硬件中断 OB 将中断正常的循环程序而优先执行。S7-1200可以在硬件配置的属性中预先定义硬件中断事件,一个硬件中断事件只允许对应一个硬件中断 OB ,而一个硬件中断 OB 可以分配给多个硬件中断事件。在 CPU 运行期间,可使用“ATTACH”附加指令和“DETACH”分离指令对中断事件重新分配。硬件中断 OB 的编号必须为40~47,或大于、等于123。
5.2.6 时间错误组织块
● 时间错误 OB80 的功能
当 CPU 中的程序执行时间超过最大循环时间或者发生时间错误事件(例如,循环中断 OB 仍在执行前一次调用时,该循环中断 OB 的启动事件再次发生)时,将触发时间错误中断优先执行 OB80 。如果程序中没有创建OB80,CPU 将进入停止模式。如果程序中已创建OB80,但是在同一次循环内程序执行超出设定的最大循环时间两次,CPU 也将进入停止模式。
5.2.7 诊断错误组织块
● 诊断错误 OB82 的功能
S7-1500支持诊断错误中断,可以为具有诊断功能的模块启用诊断错误中断功能来检测模块状态。
OB82 时唯一支持诊断错误事件的 OB ,出现故障(进入事件),故障解除(离开事件)均会触发诊断中断 OB82 。当模块检测到故障并且在软件中使能了诊断错误中断时,操作系统将启动诊断错误中断,诊断错误中断 OB82 将中断正常的循环程序优先执行。此时无论程序中有没有诊断中断 OB82,CPU 都会保持 RUN 模式,同时 CPU 的 ERROR 指示灯闪烁。如果希望 CPU 在接收到该类型的错误时进入 STOP 模式,可以在 OB82 中加入 STP 指令使 CPU 进入 STOP 模式。
5.2.8 启动组织块
● 启动 OB 的功能
如果 CPU 的操作模式从 STOP 切换到 RUN 时,包括启动模式处于 RUN 模式时 CPU 断电再上电和执行 STOP 到 RUN 命令切换时,启动组织块 OB 将被执行一次。启动组织块执行完毕后才开始执行主“程序循环”OB 。S7-1200 CPU 中支持多个启动 OB ,按照编号顺序(由小到大)依次执行,OB100 是默认设置。其它启动 OB 的编号必须大于、等于123。
5.2 数据块处理
1.优化的DB块和标准DB块的区别
https://support.industry.siemens.com/cs/cn/zh/view/90316936
2. TIA V17中DB块如何导出
https://support.industry.siemens.com/cs/cn/zh/view/109806021
3. TIA V17如何从源文件生成数据块
https://support.industry.siemens.com/cs/cn/zh/view/109805733
4. TIA中如何将数据块的实际值转到初始值中
https://support.industry.siemens.com/cs/cn/zh/view/109806035
5.TIA中数据块如何实现清零?
在TIA指令集内有多个移动指令可对DB块内数据进行清零处理。对于S7-1500 CPU或ET200SP CPU来说,可使用BLKMOV、FILL以及SCL的POKE_BLK指令。但是这些指令对DB块清零时,要求DB块必需为非优化DB。
对于优化的DB块,可使用FILL_BLK指令或创建相同的UDT结构类型的DB块,使用MOVE指令清零DB块数据。使用FILL_BLK指令处理时,对DB块数据类型有要求,需要创建数组类型,相对非优化DB的处理多了数据类型的限制。
5.4 基本指令
5.4.1 定时器
S7-1500 可以使用IEC定时器和SIMATIC定时器,IEC定时器仅占用CPU的工作存储器资源,可使用的数量与工作存储器大小有关;而SIMATIC定时器是CPU特定的资源,数量固定。例如CPU1515-2PN的SIMATIC定时器个数是2048个(CPU技术数据叫S7定时器)。两种定时器相比较,IEC定时器可设定的时间要远远大于SIMATIC定时器,时间精度也高。
- S7-1500 SIMATIC定时器
- S7-1500 IEC定时器
- S7-1500 定时器常见问题
注:SIMATIC定时器从S5系列PLC就开始使用,而IEC定时器从S7-300/400才开始使用,必须使用背景DB。S7-300/400 IEC定时器类型比较少,在S7-1500/1200 指令中增加了IEC定时器类型,使用时通常采用多重背景数据块。
5.4.2 移动指令
本文将介绍几个常用 MOVE 系列指令,链接如下:
- MOVE
- (U)MOVE_BLK
- MOVE_BLK_VARIANT
- MOVE
LAD为MOVE指令,SCL使用":="表达式可以完成MOVE的功能(“:=”还可以有其他功能)。
MOVE指令是当EN条件满足时,实现相同数据类型(不包括位、字符串、Variant类型)的变量间的传送。
5.5 扩展指令
5.5.1 系统和时钟存储器
系统和时钟存储器
“系统和时钟存储器”:页面可以设置M存储器的字节给系统和时钟存储器,然后程序逻辑可以引用他们的各个位用于逻辑编程。
“系统存储器位”:用户程序可以引用四个位:首次循环,诊断状态已更改,始终为 1,始终为 0。
5.5.2 日期和时间
时钟功能指令的使用
在TIA 软件V13 版本中,可以通过相应的时钟功能指令去实现对S7-1200 CPU的系统/本地时钟的操作。
- 读取S7-1200CPU的系统/本地时钟。
- 设置S7-1200CPU的系统/本地时钟。
- 设置S7-1200CPU的时区。
- 设置、启动、停止和读取S7-1200CPU 的 32 位运行小时计数器。
本文将详细介绍上述各个指令的使用。
系统/本地时间区别
系统时间(System Time):格林威治标准时间。
本地时间(Local Time):根据S7-1200CPU所处时区设置的本地标准时间。
5.5.3 字符串和字符指令
字符串指令的使用
在TIA STEP7 V16版本中,可以通过相应的字符串指令去实现对S7-1200 CPU(固件版本V4.4)字符串数据类型的操作。
- 移动和转换字符串的操作(S_MOVE、S_CONV)。
- 将字符串和数值相互进行转换的操作(STRG_VAL、VAL_STRG)。
- 将字符串和字符相互进行转换的操作(Strg_TO_Chars、Chars_TO_Strg)。
- 将ASCII字符串和十六进制数值相互进行转换的操作(ATH、HTA)。
- 合并字符串的操作(CONCAT)。
- 比较字符串的操作(CMP)。
- 获取字符串长度的操作(MAX_LEN、LEN)。
5.6 间接寻址指令
5.6.1 AT的功能
S7-1500 使用AT覆盖变量
S7-1500 要访问声明变量内的数据区域,可以通过附加声明来覆盖所声明的变量。其优势在于无需指令即可根据需要实现变量的拆分,拆分后的变量可在程序中直接使用。例如,可以通过 Array of Bool 寻址数据类型为 Byte、Word 或 DWord 变量的各个位。
支持AT 访问的变量如下:
- 标准访问的FC/FB的接口数据区中的变量;
- 优化访问的FB的接口数据区中保持性设置为“在IDB中设置”的变量。
AT变量的声明:要覆盖一个参数,可以在待覆盖的参数后直接声明一个附加参数,然后选择数据类型"AT"。编辑器随即创建该覆盖,然后选择将用于该覆盖的数据类型、结构或数组。
5.6.2 SLICE的功能
S7-1500 通过片断访问对变量区域进行寻址
对于S7-1500/1200 PLC,可以选择包含所声明变量的特定地址区域,访问宽为 1 位、8 位、16 位或 32 位的区域。将存储器区域(如,BYTE 或 WORD)拆分为一个较小的存储器区域(如 BOOL),又称"片段访问"(Slice access)。
注意:无法使用片段访问对覆盖 AT 的结构、常量和变量进行寻址。
5.6.3 PEEK和POKE的功能
S7-1500 SCL PEEK 和 POKE 指令使用
PEEK 和 POKE 指令,可在不指定数据类型的情况下对 Input区、Output区、M 存储区、DB块和PI/Q(物理输入/输出,仅S7-1500支持)读取或写入。 通过 POKE_BLK 指令,还可以实现数据区域的复制或移动。
指令适用条件:
只能用于 SCL 编程语言;
适用操作存储区域,I、Q、M、DB、PI/Q(仅S7-1500支持);
DB必须是非优化访问的块。
请填写推广理由:
分享
只看
楼主