第四章PLC的编程语言与指令系统12020/7/6第一节PLC的编程语言编程语言——程序表明所采用的方式现代PLC通常采用以下几种编程语言:2020/7/62一、梯形图(LadderDiagram)及其格式特点——简单、直观、易学易懂、应用最为广泛、最受电气技术人员欢迎逻辑电路构成——常开接点、常闭接点组合功能——逻辑运算、算术运算、数据传送、变换与外部输出表达形式——类似于继电器线路图一个接触器的启、停控制线路驱动一个逻辑线圈或功能指令块2020/7/63继电器线路图与梯形图有两个重要区别:1)继电器线路图为并行工作方式梯形图为串行工作方式2)继电器线路图中常开、常闭接点的数量有限梯形图中各类软器件用于内部编程的常开、常闭接点使用次数不受限制2020/7/64另外:——在梯形图左右两侧的直线称为左右母线相当于继电器线路图中的左右电源线——与左母线相连的控制线路通常是一个由常开、常闭接点组成的逻辑电路——与右母线相连接的是输出线圈、其他各类软器件的逻辑线圈或功能指令块——在梯形图中右母线有时也可以省略。2020/7/65二、指令语句表及其格式(语句表)——是梯形图的一种派生语言——类似于汇编语言但更简单表答——助记符形式的各类指令语句来描述梯形图的逻辑运算、算术运算、数据传送与处理或程序执行中的某些特定功能基本格式——操作码+操作数——与梯形图之间有着严格的一一对应关系——特点是便于用户程序的输入、读出与修改2020/7/66MOVX0X1Y0Y0示例:PLC梯形图M100T0Y0K100D100915K123···2020/7/67步序操作码(助记符)操作数(操作件号)指令功能12345691015...LDANIOROUTANDOUTKLDMOVKD....X0X1Y0Y0M100T0123X31210010....从母线开始取X0常开触点串联X1常闭触点并联Y0常开触点驱动Y0线圈串联M100常开触点连续驱动T0线圈(3步)设定定时器延时值为12.3s从母线开始取X3常开触点16位数据传送(功能号12,为5步指令)十进制常数100为源数据地址编号为10的16位数据寄存器为目标数示例:指令语言表2020/7/68三、顺序功能图及其格式(SFC)——近年国际电工协会(IEC)大力推广的新编程标准——顺序功能图又称为功能表图或状态转移图原理——将一个完整的控制过程分解为若干个阶段(状态)——各阶段有不同的动作或其他各种控制内容——阶段之间有一定的转换条件——一旦条件满足就实现状态的自动转移——上一阶段结束——下一阶段动作开始直至完成整个过程的控制要求2020/7/69S21S20S2M8002自动方式初始状态状态转移开始原始位置条件夹具夹紧Y0下降X1下限位T0K10机械手自动方式下状态转移图(a)M8041M8044SETY1S22T2上升T0S23T3右移X2上限位122020/7/610S25夹具放松T1K10机械手自动方式下状态转移图(b)RSTY1S26Y2上升X1S27Y4右移X4左限位S24Y0下限X3右限位12T1X22020/7/611四、级式编程语言——是类似功能图的图形编程语言——沿用了梯形图编程方法——在PLC内部开发了供编程使用的通用与专用编程元件和指令(状态元件、级式指令)2020/7/612110级式语言图与语句表程序S10转移目标10SG转移条件Y1Y1010JMPS5本级处理2020/7/613五、逻辑图(功能块图)编程语言——是一种图形编程语言——采用逻辑电路规定的“与”、“或”、“非”等逻辑图符号依控制顺序组合而成——是国际电工协会(IEC)颁布的PLC编程语言之一2020/7/614Y30逻辑符号图(功能块图)程序X3X1X2ORNOTAND2020/7/615六、高级编程语言——中、大型PLC已采用BASICFORTRANPASCALC等高级语言的PLC专用编程语言2020/7/616第二节PLC的基本指令及其编程应用一、PLC的基本指令系统1、基本指令——LD(取)、LDI(取反)OUT(输出)LD——取用指定元件的常“开”触点;LDI——取用指定元件的常“闭”触点。(起始取指令)OUT——是线圈输出指令——是程序执行的结果——总是出现在一个逻辑行的末2020/7/617指令助记符指令功能操作数程序步数LD(Load)从公共母线开始取用常开接点(取)X、Y、M、S、T、C1LDI(LoadInverse)从公共母线开始取用常闭接点(取反)X、Y、M、S、T、C1OUT线圈驱动(输出)线圈并联可连续使用Y、M、S、T、C(T、C后紧跟常数)Y、M1S特殊M2T3C3-5接点取用与线圈输出指令2020/7/618X1地址指令数据00000000010000200003000040000700008LDOUTLDIOUTOUTLDOUTX1Y1X2M101T2K20T2Y2LD、LDI、OUT指令的应用X2T2027Y1M101T2K20Y2写母线相连驱动指令驱动(定时器)指令设定常数,延时设定2s与母线相连驱动指令2020/7/619X1Warning:输出线圈重复使用的程序执行Y3X2Y3Y4Y3输出处理Y3=OFFY4=ON输入处理X1=ONX2=OFF1st2nd2020/7/6202、逻辑运算指令——AND(与)——ANI(与非)——OR(“或”)——ORI(“或非”)——ANB(块“与”)——ORB(块“或”)AND——串联一个常“开”触点;ANI——串联一个常“闭”触点。(“与”“与非”是单个触点的串联指令)2020/7/621指令助记符指令功能操作数范围占用程序步数AND串联一个常开接点(与)X、Y、M、S、T、C1ANI串联一个常闭接点(与非)X、Y、M、S、T、C1OR并联一个常开接点(或)X、Y、M、S、T、C1ORI并联一个常闭接点(或非)X、Y、M、S、T、C1ANB(AndBlock)两块电路串联(块与)无1ORB(OrBlock)两块电路并联(块或)无1逻辑运算指令2020/7/622X1地址指令数据0000000001000020000300004000050000600007LDANDOUTLDANIOUTANDOUTX1X2Y5X3X4Y6X5Y7AND、ANI指令的应用X4Y5Y6Y7串联常开接点串联常闭接点X2X3X5032020/7/623X1X4Y5Y7Y6X2X3X503Warning:不推荐,需要用到栈命令2020/7/624OR——并联一个常“开”触点;ORI——并联一个常“闭”触点。(“或”“或非”是单个触点的串联指令)ANB、ORB——是块“与”“或”指令——用于程序块的串联或并联连接——该指令无操作数。2020/7/625X1地址指令数据000000000100002000030000400005000060000700008LDORORIOUTLDORANIORIOUTX1X2M105Y1X3M100X4M110M100OR、ORI指令的应用M105X304Y1M100并联接点并联接点X2M110M100X42020/7/626X0不推荐程序000000000100002000030000400005000060000700008LDANILDANDLDIANDORBORBOUTX0X1X2X3X4X5←←Y5ORB指令的应用X4X1Y5X2X3X5推荐程序000000000100002000030000400005000060000700008LDANILDANDORBLDIANDORBOUTX0X1X2X3←X4X5←Y52020/7/627X0地址指令数据00000000010000200003000040000500006LDORLDIORANBOROUTX0X1X2X3X4Y0ANB指令的应用X3Y0X2X1X42020/7/6283、内部信息与器件状态处理指令MPS、MRD、MPP;LDP、LDF、ANDP、ANDF、ORP、ORF;PLS、PLF、SET、RSTMPS、MRD、MPP——多重输出指令——用于多重输出电路2020/7/629MPS——指令将接点状态储存起来(进栈)MRD或MPP——指令读出——对于同一个接点状态MRD指令可以多次使用读出后栈内容不变——各层内容也不移动MPP——指令只能使用一次——读出后栈内容消失(全零)MPS与MPP——必须成对使用且连续使用应少于11次注意2020/7/630信息与器件状态处理指令指令助记符指令功能操作数程序步数MPS(Push)进栈无1MRD(Read)读栈无1MPP(Pop)出栈无1PLS(Palse)信号上升沿微分输出(一个扫描周期)Y、M(特殊M除外)2PLF信号下降沿微分输出(一个扫描周期)Y、M(特殊M除外)2SET被操作数元件置位并保持Y、M、SY、M1S、特殊M2RST(Reset)被操作数元件复位并保持或清零Y、M、SD、V、Z、T、CY、M1S、T、C、特殊M2D、V、Z、特殊D32020/7/631指令助记符指令功能操作数程序步数LDP取脉冲上升沿指令X、Y、MS、T、C2LDF取脉冲下降沿指令ANDP与脉冲上升沿指令ANDF与脉冲下降沿指令ORP或脉冲上升沿指令ORF或脉冲下降沿指令2020/7/632X000X001X002X006X007X010指令数据LDANDMPS(状态入栈)ANDOUTMPP(状态出栈)OUTLDMPSANDOUTMPPANDOUTLDMPSANDOUTMRDANDOUTMRDANDOUTMPPANDOUTX000X001X002Y000Y001X003X004Y002X005Y003X006X007Y004X010Y003X011Y006X012Y007栈存储器与多重输出指令的应用X003X004X005MPSMPPX011X012MPSMRDMRDMPP...MRDMPSMPP0714123nY0Y1Y2Y3Y4Y5Y6Y7MPSMPP2020/7/633X000X001Y0X002X005X007X010指令数据LDMPS(状态入栈)LDORANBOUTMRD(状态读栈)LDANDLDANDORBANB×OUTMPPANDOUTLDORANBOUTX000X001X002Y000X003X004X005X006Y001X007Y002X010X011Y003一层栈电路Y1X003X004Y3X006Y2X011MPSMRDMPP2020/7/634X000X001Y0X002X004X006指令数据LDMPS(状态入栈)ANDMPSANDOUTMPPANDOUTMPPANDMPSANDOUTMPPANDOUTX000X001X002Y000X003Y001X004X005Y002X006Y003二层栈电路Y1X003Y3X005Y2MPSMPPMPSMPPMPPMPS2020/7/635X001X002Y0X003指令数据LDMPS(状态入栈)ANDMPSANDMPSANDMPSANDOUTMPPOUTMPPOUTMPPOUTMPPOUTX000X001X002X003X004Y000Y001Y002Y003Y004四层栈电路Y1X004MPSMPSMPPMPPMPSMPSY2Y3MPPX000Y4MPP2020/7/636指令数据LDPORPOUTLDANDPOUTX00X01M0M8000X02M1X00X01M8000LDP、LDF指令应用M0X02M1X00X01X02M0M1一个扫描周期一个扫描周期一个扫描周期2020/7/637指令数据LDFORFOUTLDANDFOUTX00X01M0M8000X02M1X00X01M8000LDP、LDF指令的应用M0X02M12020/7/638PLS与PLF——脉冲输出指令——被操作元件的脉冲输出宽度为一个程序扫描周期PLS(上升沿微分)——在信号的上升沿输出PLF(下降沿微分)——在信号的下降沿输出PLS、PLF——不能应用于输入继电器X、