不同的商家的PLC有不同的编程语言,但就某个商家而言,PLC的编程语言也就那么几种。下面,以西门子PLC的编程语言为例,说明一下,各种编程语言的异同。
1、顺序功能图(SFC-Seauential Fuction Chart)
这是位于其它编程语言之上的图形语言,用来编程顺序控制的程序(如:机械手控制程序)。编写时,工艺过程被划分为若干个顺序出现的步,每步中包括控制输出的动作,从一步到另一步的转换由转换条件来控制,特别适合于生产制造过程。
西门子STEP7中的该编程语言是S7 Graph。
2、梯形图(LAD-LAdder Diagram)
这是使用使用多的PLC编程语言。因与继电器电路很相似,具有直观易懂的特点,很容易被熟悉继电器控制的电气人员所掌握,特别适合于数字量逻辑控制。
梯形图由触点、线圈和用方框表示的指令构成。触点代表逻辑输入条件,线圈 代表逻辑运算结果,常用来控制的指示灯,开关和内部的标志位等。指令框用来表示定时器、计数器或数学运算等附加指令。
在程序中,左边是主信号流,信号流总是从左向右流动的。
不适合于编写大型控制程序。
3、语句表(STL-STatement List)
是一种类似于微机汇编语言的一种文本编程语言,由多条语句组成一个程序段。语言表适合于经验丰富的程序员使用,可以实现某些梯形图不能实现的功能。
4、功能块图(FBD-Function Block Diagram)
功能块图使用类似于布尔代数的图形逻辑符号来表示控制逻辑,一些复杂的功能用指令框表示,适合于有数字电路基础的编程人员使用。功能块图用类似于与门、或门的框图来表示逻辑运算关系,方框的左侧为逻辑运算的输入变量,右侧为输出变量,输入、输出端的小圆圈表示“非”运算,方框用“导线”连在一起,信号自左向右。
5、结构化文本(ST-Structured Text)
结构化文本(ST)是为IEC61131-3标准创建的一种专用的编程语言。与梯形图相比,它实现复杂的数学运算,编写的程序非常简洁和紧凑。
STEP7的S7 SCL结构化控制语言,编程结构和C语言和Pascal语言相似,特别适合于习惯于使用语言编程的人使用。
选用的4RTD模块,三路实际按照三线制正确接入,另外1路空(已经用一个100欧电阻接到未接的输入通道4上)。问题如下: 1.显示温度值比实际分度表查的误差大,比如输入RTD 阻值108欧姆,查分度表对应21度。但显示为18度左右。(程序里AIW* 经过处以10后的值) 2.而且还有一个现象,测量S7-200RTD模块端子,热电阻值跳变。断开接线,单独测量外部RTD 电阻,并不跳变。 究竟是什么原因? 答:1.EM232 RTD模块与PT100(3线制)连接设置DIP开关SW1至SW8设为0,为三线制摄氏度。 EM231 RTD模块的详细接线和DIP开关设置请参照《S7-200 可编程控制器系统手册》中的附录,请参考我上传的抓图。 2.通常判断热电阻的好坏,可以用精度高的万用表测试阻值来判断,简单方法用手握住热电阻,测量阻值有变化,并在112欧姆左右视为正常(阻值随温度有变化即使正负1、2欧姆误差也可视为正常)。在实际使用中一定要注意接线,往往铂热电阻到plc或仪表的接入端距离很长,会达到几十米甚至几百米,这时候导线的阻值就不能不考虑在内了。所以切不可在PLC或仪表端把两线并三线接入PLC或仪表,一定要从PT100传感器三线接出,并三线接入PLC或仪表,否则必然存在温度虚高。 3.PT100采用标准型时,程序直接读PIW数值后,先转化为整型,再转化为双整型,后转化为实型,然后除以10.0即为实际温度值(气候型热电阻就除以100.0)。 按照上述方法,如果热电阻测量温度与实际温度还是不符,如果是线性误差,我通常是加一个温度修正,见上传图片。 1,热电阻EM231DIP开关设定2 2,热电阻EM231DIP开关设定1
3,温度修正子程序
|
西门子plc特殊标志继电器(SM) 有些辅助继电器具有特殊功能或存储系统的状态变量、有关的控制参数和信息,我们称为特殊标志继电器。用户可以通过特殊标志来沟通PLC与被控对象之间的信 息,如可以读取程序运行过程中的设备状态和运算结果信息,利用这些信息用程序实现一定的控制动作。用户也可通过直接设置某些特殊标志继电器位来使设备实现某种功能。 特殊标志继电器用“SM”表示,特殊标志继电器区根据功能和性质不同具有位、字节、字和双字操作方式。其中SMB0、SMB1为系统状态字,只能读取其中的状态数据,不能改写,可以位寻址。系统状态字中部分常用的标志位说明如下: SM0.0:始终接通; SM0.1:扫描为1,以后为0,常用来对程序进行初始化; SM0.2:当机器执行数学运算的结果为负时,该位被置1; SM0.3:开机后进入RUN方式,该位被置1一个扫描周期; SM0.4:该位提供一个周期为1分钟的时钟脉冲,30秒为1,30秒为0; SM0.5:该位提供一个周期为1秒钟的时钟脉冲,0.5秒为1,0.5秒为0; SM0.6:该位为扫描时钟脉冲,本次扫描为1,下次扫描为0; SM1.0:当执行某些指令,其结果为0时,将改位置1; SM1.1:当执行某些指令,其结果溢出或为非法数值时,将改位置1; SM1.2:当执行数学运算指令,其结果为负数时,将改位置1; SM1.3:试图除以0时,将改位置1; S7-200中SM0.0的用法: 1、SM0.0在程序运行时始终为ON。 2、SM0.0是一个无条件的常闭触点,用来启动无条件运行的指令。 只要上电,SM0.0必然是“1”。因此程序中那些不受任何条件限制,必须要执行的指令就用它作为触发触点。 3、问:程序有时要在指令前加SM0.0,为什么不直接连在母线上,不是一样吗? 佳答案: 因为,S7-200的指令是不能直接连在“母线”上的,这不符合语法要求。 SM0.0是不可控的触点,适用于无条件触发的场合,并非每个指令都需要SM0.0。在其它场合,要用可控制的触点来触发指令,如I0.0、M0.0或各种比较指令等等。如果没有可控触点可用,就只能用SM0.0。 其他答案: a、S7200编程中有规定,在输出类指令前必须有触点指令,有的时候输出指令不需要条件直接输出为1,但为了满足这样的编程约定就串连常为1的sm0.0在前面。 b、不同PLC厂家都有自己语法规定,SIEMENS S7-200梯形图就这样要求的,不能母线直接连输出指令(或子程序调用)。 c、一个程序用不用SM0.0在于多方面的需要,如果你不需要也能完成控制要求那不用当然好了。不过对于一些指令你还是非用它不可呢!另外在调试程序时它还是你的好帮手呢! 基本指令 一 关于状态字(SM) 01 SMB0包括8个状态位(SM0.0/SM0.1/SM0.2/SM0.3/SM0.4/SM0.5/SM0.6/SM0.7) 02 SMB1 包含了各种潜在的错误提示,可在执行某些指令或执行出错时由系统自动对相应进行置位或复位. 03 SMB2 在自由接口通信时,自由接口接收字符的缓冲区. 04 SMB3 在自由接口通信时,发现接收到的字符中有奇偶效验错误时,可将SM3.0置位. 05 SMB4 标志中断队列是否溢出或通信接口使用状态. 06 SMB5 标志I/O系统错误. 07 SMB6 CPU模块识别(ID)寄存器. 08 SMB7 系统保留 09 SMB8-SMB21 I/O模块识别和错误寄存器,按字节对形式(相邻两个字节)存储扩展模块0-6的模块类型、I/O类型、I/O点数和测得的各模块I/O错误. 10 SMB22-SMB26 记录系统扫描时间. 11 SMB28-SMB29 存储CPU模块自带的模拟电位器所对应的数字量. 12 SMB30-SMB130 SMB30为自由接口通信时,自由接口0的通信方式控制字节;SMB130为自由接口通信时,自由接口1的通信方式控制字节;两字节可读可写。 13 SMB31-SMB32 存储器(EEPROM)写控制. 14 SMB34-SMB35 用于存储定时中断的时间间隔. 15 SMB36-SMB65 高速计数器HSC0、HSC1、HSC2的监视及控制寄存器. 16 SMB66-SMB85 高速脉冲输出(PTO/PWM)的监视及控制寄存器. 17 SMB86-SMB94 自由接口通信时,接口0或接口1接收信息状态寄存器. 18 SMB186-SMB194 自由接口通信时,接口0或接口1接收信息状态寄存器. 19 SMB98-SMB99 标志扩展模块总线错误号. 20 SMB131-SMB165 高速计数器HSC3、HSC4、HSC5的监视及控制寄存器. 21 SMB166-SMB194 高速脉冲输出(PTO)包络定义表. 22 SMB200-SMB299 预留给智能扩展模块,保存其状态信息.
|