为什么对PLC编程这么感兴趣?可以说,因为PLC是大多数工业自动化系统的支柱,所以理解使用这种设备的复杂性当然很重要。这引出了一个重要的问题:为什么PLC首先成为如此重要的控制架构?
关于这件事有很多值得商榷的观点,但我最坚定的一个观点是梯形逻辑编程结构;能够在看起来和感觉上都像运行工厂的电气原理图的环境中编程。电工、工程师和技术人员都可以很容易地理解和排除这些程序的故障。
今天,我们将稍微扩展一下梯形逻辑的范围。AutomationDirect以包括PLC在内的大量自动化设备而闻名,它提供了一种称为ProOpen的模型,这是一种模块化PLC,具有Arduino MKR Zero微控制器的大脑。
图一。
我的工作台设置包括电源、以太网适配器、CPU和I/O模块。你可以只用CPU和I/O模块来完成这个项目!
Arduino与PLC有何不同?
这是一个重大的根本性问题。一;一个Arduino只是一块板子这提供了对处理器芯片的I/O引脚的简单访问。但除此之外,编程环境是免费的、简单的、基于文本的,用户社区是巨大的和全球性的。
如果我们想得到具体的,有两个主要的区别。Arduino是用C++(基于文本,而不是梯形逻辑)的变体编程的,Arduino也没有简单的卡扣式I/O模块,除了可以放置在可堆叠接头上的某些“屏蔽”,但这些看起来不太像任何控制工程师都会认识的PLC I/O模块。
然而,ProOpen结合了Arduino MKR板的功能和灵活性,并将其封装到DIN导轨安装的CPU、电源和I/O模块系列中,与Productivity 100 PLC系列兼容。如果我们能利用这一点,我们就有了一个非常强大的PLC。
开始:我需要什么?
这个项目,虽然不像市场上的一些PLC那样昂贵,但仍然需要几个项目才能成功。我们将使用P1AM-100 CPU和组合输入/输出模块P1-16CDR。在我的设置中,我还包括了一个以太网模块和一个电源,但这个介绍性项目将成功没有这些。
除了PLC本身,我们还需要一个24伏电源和微型USB电缆,包括电源和数据(您的计算机应该在设备管理器中注册一个新设备)。
由于编程使用Arduino软件,您可以在Windows、Mac或Linux上对该PLC进行编程!本教程是在软件版本1.8.19上测试的(向下滚动并找到“传统IDE”按钮在下载页面上).我个人没有在Arduino最新的2.0版本平台上测试过。
硬件设置非常简单。I/O模块连接在CPU的右侧,并固定在DIN导轨上。电源已连接,在将USB电缆连接到CPU之前,我接通了24伏电源。
图二。
所需硬件:P1AM-100 CPU和P1-16CDR I/O模块,以及用于接线的端子板。
配置软件
要正确使用Arduino软件,您需要添加两个元素:
这图书馆提供对运行I/O和通信功能的所有命令的方便访问。
这董事会经理提供有关P1AM硬件本身的信息。
这些说明已经很好地提供了手册中的步骤从AutomationDirect开始,从第1-5页开始,一直到第1-6页的底部。
对于本教程,我只使用Arduino IDE,而不是附加的ProdictivityBlocks软件。当您加载代码时,您可能会遇到即使是那些使用过Arduino产品的人也不熟悉的错误,所以请务必查看解决纷争一节。
设计您的代码
如果您不熟悉C++编程的基础,它包含了梯形逻辑的所有相同元素,但格式完全不同。
假设我使用相同的硬件设置,我提供了一个模板来帮助我开始编写任何代码。下面是代码,从一开始就包含了库。我将对它进行分解,并解释每个组件以及它与梯形逻辑项目的关系。
标签名称变量
在这个IDE中,变量名在整个代码中使用,可能很多次,就像标签一样。在每一个实例中删除和重新键入新的标记名将是一场噩梦,所以在代码的最顶端,我创建了一个部分来定义我的输入和输出变量名。
在我的第一个简单项目中,我有一个蓝色按钮连接到输入终端1,一个绿色按钮连接到输入终端2。输出模块上还有标准的红色LED指示灯。你可以按照我的例子,输入你想使用的标签名。
带“int”的行是指每个I/O点的整数值。这些必须在代码的顶部全局定义,就像PLC程序中所有I/O地址的控制器范围标记一样。
图3。
定义标记名变量。前两个已经为我的程序设置好了。我们还需要8倍的输出。
例行程序:设置
所有PLC都包含第一周期扫描逻辑。我们通常会忽略该例程并将其留空,但C++中的设置例程包括通信通道的初始化和PLC响应的验证。
图4。
设置例程初始化串行通信(如果我们最终需要它)并验证CPU状态。
子程序:readModules
在典型的PLC扫描中,在执行任何逻辑之前,检测所有输入点的状态。这个简单的子程序将获得这个组合模块上的所有输入地址(它有8个输入和8个输出)。
如果其他模块(甚至模拟输入)被添加到项目中,它们也可以被添加到readModules例程中。
图5。
该子程序读取所有输入模块点。为了方便起见,我们在程序的顶部定义了槽号。
主例程:循环
主例程按此顺序执行三项基本任务:
运行readModules子程序
检查我们代码中的所有逻辑指令
运行writeModules子例程。
在步骤2中,我们唯一需要进行代码编辑的地方是在所示的//注释标记之间。
与其重新散列这个If/Else语句逻辑,不如看看我们以前的文章,描述如何在C++编码环境中重新创建梯形逻辑.
对于我的简单测试,代码检查红色和绿色按钮,如果两个按钮都通电,输出LED也将通电。
图6。
主例程实际执行用户定义的逻辑。它不一定是梯形格式,但这可能会有所帮助。
子程序:写模块
一旦逻辑被执行,所有I/O点的临时状态被存储,但尚未写入I/O模块。这个最后的子例程的目的是写入这些值。
这意味着随着代码长度的增加,会有轻微的延迟,这与传统的PLC更相似,而与典型的微控制器代码有点不同,后者可以随时写入值。
C++环境的灵活性允许程序员对输出响应逻辑条件的时间、方式和原因有更多的控制。
图7。
这个例程接收所有更新的标签值,并将它们写入适当的输出终端。
ProOpen故障排除提示
由于内置MKRZero板,有一些小技巧可以帮助编程。
首先,在使用箭头按钮上传之前,请始终按下“验证”复选标记按钮。这样,您可以将错误隔离到代码错误或加载错误。首先解决代码错误。
图8。
加载代码时可能出现COM错误。
重新启动Arduino IDE
由于COM端口当前正被某个现有项目使用,因此存在一些错误。关闭和打开IDE可以清除一些问题并刷新板和端口标识。如果这不起作用,请继续下一步。
图9。
这显示了如何为Windows机器正确选择板和端口。
COM端口号
如果程序在加载过程中报告错误,请验证板的选择是否正确,以及COM端口是否正确。下图显示了正确的值(尽管您的COM端口号可能不同)。
图10。
如果遇到此错误,请双击重置按钮,选择COM端口,然后再次上传。
引导加载程序模式的重置按钮
加载程序时,可能会出现通信错误。与熟悉的Arduino Uno板相比,处理CPU USB和串行通信之间转换的芯片有所不同。简单地再次按“上传”或重启可能无法解决问题。
一个常见的解决方法是快速按下CPU上的“重置”按钮两次,然后选择适当的COM端口(它可能会改变),并再次上传。
这个重置按钮将CPU置于停止代码执行并允许加载的模式,有点像将PLC置于停止模式。
代码停止执行
在一些罕见的情况下,代码似乎会在一段时间后停止执行(我的经验是大约12小时)。在我的情况下,CPU在此期间通过USB连接到计算机。拔下USB并按下“重置”1次后,代码仍然无法执行,需要重新上传代码。
在第二个测试中,成功上传后立即断开USB连接,代码继续无限期执行(至少在撰写本节前几天)。
将微控制器用作PLC
将微处理器嵌入PLC机箱的过程与大多数PLC的现实并没有太大的差距。然而,许多人会认为这一目的限制了微控制器的潜力,尽管这可能是真的,但PLC软件无疑在工业领域提供了一些极端的优势,迎合了不熟悉基于文本的编码的操作员和技术人员的需求。这种PLC是一个很好的折衷方案,具有一些独特的灵活性优势。
审核编辑 黄宇
-
微控制器
+关注
关注
48文章
7423浏览量
150792 -
mcu
+关注
关注
146文章
16852浏览量
349801 -
plc
+关注
关注
5006文章
13093浏览量
461320 -
Arduino
+关注
关注
187文章
6456浏览量
186472
发布评论请先 登录
相关推荐
评论