如何在Arduino Opta上查看I/O状态

本文介绍了梯形图代码,允许Arduino Opta在状态LED上显示输入和输出(I/O),如视频1所示。该技术将减少通常与可编程逻辑控制器(PLC)相关的故障排除时间。识别损坏或未对准的传感器等任务变得简单。

下载代码(5.8 MB)

本文假设读者对梯形图逻辑(LL)有一定了解。还假设读者之前已经使用梯形图程序配置和编程了Opta。例如,假设读者可以编程经典的3线电机启动器代码,包括启动和停止按钮以及锁存器。如果您是工业自动化的新手,建议您查看此简短术语表。

术语表

Arduino Opta

Arduino Opta:Opta是Arduino家族的最新成员之一。它是一种可编程逻辑控制器(PLC),专为帮助学生过渡到工业自动化而设计。它可以从传统的Arduino IDE或新的PLC专用IDE编程,支持IEC 61131-3语言,包括梯形图逻辑、功能块、结构化文本、指令列表和顺序功能图。

全局变量

PLC代码通常被分解为较小的POU(程序组织单元)。全局变量通常用于在这些程序之间进行通信。这与您在编程Arduino时学到的内存范围概念类似。

加固

该术语意味着PLC可以在恶劣的工业环境中运行。PLC预计可以在高温下运行数十年。还具备一定的抗意外电气连接的能力,包括短路线或错误电压施加到输入端子。

匈牙利命名法

匈牙利命名法:这种变量命名方案鼓励程序员在变量名称中包含数据类型和范围。这种风格仍有争议。然而,根据作者的经验,初学者程序员会从提醒中受益。它可以节省大量代码故障排除的时间,尤其是在遇到用户自定义功能块等高级主题时。

输入 / 输出 (I/O)

参见螺丝端子。

梯形图

梯形图是 IEC 61131-3 语言之一。它是一种图形语言,其符号与物理继电器有共同之处。

映射

此技术用于将一个内存位置的内容传输到另一个内存位置。通常,程序员不受 PLC 可用内存量的限制;程序清晰度优先于大小。映射是一种稳健的方法,可以增加清晰度并减少故障排除时间。例如,程序员可以对物理 I/O 进行单一引用。这可以防止在修改程序时出现错误,而不是繁琐地查找和更改对该 I/O 的所有引用。如果 PLC 触点损坏,这将特别有利,因为技术人员可以更改单行代码并移动到仍然可用的触点。

螺丝端子

PLC 的物理连接。它们通常分为输入块和输出块。一个相关术语是“现场设备”。这些传感器和执行器连接到 PLC 的螺丝端子。

自文档化代码

PLC 的生命周期以十年为单位。通常,它们不会像手机那样每隔几年升级一次。在理想情况下,程序将使用清晰的名称来编写,以描述 PLC 执行的物理操作。例如,梯形图的一行可以读作“在夹紧传感器激活后 2 秒启动钻机电机”。

自复位

关于本文,该术语指的是定时器和计数器。例如,可以编写一个定时器来产生规则的脉冲。可以编程一个计数器以计数到特定数字,然后重置自身。当结合使用时,可以构建一个类似时钟的结构;一个从0到59计数,每次迭代延迟一秒的结构。

状态机

PLC设计用于控制物理机器或其他工业过程。通常,机器的操作依赖于一系列物理步骤,因为工作材料进入机器,被操作,然后从机器中排出。术语“状态机”指的是跟踪和控制这些步骤的PLC代码。一般来说,该术语可用于描述包含独特步骤的任何代码结构。

相关论坛帖子


视频 1 Opta 的输入和输出状态显示在状态LED中,绿色表示第一个输入半字节,红色表示第二个输入半字节,蓝色表示输出半字节。

介绍

我们中的许多人在教育环境中接触到了Arduino。我们都学会了如何搭建电路板并编程微控制器以执行各种聪明、有趣和有趣的功能。当我们从电路板过渡到工业环境时,我们需要考虑不同的参考框架。

Arduino Opta是一种可编程逻辑控制器(PLC)。这是一种坚固的工业计算机。这里的“坚固”意味着Opta设计用于在恶劣的工业环境中生存。敏感的输入经过调节,允许微控制器脆弱的3.3 V I/O引脚接受24 VDC,并承受一定程度的滥用。Opta的基本单元具有四个基于继电器的输出,能够直接驱动各种中等功率负载,包括带有120 VAC线圈的电机启动器。

