标题：PLC编程
PLC编程简介
随着微处理器、计算机和数字通信技术的飞速发展，计算机控制已扩展到了几乎所有的工业领域。现代社会要求制造业对市场需求作出迅速的反应，生产出小批量、多品种、多规格、低成本和高质量的产品，为了满足这一要求，生产设备和自动生产线的控制系统必须具有极高的可靠性和灵活性，PLC编程正是顺应这一要求出现的，它是以微处理器为基础的通用工业控制装置。
工作原理
PLC是采用“顺序扫描，不断循环”的方式进行工作的。即在PLC运行时，CPU根据用户按控制要求编制好并存于用户存储器中的程序，按指令步序号(或地址号)作周期性循环扫描，如无跳转指令，则从第一条指令开始逐条顺序执行用户程序，直至程序结束，然后重新返回第一条指令，开始下一轮新的扫描，在每次扫描过程中，还要完成对输入信号的采样和对输出状态的刷新等工作。
PLC的一个扫描周期必经输入采样、程序执行和输出刷新三个阶段。
PLC在输入采样阶段:首先以扫描方式按顺序将所有暂存在输入锁存器中的输入端子的通断状态或输入数据读入，并将其写入各对应的输入状态寄存器中，即刷新输入，随即关闭输入端口，进入程序执行阶段。
PLC在程序执行阶段:按用户程序指令存放的先后顺序扫描执行每条指令，经相应的运算和处理后，其结果再写入输出状态寄存器中，输出状态寄存器中所有的内容随着程序的执行而改变。
输出刷新阶段:当所有指令执行完毕，输出状态寄存器的通断状态在输出刷新阶段送至输出锁存器中，并通过一定的方式(继电器、晶体管或晶间管)输出，驱动相应输出设备工作。[1]
PLC编程特点
PLC编程的应用面广、功能强大、使用方便，已经成为当代工业自动化的主要装置之一，在工业生产的所有领域得到了广泛的使用，在其他领域(例如民用和家庭自动化)的应用也得到了迅速的发展。
国际电工委员会(IEC)在1985年的PLC标准草案第3稿中，对PLC作了如下定义：“是一种数字运算操作的电子系统，专为在工业环境下应用而设计。它采用可编程序的存储器，用来在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令，并通过数字式、模拟式的输入和输出，控制各种类型的机械或生产过程。可编程序控制器及其有关设备，都应按易于使工业控制系统形成一个整体，易于扩充其功能的原则设计。”从上述定义可以看出，PLC是一种用程序来改变控制功能的工业控制计算机，除了能完成各种各样的控制功能外，还有与其他计算机通信联网的功能。
PLC编程的推广应用在我国得到了迅猛的发展，它已经大量地应用在各种机械设备和生产过程的电气控制装置中，各行各业也涌现出了大批应用PLC改造设备的成果。了解PLC的工作原理，具备设计、调试和维护PLC控制系统的能力，已经成为现代工业对电气技术人员和工科学生的基本要求。
PLC编程语言
PLC的用户程序，是设计人员根据控制系统的工艺控制要求，通过PLC编程语言的编制规范，按照实际需要使用的功能来设计的。只要用户能够掌握某种标准编程语言，就能够使用PLC在控制系统中，实现各种自动化控制功能。
根据国际电工委员会制定的工业控制编程语言标准（IEC1131-3），PLC有五种标准编程语言：梯形图语言（LD）、指令表语言（IL）、功能模块语言（FBD）、顺序功能流程图语言（SFC）、结构文化本语言（ST）。这五标准编程语言，十分简单易学。梯形图语言梯形图语言是PLC程序设计中最常用的编程语言。它是与继电器线路类似的一种编程语言。由于电气设计人员对继电器控制较为熟悉，因此，梯形图编程语言得到了广泛的欢迎和应用。　梯形图编程语言的特点是：与电气操作原理图相对应，具有直观性和对应性；与原有继电器控制相一致，电气设计人员易于掌握。　梯形图编程语言与原有的继电器控制的不同点是，梯形图中的能流不是实际意义的电流，内部的继电器也不是实际存在的继电器，应用时，需要与原有继电器控制的概念区别对待。指令表语言指令表编程语言是与汇编语言类似的一种助记符编程语言，和汇编语言一样由操作码和操作数组成。在无计算机的情况下，适合采用PLC手持编程器对用户程序进行编制。同时，指令表编程语言与梯形图编程语言图一一对应，在PLC编程软件下可以相互转换。图3就是与图2PLC梯形图对应的指令表。　指令表表编程语言的特点是：采用助记符来表示操作功能，具有容易记忆，便于掌握；在手持编程器的键盘上采用助记符表示，便于操作，可在无计算机的场合进行编程设计；与梯形图有一一对应关系。其特点与梯形图语言基本一致。功能模块图语言功能模块图语言是与数字逻辑电路类似的一种PLC编程语言。采用功能模块图的形式来表示模块所具有的功能，不同的功能模块有不同的功能。　功能模块图编程语言的特点：功能模块图程序设计语言的特点是：以功能模块为单位，分析理解控制方案简单容易；功能模块是用图形的形式表达功能，直观性强，对于具有数字逻辑电路基础的设计人员很容易掌握的编程；对规模大、控制逻辑关系复杂的控制系统，由于功能模块图能够清楚表达功能关系，使编程调试时间大大减少。顺序功能流程图语言顺序功能流程图语言是为了满足顺序逻辑控制而设计的编程语言。编程时将顺序流程动作的过程分成步和转换条件，根据转移条件对控制系统的功能流程顺序进行分配，一步一步的按照顺序动作。每一步代表一个控制功能任务，用方框表示。在方框内含有用于完成相应控制功能任务的梯形图逻辑。这种编程语言使程序结构清晰，易于阅读及维护，大大减轻编程的工作量，缩短编程和调试时间。用于系统的规模校大，程序关系较复杂的场合。顺序功能流程图编程语言的特点：以功能为主线，按照功能流程的顺序分配，条理清楚，便于对用户程序理解；避免梯形图或其他语言不能顺序动作的缺陷，同时也避免了用梯形图语言对顺序动作编程时，由于机械互锁造成用户程序结构复杂、难以理解的缺陷；用户程序扫描时间也大大缩短。结构化文本语言结构化文本语言是用结构化的描述文本来描述程序的一种编程语言。它是类似于高级语言的一种编程语言。在大中型的PLC系统中，常采用结构化文本来描述控制系统中各个变量的关系。主要用于其他编程语言较难实现的用户程序编制。
结构化文本编程语言采用计算机的描述方式来描述系统中各种变量之间的各种运算关系，完成所需的功能或操作。大多数PLC制造商采用的结构化文本编程语言与BASIC语言、PASCAL语言或C语言等高级语言相类似，但为了应用方便，在语句的表达方法及语句的种类等方面都进行了简化。　结构化文本编程语言的特点：采用高级语言进行编程，可以完成较复杂的控制运算；需要有一定的计算机高级语言的知识和编程技巧，对工程设计人员要求较高。直观性和操作性较差。
PLC编程算法
PLC编程算法一 开关量的计算[2]
1、开关量也称逻辑量，指仅有两个取值，0或1、ON或OFF。它是最常用的控制，对它进行控制是PLC的优势，也是PLC最基本的应用。
开关量控制的目的是，根据开关量的当前输入组合与历史的输入顺序，使PLC产生相应的开关量输出，以使系统能按一定的顺序工作。所以，有时也称其为顺序控制。而顺序控制又分为手动、半自动或自动。而采用的控制原则有分散、集中与混合控制三种。这是用OMRON的开关量编写的一个“单按钮启停”程序。
2、 模拟量是指一些连续变化的物理量，如电压、电流、压力、速度、流量等。
PLC是由继电控制引入微处理技术后发展而来的，可方便及可靠地用于开关量控制。由于模拟量可转换成数字量，数字量只是多位的开关量，故经转换后的模拟量，PLC也完全可以可靠的进行处理控制。由于连续的生产过程常有模拟量，所以模拟量控制有时也称过程控制。模拟量多是非电量，而PLC只能处理数字量、电量。所有要实现它们之间的转换要有传感器，把模拟量转换成数电量。如果这一电量不是标准的，还要经过变送器，把非标准的电量变成标准的电信号，如4—20mA、1—5V、0—10V等等。同时还要有模拟量输入单元（A/D），把这些标准的电信号变换成数字信号；模拟量输出单元（D/A），以把PLC处理后的数字量变换成模拟量——标准的电信号。所以标准电信号、数字量之间的转换就要用到各种运算。这就需要搞清楚模拟量单元的分辨率以及标准的电信号。
例如：PLC模拟单元的分辨率是1/32767，对应的标准电量是0—10V，所要检测的是温度值0—100℃。那么0—32767对应0—100℃的温度值。然后计算出1℃所对应的数字量是327.67。如果想把温度值精确到0.1℃，把327.67/10即可。
模拟量控制包括：反馈控制、前馈控制、比例控制、模糊控制等。这些都是PLC内部数字量的计算过程。
3、 脉冲量是其取值总是不断的在0（低电平）和1（高电平）之间交替变化的数字量。每秒钟脉冲交替变化的次数称为频率。
PLC脉冲量的控制目的主要是位置控制、运动控制、轨迹控制等。例如：脉冲数在角度控制中的应用。步进电机驱动器的细分是每圈10000，要求步进电机旋转90度。那么所要动作的脉冲数值=10000/（360/90）=2500。
PLC编程算法二 模拟量的计算
1、 -10—10V。-10V—10V的电压时，在6000分辨率时被转换为F448—0BB8Hex(-3000—3000)；12000分辨率时被转换为E890—1770Hex(-6000—6000)。
2、 0—10V。0—10V的电压时，在12000分辨率时被转换为0—1770Hex(0—6000)；12000分辨率时被转换为0—2EE0Hex(0—12000)。
3、 0—20mA。0—20mA的电流时，在6000分辨率时被转换为0—1770Hex(0—6000)；12000分辨率时被转换为0—2EE0Hex(0—12000)。
4、 4—20mA。4—20mA的电流时，在6000分辨率时被转换为0—1770Hex(0—6000)；12000分辨率时被转换为0—2EE0Hex(0—12000)。
以上仅做简单的介绍，不同的PLC有不同的分辨率，并且您所测量物理量实现的量程不一样。计算结果可能有一定的差异。
注：模拟输入的配线的要求
1、使用屏蔽双绞线，但不连接屏蔽层。
2、当一个输入不使用的时候，将V IN 和COM端子短接。
3、模拟信号线与电源线隔离 (AC 电源线，高压线等)。
4、当电源线上有干扰时，在输入部分和电源单元之间安装一个虑波器。
5、确认正确的接线后，首先给CPU单元上电，然后再给负载上电。
6、断电时先切断负载的电源，然后再切断CPU的电源。
PLC编程算法三 脉冲量的计算
脉冲量的控制多用于步进电机、伺服电机的角度控制、距离控制、位置控制等。以下是以步进电机为例来说明各控制方式。
1、步进电机的角度控制。首先要明确步进电机的细分数，然后确定步进电机转一圈所需要的总脉冲数。计算“角度百分比=设定角度/360°（即一圈）”“角度动作脉冲数=一圈总脉冲数*角度百分比。”
公式为：
角度动作脉冲数=一圈总脉冲数*（设定角度/360°）。
2、步进电机的距离控制。首先明确步进电机转一圈所需要的总脉冲数。然后确定步进电机滚轮直径，计算滚轮周长。计算每一脉冲运行距离。最后计算设定距离所要运行的脉冲数。
公式为：
设定距离脉冲数=设定距离/[（滚轮直径*3.14）/一圈总脉冲数]
3、步进电机的位置控制就是角度控制与距离控制的综合。
以上只是天天自动化简单的分析步进电机的控制方式，可能与实际有出入，仅供各位同仁参考。伺服电机的动作与步进电机的一样，但要考虑伺服电机的内部电子齿轮比与伺服电机的减速比。有些事情说起来比较简单，但实际应用就有难度了。请大家在实际的工作中领悟其中的道理
PLC编程入门
PLC是一种在工业中被广泛应用的自动控制元件。然而PLC应用与编程人才短缺已经成为制约我国自动控制领域发展的瓶颈。通过学习PLC可编程控制器程序设计使学员掌握可编程序控制器的工作原理和PLC控制系统硬件软件的设计方法，可编写复杂的PLC程序，为从事PLC控制系统的设计、调试和改造工作打下基础。可以独立承担相关项目的设计与开发。让您由一位电工升级为货真价实的工程师！[3]
随着现代工业设备自动化，越来越多的工厂设备将采用PLC人机界面等自动化器件来控制，因此设备自动化程度越来越高。对设备的维护人员的技术要求越来越严格。作为一名合格的技术员，需要掌握的技能也越来越多，越来越全面性，以此来满足自动化的发展及要求，　　学习PLC编程一点也不难。有的初学者在理论上花了很多功夫，结果半年下来还是没有把PLC搞懂，其实他们只是缺少了一些PLC的实践经验，只要再进行一些实际的梯形图编写、程序下载、调试等操作，增加对PLC的感性认识，很快就可以掌握PLC这项技术了。开始阶段可以先学习一种品牌的PLC，因为所有的PLC原理都是差不多的，掌握了一种PLC其它的只要翻阅一下手册也就能上手使用了。　　初学时可以编一些简单的梯形图，如触点的与、或、输出等，在PLC的机器里运行一下。成功了就会增加你学习的兴趣、和信心。然后再把PLC的主要功能逐个运用一次，比如高速计数器，你可以用PLC本身的脉冲输出端接到高速计数器的输入端，下载编好的梯形图，打开变量观察窗口，运行程序，观察计数的值是否正确。经过了这样的实践，你基本上知道PLC到底能做哪些事情了，在实际的工控应用中就能做到胸有成竹了。　　1. 电工原理和电机原理一定要懂，简单的就记背也要背下来，比如马达容量1KW2A，正反转，星三角接线，电线容量。电阻，电感，电容的特性等　　2. 液压和气动也要掌握，比如压力换算，压力和电流的比例换算，这在有压力控制上都要用到　　3. 电线截面要会看，线拿到手就知道几平方的，还有什么电器上该用什么线，比如马达就用4线的，3根主线1根接地。从变频器上出来的要用屏蔽线。　　4. 机修也要会做，特别是螺丝，一看就知道用几的内角扳手或外六角扳手（别小看了它，平常维修固定螺丝是少不了它的，这样能节约时间）　　5. PLC编程自己可以模拟编，简单的如红绿灯，控制小车走等　　6. 做人要会做，要谦虚，不可能你样样都会。　　7. 心态要好，保持一颗平常的心　　8. 平常要多干，就是在苦在累也要，这样技术才能学到手能解决实际问题，反之你只不过是纸上谈兵　　对于做项目的　　1. 四大常用PLC要会，基本指令和功能指令要熟　　2. 通讯接口要懂　　3. 电气市场行情要熟，好的和坏的要会区分，列如买到个2手40点的PLC怎么判断它是好的呢？　　4. 变频器和单片机要懂，变频调速和伺服控制要懂　　5. 常用电器元件和传感器要知道　　6. 要会CAD电气制图。