PLC编程到底要怎么写?

发布者:epsilon15最新更新时间:2024-07-02 来源: elecfans关键字:PLC  编程  伺服电机 手机看文章 扫描二维码
随时随地手机看文章

PART. 01

第一次接触PLC,是在海天公司给一台双色注塑机增加一个转轴功能,这个功能注塑机电脑上没有,所以外加了一个PLC,记得当时用的是三菱FX,这是我接触的第一个PLC,当时因为供应商提供了PLC、伺服电机、减速机等一套产品,所以程序也就让供应商写了。


到了倍福之后,由于整个办事处就我一个人,处于什么都干的状态,所以除了销售工作,也做技术支持。记得第一个项目是上海的同事写的代码,同事来现场一次,后面的维护我接过来。所幸TwinCAT2这软件比较简单,一来二去自己就上手了。   后来慢慢地也给客户写一点DEMO,用来给客户解释为啥IEC61131-3是一个简单的东西,不像想象的那么难,不要一想到ST语言就想到高级语言,等等诸如此类的问题。写着写着,也有了一些心得。   在聊聊这些心得之前,先说点题外话。我做过两件和工作不太相关的学习,一次是读研究生时,一个培训班来学校推销ISO内审员的培训,当时因为好奇去报了名,花了几百块钱听了一堆ISO的知识,记得讲课的是一位老干部。另一次是刚上班时,去报了一个计算机高级程序员的考试,看了几个月书,离及格线差了那么一大点(不是一小点)。但这两个事情,对我的影响比较大,ISO的学习,让我理解了凡事要有流程,流程要有标准,标准要有数据,数据要可追溯,这为后来理解工业4.0打下了基础,而高级程序员的考试,让我学到不少IT的知识,尤其是软件工程方面的知识,对于构建一个大的程序,还是有帮助的。  

下面的心得,和这两件事情,有比较大的关系,说穿了,就是多做纸面工作。

PART. 02

在写代码之前,我会先建个EXCEL表格,大约有这么几项(这里我虚拟了一个立体车库的项目,因为每天到办公室都会和立体车库打交道):   1、IO表,输入输出的模块型号,模块的位置,每个模块上每个点的定义,以及外面接的是什么元器件。对于一些电气CAD软件,会自动生成这个表,但我们还是建议用EXCEL做一份,以便存档。

45ede2b8-35de-11ee-9e74-dac502259ad0.png

2、变量表,一部分变量是有地址的,比如需要和上面提到的IO表进行对应,比如Modbus通讯。Modbus通讯需要定义变量地址,而IO对应的不需要在程序中指定,只要在系统配置中和硬件进行连接。另一部分变量是没有地址的,但也不能随便定义,要有一定的规则,以便阅读。

46003062-35de-11ee-9e74-dac502259ad0.png

3、结构体(Structure),结构体的设计,可以放在变量表之前,为了提高效率,我们会设计一些结构体来做数据类型,比如一个气缸,就可以设计一个结构体来表述,这个结构体会包含气缸的方向,磁性开关状态,以及两个方向的超时报警时间。在使用到气缸时,就可以用这个结构体类型来直接定义气缸,而无需去定义每个气缸设计的变量。

460f6b18-35de-11ee-9e74-dac502259ad0.png

必要的话,可以设计枚举变量,用来表述机器的状态。  

4、POU名称(Program Organization Unit程序组织单元)。POU有三种类型:程序(Program)、功能块(Function Block)、函数(Function)。在规划阶段,程序和功能块的构建是很重要的,功能块会降低很多重复工作,从而避免一些普遍性的错误(当然,错了也就都错了),程序的调用、状态的切换是否清晰可控,则决定了整个项目是否足够强壮,并可持久改进及维护。

461c9a86-35de-11ee-9e74-dac502259ad0.png

  5、工艺说明,包括各个工作步骤、步骤的衔接、条件的转换等。这个步骤,可以在EXCEL中做,也可以用word、PPT,但相比之下,EXCEL可能是个更好的选择,因为EXCEL的纸面是没有限制大小的,而word和PPT很容易遇到编辑范围太小的问题。

465e29a6-35de-11ee-9e74-dac502259ad0.png

