摘要
-
IEC 61131-3 语言(如梯形图(LD)、结构化文本(ST)和功能块图(FBD))可用于 PLC 中的数据处理。
-
数组索引是数据处理的关键支撑。
-
对于一家工厂的 PLC 而言,编程风格和一致性与编程语言的选择同样重要。
PLC 中使用的数据类型有哪些?
数据分为几个不同的类别:
- 用于驱动 PLC 程序的本地(功能级)和全局(程序级)存储位置。这包括与人机界面(HMI)的接口,以及远程控制的输入 / 输出、电机驱动器,甚至机器人接口。
- 错误处理以及为技术人员诊断存储事件的能力。
- 存储在本地闪存卡上的数据点。
- 外部 PLC 接口,包括接收和传输远程数据的能力。这可以采取多种不同形式,包括 SCADA、历史数据库、边缘设备或数据库级别的接口。
一个用儿童游戏举例的 PLC 数据处理案例
一个用儿童游戏来探讨这个话题。儿童游戏,大概是这样的:
假设有个叫小明的角色,他会发出一连串随机的指令,比如 “拍手”“跳一下”“摸耳朵”,还可能搭配灯光或声音(比如红灯亮 +“嘀” 一声代表 “拍手”)。玩游戏的人要记住这些指令的顺序,然后一步步跟着做 —— 比如小明先让 “拍手”,再让 “跳一下”,玩家就得先拍手、再跳一下,错了就出局。
任何能够玩这个游戏的 PLC 都具备数据处理能力。
关键区别在于 PLC 是否具有间接(索引)内存访问功能。我们知道 “小明” 会生成随机数,而一个能玩 这个游戏的 PLC 必须能够将随机序列存储在存储位置中。然后,它必须遍历内存数组来进行游戏:首先是一步,然后是两步,依此类推,直到完成经典的 32 步游戏。如果 PLC 能做到这一点,那么实现更大的数组(包括字符串)和其他用于在 HMI 上显示的错误处理结构就只是一小步了。最后,在必要时,借助一些有用的硬件,通过以太网或 RS232 发送 SQL 命令也没有任何障碍:
INSERT INTO widgets (widget_name, quantity)
VALUES ('Gadget', 42);
课堂上的 游戏 PLC 程序
PLC 并非为了玩游戏而设计的!
然而,我发现游戏 程序是 PLC 编程的一个很好的学术练习。它迫使我们使用数组来存储游戏模式。它还迫使我们使用基本的程序模块化,例如使用用户定义功能块(UDFB):一个 UDFB 用于生成新的步骤,另一个用于执行步骤(声音和灯光),还有一个用于监控人类玩家的按钮按下情况。
这个游戏能让程序员为更传统的任务做好准备,例如基于条形码阅读器的物料处理。
梯形图(LD)、结构化文本(ST)和功能块图(FBD)都可以用于处理数据
所有的过程性语言都可以使用,包括梯形图(LD)、结构化文本(ST)和功能块图(FBD),因为它们都能拼接这些 SQL 命令。不过,我猜想对于受过正规训练的高级程序员来说,结构化文本(ST)可能是最容易且最熟悉的。同时,使用其他语言可能也有充分的理由。
编程风格和一致性与语言本身同样重要
PLC 编程既有工厂内部默认的惯例,也有官方(有文档记录的)风格指南。就像工厂会尝试在所有产品线中使用相同的 PLC 一样,他们也会尝试在所有机器中保持相同的编程风格和语言。在我看来,这对于提高 PLC 相关工作人员(无论是程序员、安装人员还是技术人员)的工作效率至关重要。
更多相关内容:
