0724 「万泉河」烟台方法前进之路:在信捷PLC中实现FB功能
0724 【万泉河】烟台方法前进之路:在信捷PLC中实现FB功能
前段时间, 微信群里有个网友杠我:
万老师, 你如果能研究把烟台方法应用到信捷小PLC中,实现优雅编程就厉害了。
我说,那怎么样?
佩服你厉害。
那就是男人之间最朴素的赌约了:承认你厉害。
虽然没有啥实际意义, 我还是到信捷官网下载了编程软件研究了一下。
属于最简单的那种PLC, 没有FC, 也没有FB, 只有一个C函数功能,然而主要用于自定义算法实现的,看来也用不上什么大用场。
所以简单研究后, 就放弃了。 软件卸载, 文档资料也都删除到回收站里了。
反正我也没吹过牛,没拍过胸脯, 做不出就做不出了。 也不是我个人的责任。 没什么。
然而两天前, 某位参加了烟台方法学习的深圳的学员讲, 他们那里周边有很多非标设备的厂家,大量使用信捷PLC控制,因为成本低,所以用量很大。 是一块巨大的市场。
所以, 如果我们能努力研究下,开发出便捷高效的程序架构,帮助这些工厂实现一定程度的标准化架构,也可以带来一些市场收益。
所以我就把删除的文件从回收站里又翻出来恢复,软件也重新安装了。 再从头研究了解。 其实本意想的是, 如果实在不能实现面向对象模块的重复调用, 那就最朴素的方法平铺开写,然后通过STL的规律, 顶多想办法 再用高级语言软件生成一套上位编程软件,对象的应用库都在上位软件中,在上层实现面向对象的标准化应用, 顶多实现过程麻烦一点,但只要花出些精力实现了, 以后一劳永逸,也仍然可以实现高效和优雅。
于是按照上述的思路, 把80双联开关的例子程序在迅捷PLC中实现了, 先做了一般发给他。
然后再具体翻阅文档的时候, 发现信捷PLC虽然不支持单独文件格式的子程序,所有程序都在一个主程序中实现, 然而仍然可以有子程序:
虽说相当简陋,但也总比一遍一遍无穷次地重复写代码要好一些。
所以研究了如何用这个P子程序实现功能块的方法。 只有实现了功能块, 后面才有可能实现面向对象的标准化应用。
而这种子程序的缺点非常多,没有参数接口,没有INPUT, OUTPUT, TEMP , STATIC, 其实就是啥都没有。
那么就需要把这些功能全都逐一规划实现。
比如没有INOUT接口, 我们可以统一规划M100-M199为输入接口,而M200-M299为输出接口。所有FB均使用同一接口,可以实现在调用时结构的统一规范,易于使用。
那么每个FB逻辑内部, 需要对使用的公共M区(以及D区)进行备份保存现场,以及运行数据恢复。那么需要得到每个实例的UID标识, 以将静态数据保存到固定的存储区域。
然而也并不适合所有数据全部存储,需要部署安排一部分TEMP区域,否则所有数据都保存的话,在系统设备多的时候,D区很快会耗光。
我做三菱标准化的时候为什么曲折特别多?就是因为它的FB里面没有TEMP, 全靠STATIC VAR , 导致软元件消耗非常快,动辄一不小心就耗光。
而对于TEMP区,还需要考虑到子程序多重调用产生的堆栈和出栈的问题,同一个子程序内部,在调用了另外的子程序进入并回来后,TEMP的数据以及INOUT的数值都不应该丢失被冲掉。
即需要有一个堆栈层数的计量。
这种编程其实已经完全回到最古老的汇编语言的编程了。 而其实所有高级语言,以及PLC语言, 最终也都是经过编译后成为汇编语言并到机器码,才被CPU识别并执行。 所以是否支持面向对象的功能, 那是高级语言系统的区别, 到了机器代码层级,都一回事, 并没有什么区别。
比如我所规划的:
M5000-5099 100 BIT TEMP,M5100-5199 100bit INPUT,M5200-5299 100BIT OUTPUT,DM5300-5320 20WORD TEMP, 其中DM5300存放了当前UID的偏移量---堆栈保存到的D1100
D1000-1020 20WORD STATIC
D1000 参数给定/运行INPUT/OUTPUT
D1020 参数给定内部使用
D1040-1060 TEMP
---堆栈40wWORD保存到的D1200
D1060 运行值静态
有人会反驳, 标准化编程你不是反对用全局变量嘛? 这不还是规划使用了全局变量
放心, 我这里规划的全局变量,都是同一套变量在重复使用, 而且使用之前会保存现场值,使用之后会恢复现场值。
比如M5000的数据我用过了,然而如果有相邻的程序功能, 有人恰巧也用到了M5000,也不影响。(这里面又又出现了谈虎色变双线圈色又变的故事, 下回专门讲)
最终程序用到的只是D1000—D7999的数据区。 而且数据区的使用都是自动分配的不会发生呼吸干涉, 即便调试程序, 都不需要查阅数据区的使用情况。
如下是实现了定时器以及MOTOR块的情况:
以及电机块的实例化调用:
大学时代有学习过汇编语言, 考试成绩还不错。 然而工作这么多年,除了曾经解读加密软件的反汇编代码曾经接触过一点之外,一直没有机会用到。 没想到那点技能和理解,今天又用上了。
这个程序暂时不打算公开。因为并没有经过调试,还有很多错误。因为我并没有信捷PLC的真机,而信捷的软件里也没有仿真功能。 所以虽然我把架构搭好了,到真正能跑起来, 差的还很远很远。 要完全实现标准化烟台方法, 更是不知到哪年了。
也不打算做完整的培训例子教程,一方面不晓得同行的需求度有多高,我耗费心血做下来市场不认可, 也是白白浪费精力。 另一方面,这个的开发难度比起即便SMART和三菱,又高出了一个层级, 那么价格会比他们更高,而对于习惯使用廉价PLC的同行及工厂来说, 这部分费用肯定难以承受。
开发难度高,学习难度也更高了。 学习的门槛就更高。所以也不认为有推广的意义。 如果哪位玩汇编熟练的老手,想做同样的工作,看看我上面两张截图和说明, 估计自己也能做出来。
如果哪位手里有淘汰不用的迅捷PLC的硬件, 又非常想获得这套例子程序参考,可以跟我联系交换。 但无论如何必须接受一点:程序是不完整的, 一定有很多错误。所以你肯定是先接受了本文中提出的理论理念, 认为有可行性,才来加入学习。 而不是像行业中的某些人,拿到我书看到其中的TIA误写成TAI这样的错误,就破口大骂,抱怨书的内容垃圾, 甚至大有一种通过一个小错误全盘掀翻所有理论, 并逼你下跪认错的架势。 太令人不齿了。
其他的有应用信捷PLC, 或者其它类似的小型PLC如军创等的厂家, 如果有研发非标设备的需求, 希望能有协助开发标准化程度高一些的程序架构,现在可以联系合作了。
PLC的基本结构和作用
(此处已添加圈子卡片,请到今日头条客户端查看)一般 PLC 分为整体式和组合式两类:整体式机型大多应用于小型单机控制,其外形如图7.6所示,结构组成如图7.7所示;组合式机型应用于大型多机网络式控制,其外形如图7.8所示,结构组成如图7.9所示。
现以整体式PLC为例,说明其内部结构及各部分结构的作用。
图7.6 整体式PLC机型的外形
图7.7 整体式PLC结构组成示意图
中央处理单元
即CPU,它是PLC的运算、控制中枢。它按照PLC系统程序赋予的功能接收并存储从编程器键入的用户程序和数据;检查电源、存储器、I/O以及警戒定时器的状态,并能诊断用户程序中的语法错误。PLC的档次越高,所用的CPU的位数也越多,运算速度也越快,功能越强。
图7.8 组合式PLC 机型的外形
图7.9 组合式PLC 结构组成示意图
存储器
PLC配有系统存储器和用户存储器两种存储器。在系统程序存储区中存放着相当于计算机操作系统的系统程序,包括监控程序、管理程序、命令解释程序、功能子程序、系统诊断子程序等。由制造厂商将其固化在EPROM中,用户不能直接存取。它和硬件一起决定了该PLC的性能。用户存储器用来存放用户编制的控制程序。存储器常用类型有ROM、RAM、EPROM和EEPROM。
输入/输出单元
又称I/O模块或接口,PLC通过I/O单元与工业生产过程现场相联系。为了保证能在恶劣的工业环境中使用,输入输出口都有光电隔离装置,使外部电路与 PLC 内部之间完全避免了电的联系,有效地抑制了外部干扰源对PLC的影响,还可防止外部强电窜入内部CPU;在 PLC 电路电源和输入、输出电路中设置有多种滤波电路,可有效抑制高频干扰信号。
(1)开关量输入接口
PLC输入接口都采用光电耦合器为电流输入型,能有效地避免输入端引线可能引入的电磁场干扰和辐射干扰。在光敏输出端设置 RC滤波器,是为了防止用开关类触头输入时触头振颤及抖动等引起的误动作,因此使得PLC内部约有10ms的响应滞后。当各种传感器(如接近开关、光电开关、霍尔开关等)作为输入点时,可以用 PLC 机内提供的电源或外部独立电源供电,且规定了具体的接线方法,使用时应加注意。直流开关量输入接口原理及接线图如图7.10所示。
图7.10 直流开关量输入接口原理及接线图
有的PLC输入无须外接电源,称为无源式输入单元。
(2)开关量输出接口电路
PLC的输出形式主要有3种:继电器接点输出、晶体管输出和晶闸管输出。
① 继电器输出:开关速度低,负载能力大,适用于低频交直流负载的场合,如图7.11所示。
② 晶体管输出:开关速度高,负载能力小,适用于高频直流负载场合,如图7.12所示。
③ 晶闸管输出:开关速度高,负载能力小,适用于高频交直流负载场合,如图7.13所示。
图7.11 继电器输出原理及接线图
图7.12 晶体管输出原理及接线图
图7.13 晶闸管输出原理及接线图
提示
① PLC 输出接口是成组的,有汇点式和隔离式两种。每一组有一个COM口,只能使用同一种电源电压。
② PLC 输出负载能力有限,具体参数请阅读相关资料。
③ 对于电感性负载应加阻容保护。
④ 负载采用的直流电源小于 30V 时,为了缩短响应时间,可用并接续流二极管的方法改善响应时间。
电源
PLC的电源在整个系统中起着十分重要的作用,PLC配有开关稳压电源的电源模块,用来将外部供电电源转换成供PLC内部CPU、存储器I/O接口等电路工作所需的直流电源。同时,有的还为输入电路提供24V的工作电源,用于对外部传感器供电,避免由于外部电源污染或不合格电源引起的故障。小型PLC的电源往往和CPU单元合为一体,大、中型PLC都有专用电源部件。
扩展口
扩展口是PLC的总线接口,当用户所需的I/O点数超出主机的点数时,可以通过加接I/O扩展单元来解决,主机与I/O扩展单元通过扩展口连接,如图7.14所示。PLC具有多种I/O模块,常见的有A/D、D/A模块;另外有快速响应模块、高速计数模块、通信接口模块、温度控制模块、中断控制模块和定位控制模块等种类繁多、功能各异的专用I/O模块和智能I/O模块。针对不同的工业控制应用场合,选择I/O功能模块与基本单元连用,可充分发挥PLC灵活、通用、可靠、迅捷的优势。
外部设备接口
外部设备通过该接口与PLC联系,完成人机对话,如外存储器、EPROM写入器、人机接口(触摸屏)等,如图4.17所示。还可以通过此接口与专用编程器或计算机相连,进行编写 PLC 控制程序、输入程序、调试程序、修改程序以及在线监视PLC的工作状态等。
图7.14 PLC扩展外部设备连接方式图
(此处已添加圈子卡片,请到今日头条客户端查看)相关问答
Codesys用于什么PLC?
PLC软件编程工具CODESYS是一种功能强大的PLC软件编程工具,它支持IEC61131-3标准IL、ST、FBD、LD、CFC、SFC六种PLC编程语言,用户可以在同一项目中选择.....
plc脱机状态怎么回事?
1、用户修改了PLC上的PORT1口的通讯参数(请勿随意修改PORT1口的通讯参数,否则将会导致您的PC与PLC无法连接);2、USB转串驱动软件的安装不正确或者USB转串口...
西门子PLC300的mres代表什么意思-ZOL问答
在语名表编程中符号名前带“#”说明是程序中声明的变量。变量的类型有很多种...迅捷无线网络路由器300M怎么设置192浏览5回答尼康D90已有套头,请推荐适合...
电感接近开关NPN转PNP电阻怎么接?
PNP传感器输入高电平,NPN输入低电平。一般欧美品牌PLC接PNP型传感器(如西门子,施耐德,基恩士…),亚洲品牌PLC(如三凌,欧姆龙,迅捷…)接NPN传感器,PNP传感...P...
成都变频器维修中心在哪里_汽配人问答
[回答]有充足的零部件,包括大量变频器品牌的主板,驱动板,电源板,模块,IGBT等备品,有各种变频器品牌材料手册,能为客户提供迅捷,优质的变频器维修和保养服...
手机进水屏幕按一下动好几下是什么問題,还能修吗-ZOL问答
三菱fx1s的plc与迅捷触摸屏th765的通讯程序肿么写?9565浏览6回答《辐射4》88号避难所隐藏入口位置在哪隐藏入口位置分析8157浏览3回答为什么ps里的文...
新型灌装机怎么解决故障
[回答]知道了液体灌装机如何保养还不行,对于液体灌装机常见的故障维修,大家有不会的赶紧来围观,看了迅捷机械小编的详细介绍你一定会对液体灌装机有一个更...
液体灌装机生产线如何处理故障
[回答]知道了液体灌装机如何保养还不行,对于液体灌装机常见的故障维修,大家有不会的赶紧来围观,看了迅捷机械小编的详细介绍你一定会对液体灌装机有一个更...
打开3Dmax软件使用不到半小时便会出现蓝屏是怎么回事?-ZOL问答
三菱fx1s的plc与迅捷触摸屏th765的通讯程序肿么写?9565浏览6回答《辐射4》88号避难所隐藏入口位置在哪隐藏入口位置分析8157浏览3回答2345网址导航有...
全自动包装秤包装码垛?大神们,推荐一下!!采购包装码垛生...
[回答]包装机械上使用的自动化产品主要有控制系统,传动控制,运动控制,人机界面和传感器这几类,具体包括:控制系统:嵌入式产品、PLC,IPC,现场总线;传动控制...