当然,也可以在纸张上来画。我个人建议每个项目备一个A4的本子,和EXCEL配合使用。   做完这个表格之后,我习惯将变量表直接复制到TwinCAT中,因为在EXCEL中,很多重复工作可以直接选中表格单元进行拖拉复制,比如注释的“(* ”和“*)”,以及末尾的“;”,都是直接复制单元格的,而对于一些带序号的变量,如X0-X7,顺序复制即可,这会在大幅度减少工作量的同时,降低变量编写出错机率。   在程序编写过程中,除了用于for循环的累加数,以及用来调试时的一些标志之外,如果要增加有实际意义的变量名,必须先在EXCEL里增加,再复制到程序中。这有点强迫症,但事实证明,这个有用。   接下去就是建立各个POU,对于功能块,要写好输入变量和输出变量,而函数只需要有参数即可。写完了每个POU,记得在每个POU的主体敲个';',这样,即使我们一句代码也不写,也是可以编译通过的。如果这时候编译不通过,可以看看是不是哪里有手误了,因为这时候能错的地方都是系统保留字,或者是忘记敲';',注释的括号少了之类。

468b5eee-35de-11ee-9e74-dac502259ad0.png

  接下来是不是写代码?不是的,是先写注释,而且是全面注释,即在各个功能块中,先写好注释。在TwinCAT中,一个程序块只需要一个“;”,即可编译通过,我们上面已经敲好了';',所以不用担心没有代码会造成程序不能编译。

46981a3a-35de-11ee-9e74-dac502259ad0.png

我们回到前面第4点,如果流程图已经画好,那我们就把流程图搬到编程环境中,还是按照从大到小的原则,我们先把步骤编好,具体每一步里面做什么,可能远不如步骤之间怎么切换衔接来得重要。所以,在这个过程中,我们还可以用注释来替代代码,但别忘了在各种for、case中加上“;”。   最后一步,让我们在所有注释的地方,把代码写上。然后,编译一下。   如果有人可以把PackML的文档看一遍,会发现里面就有关于状态切换的图表,如果有兴趣,可以去找下PackML的文档。

46b44cd2-35de-11ee-9e74-dac502259ad0.png

如果你用的是TwinCAT或者Codesys的环境,我建议在写EXCEL表格和画流程图的时候,顺带把人机界面的草图也画了,我觉得集成人机界面的开发环境就是自动化工程师的大救星。人机界面和PLC在同一个环境内,意味着可以随时看到工程师想看到的内容,比如在调试时,需要看多个变量,那建在人机界面上会方便很多,不需要在程序中在线观察。   人机界面和PLC的集成,除了大大提高自动化工程师的幸福感之外,也会极大激发自动化工程师的创作欲望。比如有些DEMO,我会将逻辑动作的条件和输出状态都放在画面中,这样可以很清楚看到一个逻辑动作没有执行的原因,比如某几个动作有先后,那做个定时器或者多个定时器,将这些定时器的输出放在同一个画面,就可以明察秋毫了。   写完了程序,机器也动了,我们再来做一张表,就是修改记录,在这张表里,我们写下,某年某月某日,为了什么原因,我们改了哪个程序,怎么改的,修改后我们怎么测试的,测试的效果如何。  

而修改的程序,不建议直接在原程序上改,可以建一个新的POU,也可以在POU里写一个新的action,在对应的调用处改掉调用名字即可。这样,即使新的程序出了问题,也很容易改回(RollBack)到原来的程序。而新的代码中,记得在头部写好注释。

PART. 03

至此,我们回过头来看看,我们获得了哪些好处:  

1、我们有了一个清晰的名字列表,包括变量的、IO的、程序的 2、我们有了一个清晰的结构 3、所有的问题会有据可查。

上面这几点是针对程序本身的益处,而对于项目和企业而言,则有更大的意义:

1、通过分解,将代码部分的工作量比例降低了,这种逐步聚焦的方式,可以让工程师把精力放在最关键的地方。

2、便于沟通,在代码之前的这些工作,都可以和其他人共享,比如IO表部分可以和电气工程师以及电工沟通,程序流程部分可以用来和工艺工程师沟通。

3、便于维护,在移交给其他工程师,或者多人开发同一项目时会方便很多。如果没有注释,基本上工程师自己都会忘记原来写的什么。

4、便于更换平台,当需要更换一个控制器平台时,会发现,大部分工作是相通共用的,这会在切换平台时节约大量的时间。