保持所有熟悉的Arduino想法和习惯是一种自然的本能。然而,这可能会让我们陷入麻烦。例如,假设你设计了一台配备Opta的小型机器。你成功地编程了Opta,在那个值得庆祝的日子,机器被调试并开始在工厂车间进行生产工作。有些人会将这次调试视为辛勤工作的成功结果。

经验丰富的工程师知道这仅仅是个开始。

那台机器现在是工厂基础设施的重要组成部分。它需要可靠地工作。当它出现故障时,而不是如果,技术人员必须能够迅速恢复机器的运行。这是至关重要的,因为一台坏掉的机器在失去生产和闲置人员方面非常昂贵。

理想情况下,技术人员可以在不使用任何测试设备的情况下恢复设备,当然也不需要找到一台电脑打开并与之交互的IDE。事实上,技术人员无法访问PLC中的知识产权并不罕见。鉴于当今艰难的工作环境,技术人员可能是公司的新手,对相关的PLC没有任何经验。

一个有用的方法是编程Opta以在Opta的LED上回显I/O状态。

在这篇文章中,我们将探讨一个完成此任务的梯形逻辑解决方案。红色、绿色和蓝色指示灯LED的状态LED将允许技术人员快速确定每个螺丝端子输入和输出(I/O)的状态。例如,如果接近传感器损坏或未对准,技术人员可以在没有测试设备或电脑的情况下进行维修。结果是快速故障排除,从而最大限度地减少设备停机时间。

状态 LED

图1展示了Arduino Opta的图片。请注意,它有4个状态LED。在RESET针孔上方还有一个绿色/红色LED,在USER按钮上方有一个蓝色LED。这些LED将一起用于通知技术人员所有I/O的状态。

1 Arduino Opta是一款小型PLC,非常适合过渡到工业环境的学习者。

在本次讨论中,我们将假设所有输入都是数字的。总共有12个I/O:8个数字输入和4个数字(继电器)输出。鉴于有4个状态LED和3个指示灯LED,如果我们以轮询方式显示所有I/O的状态,我们有足够的资源。

图2展示了实现这一点的一种方法。请注意,每个半字节(4个二进制值的集合)都是颜色编码的。当绿色LED(在复位针孔上方)被激活时,输入I1到I4的值会回显到四个状态LED上。经过两秒的延迟后,代码将切换到红色LED,并且I5到I8的值将显示在状态LED上。最后,再经过两秒的延迟,蓝色LED将点亮,并且PLC输出的值将回显到状态LED上。

2 Opta I/O与状态LED的颜色关联。例如,当Opta的红色LED点亮时,I5到I8的值会显示在状态LED上。

梯形图逻辑

有几种不同的方法可以编程Opta来执行此功能。在本文中,我们专注于梯形图逻辑,因为这是PLC的传统语言,并且有充分的理由使用这种IEC 61131-3语言,正如技术提示中所描述的那样。

技术提示 :关于梯形图逻辑(LL)存在一些争议。有人认为LL是一种应该被现代编程语言取代的旧技术。也许吧,但它仍然被广泛使用,并且可能会在未来几十年内继续如此。即使我们今天从所有PLC编程中废除LL,我们也可以预期现有机器在其自然生命周期(2到3十年)内继续使用LL。与此相关的是,LL与继电器及其与真实世界设备的物理连接非常相似。所有PLC程序员和技术人员都需要掌握这些信息,以便在他们的工作中有效。

代码的概述如图3所示。这个设计的复杂性在于prgStatusDisplay需要编写一次,然后在多个项目中重复使用。这需要仔细命名变量,这解释了映射操作中明显的冗余。

3 :显示I/O状态的程序位于自文档代码之外。

让我们从图的中心开始,逐步向外展开。PLC编程的核心被识别为自文档化程序。在这里,我们找到了输入映射程序(prgInMap)、控制程序(prgCtrl)和输出映射程序(prgOutMap)。请注意,我们使用的是匈牙利命名法

对于我们的目的,我们将“自文档化”定义为包含与物理世界相关的描述性名称的代码。例如,物理控制面板可能包含一个选择开关、一个启动按钮和一个停止按钮。在内部,这些可以分别命名为gxEnable、gxStart和gxStop。其中字母g表示全局内存位置,x表示布尔类型,后面跟着一个描述性名称。梯形图逻辑表示如图4所示,我们看到gxMotor通过启动/停止锁存器激活,前提是启用开关被激活。

