开始审查
因此,亲爱的同事们,我们从我们真正要强调的内容开始进行审查。 在本文中,我想考虑构建工业控制器程序所需的典型元素,并展示如何将其应用于家庭自动化系统。 最重要的是找到问题的答案-为此需要什么。
家庭自动化-应用
甜蜜的家...您真的需要控制器吗? 答案很简单-一切都取决于这种房屋中的可用物品。 当然,如果您只有一间公寓,而自动化在于在夏季管理家庭媒体中心和空调,则下面编写的所有内容可能都完全没有意思。 但是,如果您的爱好不仅是推沙发(隐藏的东西,我本人有时会注意到这一点),那么这篇文章可能会非常有用。
因此,让我们尝试了解即兴手段如何简化我们的艰难生活。 例如,我们使用真实情况-一台泵在70米深的井中,两个邻居将其折叠。 他们在春天安装了它,当时井中有很多水,总的来说,它温暖而良好。 但是随着时间的流逝,问题开始了-要从这样的深度提水,就需要用电,这是您必须付费的。 地下室和技术层被淹没了好几次-他们只是忘了关掉水泵了...是的,手动控制它不是很方便-您需要关闭一个水龙头,再打开另一个水龙头,然后打开水泵并观察水箱中的水位。
花时间在上面已经值得吗? 好奇的人开始寻找解决方案,当然找到了! 实施任务清单由此诞生。
- 不必为用电量支付费用-也就是说,我们将安装两个起动器,每个起动器都连接到其自己的电表。
- 泵不应因缺水而发生故障-这意味着我们将为泵的“干”冲程安装传感器。 如果没有水,请不要启动泵,如果泵可以工作,我们将紧急停止。
- 泵不能运行太长时间-例如,超过25分钟。 超过此时间表示系统将退出其正常操作模式。
- 容器的填充应在没有人为干预的情况下进行,即自动进行,这意味着从较低级别开始,在较高级别停止。
- 仅应填充一个水箱,也就是说,我们安装两个阀门-为每个水箱中的一组供水。
- 泵启动之间的间隔必须至少30分钟。
- 电源中断(如果处于活动状态)不应影响操作算法。 尽管如此,该算法必须完成。
这些任务很简单,可以用一百种甚至一千种方法来解决。 但是文章的标题不言而喻,我们将走上一条棘手的道路。 让我们使用一个虚拟的(当然,现在)控制器,它将完成所有这些工作。
工业控制器如何工作?
当然,我们会立即进行澄清-我们正在谈论所谓的可编程逻辑控制器,简称PLC。 这个缩写隐藏了什么? 这就是隐藏的东西-令人难以置信的各种硬件解决方案,大量的软件产品和实用程序。 一个合理的问题随即出现-那么如何利用所有这些好处呢? 真的有必要从头开始研究材料部分并为每个新设备花费时间和金钱,以便参加培训课程并获得使用每个设备所需的技能吗?
答案是否定的,没有必要。 一切都摆在我们面前。 它仍然只是学习和学习使用方法。 这是我建议做的进一步工作-稍微浸入IEC 61131标准,让我们来揭示一下该标准包含的部分。
- IEC 61131-1:一般信息。
- IEC 61131-2:设备要求和测试。
- IEC 61131-3:编程语言。
- IEC 61131-4:用户指南。
- IEC 61131-5:通信。
- IEC 61131-6:功能安全。
- IEC 61131-7:模糊控制程序。
- IEC 61131-8:编程语言的使用和实施准则。
- IEC 61131-9:用于小型传感器和执行器的单点数字通信接口。
- IEC 61131-10:PLC开放的基于XML的交换格式。
但是,我们不会深入研究标准主题,简单地说,控制器通常是循环工作的-轮询输入的状态,解释器执行控制程序,设置输出的状态,执行内部维护任务,然后再次返回轮询输入的状态。 这很无聊,但是有效又高效。 控制程序是使用编程环境创建的伪代码,通常,该伪代码是二进制编码的序列,与通常的编程语言无关。 尽管对于用户来说,它是以一种可以理解的形式呈现的-对于控制器,它使用了完全不同的视图。 一个很好的例子是一个小程序,以IL,LD和控制器的二进制编码形式表示(嗯,甚至没有专门的术语)。 在扰流板下方,显示了一个小示例。
那么,什么使该程序有用呢? 是的,她什么也没做-如果M8010合并器的值是1,则1.将被写入地址Y377的输出中。因此,对于0同样如此。
这种实现方式的最大优势之一是能够从控制器的内存中卸载程序,以人类可以理解的方式打开程序以在编辑器中进行编辑,编译(此术语在此是有条件的)并将其加载回控制器的内存中。 而且,某些控制器甚至保存注释和变量名。
控制器如何编程?
当然,需要专门的软件。 经过长时间的搜索和实验,选择了Inovance Control的Autoshop v3.02。 值得注意的是它是免费的,可以免费下载,并且支持与三菱控制器兼容的控制器。 它不仅支持通过串行端口的工作,还支持通过以太网的工作。 链接到我们在扰流板下使用的版本。
好了,我们安装了程序,现在又遇到了另一个问题-如何将程序写入控制器? 由于我们将使用特定的设备,因此将为虚拟COM端口安装特定的驱动程序。 为了保存结论并简化操作,我决定使用开发板的USB端口进行连接。 扰流板下的驾驶员。
安装驱动程序并通过mini-USB连接开发板后,您可以检查一切是否成功。 为此,请右键单击“我的电脑-管理-设备管理器-端口”(COM和LPT)。 您应该看到扰流板下方的窗口。 您系统上的COM端口号可能会有所不同。
现在,您可以在AutoShop菜单中选择“工具-通讯设置”,在出现的窗口中选择“串行”,指定端口号,然后单击“测试”按钮。 您应该在扰流板下有一个这样的窗口。
但是,如果对您没有帮助,请写在PM或评论中。 我们一定会提供帮助。
程序的要素,没有它,这将是可悲的
在下文中,我们将考虑梯形图的语言或所谓的LD。 让我们只考虑以后将要使用的那些元素。
- 输入和输出是离散的。 它们分别命名为X和Y。设计用于接收和发出离散信号。
- M个合并器M的内存区域。它可以处于两种状态-开启和关闭。
- 计时器指定为T。设计用于计时从0.1到3276.7秒的时间。
- 寄存器D的区域。它的单元尺寸为16位,但也可以寻址为32位单元。
球形寄存器或间接寻址寄存器
间接寻址寄存器的名称为V和Z,可以从V0到V7以及从Z0到Z7寻址。 为什么要使用它们? 让我们看看它们通常如何工作。 看起来很疯狂的D1000V0记录意味着将使用计算为D1000地址的单元地址加上写入间接寻址寄存器的值。 如果有15,那么我们将使用单元格D1015的地址。 在使用数据数组或表控件时,这非常方便-足以更改索引寄存器的值,并且可以从已寻址的那些存储单元中获取值。 但是,尽管我们将不应用它们,但我们将在下一个出版物中进行介绍。
关于程序可视化或在线调试的一些知识
如果您是程序员并且刚刚完成编写程序,则下一步是调试。 问题就在这里-如何做到。 同样,有很多选择,但是我将讨论我们将进一步使用的选择。 通过编程环境编辑器,您可以通过按一个按钮直观地显示控制器存储器中当前位和变量的值。 一个非常有启发性的例子是-在扰流板下面,在编辑器中离线和在线显示程序。
有关单击“联机”按钮时发生的过程的更多信息。 该程序快速编译可见变量列表,并在完成后将其写入特定的控制器缓冲区。 之后,控制器从该列表准备数据,并将其放置在另一个缓冲区中。 程序从该缓冲区读取值,并将其显示为模拟图上的值。 如果在显示窗口中滚动一个小程序并更改可见变量,则此循环将再次重复...
谁叫哈姆雷特,或在舞台上BluePill x405
您是否注意到市场上没有像蓝色平板电脑这样的简单主板,而是配备了F405和更高版本的处理器? 我本人只遇到过F401石头,但这水平稍有不同...我很容易爬上去,为了进行实验,我没有三思而后行,我用一台优质的P-CAD 2006付款,并在其中一个快速订购站点上从中文订购。 当然,在颜色上它是绿色的平板电脑,但就含义而言,我决定保留名称BluePill,但表示它已经是x405。 扰流板下的结果是BluePill x405板的照片。
关于这个董事会为何如此出色的一些信息? 毕竟,只有数以千计的尝试创建蓝药克隆! 但是不同之处在于:我将固件附加到该板上,这会将它变成一个内核,该内核运行与命令系统中的Mitsubishi工业控制器兼容的程序。 这个奇迹是根据16个输入,16个输出,2个模拟输入,3个具有DE支持RS485的UART,1个单线主总线计算得出的。 UART可用作主总线Modbus RTU,也可用作从属总线。 他们可以完全独立地工作。
但这还不是全部-如果将3V电池连接到VBAT引脚,则不仅时钟,而且计时器,计数器,合并器和前1000个通用寄存器D都将保持其值,并且有8000个寄存器。
在回答问题之前,我会立即说-是的,该软件基于实时操作系统。 是的,尽可能使用DMA。 这些功能使工作在高通信负载下的周期时间无明显变化。 此版本是第二修订版,进行了修订和补充。
GX FXDeveloper和IEC Developer和GX Works都可以对该板进行完全编程。
泵和两个坦克的命运
现在让我们解决这个问题-尤其是因为有所有可用的工具。 为了避免过多拖延,我编写了一个程序,将其分为几个部分(所谓的网络或工作链),在这里我将展示每个程序并提供注释。
D1000寄存器存储抑制触点反弹所需的时间。 实际上,这已经在程序中-但我想更清楚地显示它。 寄存器D1001负责泵的保护时间。 在其中写入15,000或1,500秒。 接下来,我们有一个备用复位链-如果出现问题,可以将信号1发送到输入X14并重新启动电路板。 在这种情况下,将0写入寄存器D0和D1,并且复位M98和M99推杆。
在这里,借助计时器,我们摆脱了联系的反弹。 为此,请使用200毫秒的延迟。 为了确保在以后的程序中更改联系人的输入地址时不必重写许多链,我使用中间合并器(例如M102)。 还值得注意的是,此处使用了M8003系统商家-在程序执行的第一个周期结束后它将打开。 但是M8002 Merker仅在程序的第一个周期中处于活动状态,并且可以并且应该将其用于设置初始值。
除地址外,储罐1的填充与储罐2的填充完全相同。 该图有点不合适-但是您最好只打开项目即可查看它。 这个控制单元有什么特别之处? 保护和死锁的存在使启动和停止机制无冲击。 例如,在打开阀1之后,仅在700 ms之后才会发出启动启动器的命令,该启动器打开泵。
此处的管理不提供手动模式。 此外,还实现了防止空转和防止泵运行时间过长的保护措施。
在这里,我们根据锁控制输出。
在这些任务中,只有重新启动前30分钟保护间隔的连接未实现。 我必须马上说-在此版本中,仅实现了输入X0-X3和输出Y0-Y3,这足以测试本文中的材料。 绑定是PA4-X0,PA5-X1,PA6-X2,PA7-X3和PB4-Y0,PB5-Y1,PB6-Y2,PB7-Y3。
程序循环速度-祖父测量方法
当我们问自己这个问题时,立即想到这样做-用一定数量的相同元素向控制器编写一个非常大的程序,获取执行时间并获得一个命令的执行时间。 据说-完成了,在扰流板程序下,以扰流板执行时间的名义。
在这里,每一步都是一个命令,我们得到2.6 / 7995 = 0.325微秒。 不是很快,但还不错。
FPU-是还是不是?
现在,让我们确定固件中浮点指令的运行速度。 有两种固件,一种使用内置FPU,另一种使用软件仿真。 下面的程序:
以下固件位于扰流板下方,没有任何限制
使用硬件FPU时,程序执行时间为1.8毫秒或1.8 / 600 = 0.003毫秒或3微秒。
现在更换固件-使用软件仿真。 结果已经不同-2.5毫秒或2.5 / 600 = 0.0041毫秒或4.1微秒。 还不错,但是区别非常明显。
结论
尽管文章量很大,但仍然有很多材料可以覆盖。 因此,如果您对本文感兴趣,那么本文后面还会再有一篇。 但是我想找到志同道合的人,他们只希望有一个目的而加入工业和家庭的交叉口,这样一个简单的外行就可以使用这些工具。