后记   写这篇文章的原因,一方面是看了邓李老师的文章,也想谈谈自己的心得,另一方面,也是看到随着工业4.0的普及,以及我国OEM制造业正在向高端发展,PLC程序方面,也慢慢向IT方向发展。   相比于PC或者网络软件,自动化程序有几个特点:

1、使用对象比较窄,这造成了对程序的质量要求、功能要求都不是太高,机器能开就行。

2、代码量小,因为1的原因,以及机器本身的特性,PLC的代码量是很小的。

3、协作性很低,很多公司只有一个自动化工程师负责PLC程序,而且对程序质量要求很低,只要求机器能跑。

这些特点,造成了自动化行业,尤其是离散自动化行业,对于代码的质量基本是没有要求的。我记得大学时候买过一本《软件工程》的书,开头有个例子,是一个科幻电影里的飞船计算机艾尔出了软件故障的故事,随着现在机械设备制造业的发展,机器的销售越来越多,客户的需求也变得越来越定制化,这种软件的故障,在将来会慢慢出现,如何应对这个事情,唯一的道路,只能是从计算机行业去借一些经验来。   我作为一个销售来写这个文章,会有很多漏洞,但还是期望我的文字可以引起自动化工程师的共鸣,起到抛砖引玉的作用,大家一起为未来做些事情。


关键字:PLC  编程  伺服电机 引用地址:PLC编程到底要怎么写?

上一篇:基于工业机器人与PLC的自动化打磨集成工作站
下一篇:plc梯形图编程概念及指令是什么

推荐阅读最新更新时间:2024-11-09 21:29

基于MAXIM PLC技术的TWS解决方案
近年来,TWS无线耳机整体市场持续快速增长,市场越来越火爆,同时,包括智能终端、蓝牙技术、芯片技术的不断提升发展,进一步加快了TWS无线耳机的产品普及。而各个厂家都推出了自己的解决方案,本文介绍美信的独有方案。 系统架构 图1所示为本设计框图,包括两部分:充电盒和耳机。 充电盒采用3.7V@125mAH 锂电池供电,通过USB 对其充电,利用美信高性能的电量计芯片MAX77818对电池进行管理,由采用美信SIMO技术的集成电源管理芯片MAX17270 对系统供电。主控系统采用美信低功耗的Cortex M4 处理器MAX32660。 耳机采用3.7V小型锂电池供电,由充电盒的PLC MAX20340对耳机进行充电并通信,低功耗的电量
[嵌入式]
基于MAXIM <font color='red'>PLC</font>技术的TWS解决方案
51单片机实现通讯协议的串口通讯编程
我们以51单片机为例。51中一般针对串口通讯编程,通常采取中断接受查询发送的方式。中断函数在接受数据到达时被重复调用,其实是个重复入栈的过程,所以不宜将函数写的太长,函数太长一般会导致栈太深占用系统资源,二是处理时间过长,可能导致通讯出错。为了防止在处理数据过程中不受干扰,通常在处理接受数据前关闭中断,处理完后再开。 通常的的编程方式如下: static void UartInterruptService(void) interrupt 4 { ES = 0; RI = 0; uart_process(SBUF); ES=1; } 下面重点介绍数据处理函数 uart_process(SBUF); 其实很多时候,对于通讯
[单片机]
51单片机实现通讯协议的串口通讯<font color='red'>编程</font>
PIC C语言编程_PICC中变量修饰关键词
1) extern — 外部变量声明 如果在一个 C 程序文件中要使用一些变量但其原型定义写在另外的文件中,那么在本文件中必须将这些变量声明成“extern”外部类型。例如程序文件 code1.c 中有如下定义: bank1 unsigned char var1, var2; //定义了 bank1 中的两个变量 在另外一个程序文件 code2.c 中要对上面定义的变量进行操作,则必须在程序的开头定义: extern bank1 unsigned char var1, var2; //声明位于 bank1 的外部变量 2) volatile — 易变型变量声明 PICC 中还有一个变量修饰词在普通
[单片机]
基于变频与PLC控制的车床主轴数控系统设计
引言     随着计算机技术和信息技术的不断发展,作为国家装备工业基础的机床在向数字控制和智能控制的方向发展。数控机床是先进机械制造技术、数字控制技术、计算机技术、信息技术、微电子技术、自动控制技术、检测技术等先进技术的系统集成,只要改变零件加工程序就能加工所需要的产品,加工速度快、精度高、花样多,能快速满足市场需求。目前小型数控车床在玩具制造、小零件小五金加工、装饰广告等行业有着广阔的前景,为适应市场灵活多变的需求,开发设计各种小型数控车床能较好的满足一大批中小企业的多样化需求,走与中大型数控系统设备厂家不同的差异化道路。本文主要探讨以国产华中数控系统为控制软件,对C6140型车床主轴进行以变频技术与PLC控制技术为主的数控系统设
[嵌入式]
PLC如何应用在配电系统中
  1、引言   随着社会经济的发展,工业的迅速兴起,使得一些10KV配电系统大幅度增加,配电系统的简便性、可靠性、安全性、节能性、性价比显得尤其重要。   目前,传统的10KV配电系统还是采用继电器系统和分布监测计量、分布控制方式,而采用PLC(可编程序控制器)系统集中控制和集中监测计量方式,有利于提高配电系统的运行管理自动化水平,保证配电的安全稳定,还能减少运行人员的工作强度提,安全可靠。   2、继电器系统和PLC系统的比较   PLC(可编程序控制器)是近几十年来发展起来的一种新型工业控制器,由于它编程灵活,功能齐全,应用广泛比继电器系统的控制简单,使用方便,抗干扰力强,性价比高,工作寿命高,而其本身具有体积小,重量轻,耗