技术提示 :使用一致的风格进行编程对于任何语言都是必不可少的,即使是像LL这样“简单”的语言。您的工作场所可能已经建立了风格指南。如果没有,可以从PLCopen提供的编码指南文档开始。这份开放文档解释了使用前缀(如prg)和匈牙利表示法(如gxPBStart)背后的原理。

4 :电机启动电路的梯形图锁存器

技术提示 :熟悉梯形图逻辑的人可能已经注意到与gxStop相关的常闭触点。这可能会引起担忧,因为物理停止开关应具有常闭触点。换句话说,停止机器的设备必须包含常闭触点,作为对断线或松线的故障保护。为了防止混淆,prgCtrl中使用了正逻辑思维。由于prgInMap翻转了停止开关的极性,因此无需同时考虑开关类型及其在电路中的安装方式。相反,我们可以简单地说,“如果没有停止。”

映射挑战

PLC编程中的一个重大挑战是将这些自文档化名称映射到物理的“螺丝端子”I/O。在图3中,我们看到prgInMap和prgOutMap位于prgCtrl的两侧。我们还在Arduino Opta代码空间中看到了输入和输出映射,并特别参考了系统资源。

通常情况下,prgInMap和prgOutMap是不需要的。例如,我们可以将连接到螺丝端子I1的物理启动开关与Arduino Opta输入映射块中的gxStart关联(图3中左侧第二个)。

prgInMap和prgOutMap存在的原因是为了允许prgISStatusDisplay的干净且永不改变的实例化。我们的目标是编写一次状态显示程序并且永不更改它。如果我们在Arduino Opta资源部分内执行映射操作,这是无法实现的。

映射如图5所示。请注意,所有变量都是全局范围且为布尔类型。虽然这可能会激怒纯粹的程序员,但这是梯形图编程中必要且正常的操作。全局变量用于在图3所示的程序块之间进行通信。例如,在图4的中间,我们可以看到Opta的I_O_mapping-ProgInp部分。我们可以隐式地看到,八个螺丝端子输入已映射到gxI1到gxI8。同样,I_O_mapping_RelayOut的输出已映射到gxO1到gxO4。

5 :在Opta资源部分中执行的映射操作

映射摘要

如图3所示的IOStatusDisplay程序接收变量gxI1到gxI8以及gxO1到gxO4。该程序有七个输出;四个驱动状态LED,三个驱动绿色、红色和蓝色指示灯LED,如图2所示。我们再次希望编写一次prgIOStatusDisplay代码,并且不再修改它。这需要图4中描述的严格映射操作。

在图5所示的Opta资源中,我们将始终使用I_O_mappings_ProgInp、I_O_mappings_ProgOut和I_O_mapping_LEDOut中的给定变量名称。因此,我们使用用户定义的prgOInMap和prgOutMap将固定资源名称映射到通常与PLC编程相关的自文档化名称。例如,连接到I1的物理启动开关变为gxI1,然后作为gxSWStart呈现给prgCtrl。

显示 I/O 状态程序

prgIOStatusDisplay的实际梯形逻辑代码相对简单。如本文末尾的图6所示。它由6行代码组成。前两行充当粗略的状态机。自复位定时器TON_1每两秒提供一次脉冲。自复位计数器CTU_1提供从0到2的计数。请注意,它确实在一次程序扫描中提供了3的计数。然而,这对于此应用程序来说无关紧要。

第0002行包含一系列比较器。这些将根据CTU_1中的状态激活红色、绿色和蓝色指示灯LED。

第0003行清除四个状态LED。然后,根据机器的状态,在0004到0006行中设置状态LED。例如,如果I1和I3为真,当gxLEDGreen轮到时,状态LED gxLED1和gxLED3将被设置。

结论

本文中描述的技术将使技术人员能够快速排查PLC故障。他们无需借助测试设备或花费时间连接笔记本电脑来查看PLC代码即可完成此操作。程序本身相对简单,但在变量映射方面需要相当多的纪律性。

我们期待听到您在设计、构建、排查和修复工业控制系统时的反馈。您的反馈对我们和我们的读者来说是无价的。请在本页或返回DigiKey的主要技术论坛页面分享您对此材料的评论和问题。

下载代码(5.8 MB)

相关论坛帖子

返回工业控制与自动化索引

6 prgIO StatusDisplay的梯形图逻辑实现