[嵌入式]
三菱FX PLC转以太网通过CHNet-FX与威纶触摸屏ModbusTCP通信案例
威纶通MT(ie)系列触摸屏通过以太网连接三菱FX和Q系列PLC,兴达易控CHNet-FX(Q)通讯模块为PLC提供以太网通讯接口。 配置方法如下: 1、 硬件连接 1) 将CHNet-FX连接到FX2NPLC; 2) 将CHNet-连接到Q00UPLC; 3) 将CHNet-FX和CHNet-Q的网口通过交换机连接触摸屏和电脑。 2、 CHNet通讯模块参数配置 1) CHNet-FX参数,如图配模块的IP地址:192.168.1.176,端口号:5551; 3、 触摸屏参数配置 1) 触摸屏选择MT8102系列; 2) 新增本机 PLC,选择FX3U(Ethernet) 3) 新增本机 PLC,选择QJ7E7
[嵌入式]
三菱FX <font color='red'>PLC</font>转以太网通过CHNet-FX与威纶触摸屏ModbusTCP通信案例
PLC编程优化设计使程序运行提速
  通过本方法优化可以极大的减少程序语句数,使plc程序更简洁、可读性更好,由于不需要做耗时的类型转换,程序运行效率也得到提高。且数学运算量越大,效率提高越明显。   缺点是要多占用两字节的内存,以后程序中不能使用VW0。但S7-200的RAM空间很大,一般是用不完的,以226为例,有多达10K的RAM,偶从来没有超过1K。这些RAM都是花钱买来的,不用白不用,不用也是浪费了。   同理,如果有字节型变量经常需要与字类型变量相互转换,让字节变量占用一个字的内存宽度浪费一个字节,避免类型转换。具体步骤如下:   1:根据工程实际需求,进行功能块规划,编写子程序   在PLC中子程序是为一些特定的控制目的编制的相对独立的程
[嵌入式]
伺服电机编码器的作用和功能是什么
伺服电机编码器是伺服电机系统中的重要组成部分,它的作用和功能对于整个系统的稳定性、精度和可靠性具有至关重要的影响。本文将详细介绍伺服电机编码器的作用、功能以及其在伺服电机系统中的重要性。 一、伺服电机编码器的作用 位置检测 伺服电机编码器的主要作用之一是实现对伺服电机转子位置的实时检测。编码器通过测量转子的旋转角度,将位置信号转换为电信号,从而实现对伺服电机的精确控制。这对于保证伺服电机的稳定性和精度具有重要意义。 速度检测 伺服电机编码器还可以实现对伺服电机转速的实时检测。编码器通过测量转子的旋转速度,将速度信号转换为电信号,从而实现对伺服电机的精确控制。这对于保证伺服电机的动态性能和响应速度具有重要意义。 电流检
[嵌入式]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved