贺州西门子一级代理商
贺州西门子一级代理商
西门子S7-300系列PLC在编程时是否需要用到SCL
问:西门子S7-300编程必须要用到SCL吗,只用LAD怎么样?
答:S7 SCL是符合EN 61131-3(IEC 61131-3)标准的文本语言,也就是说支持该标准的任意厂家的PLC均可以使用与之相似的语言编程,支持强大的数据处理运算功能,一般深受IT人员的喜爱。SCL是STEP 7软件的一个可选附件包,标准版的只有 LAD,STL,FBD三种编程工具。它同STL、LAD、FBD属于同一个作用, SCL需要用单独的程序块来编写,需要编译后才能下载到CPU执行;LAD和STL可以在同一个程序块里编写。在STEP7没有安装SCL时,用其编辑的块都会以STL格式打开并显示。
S7 SCL 包含的语言结构与编程语言Pascal和C相类似,所以只要接触过Pascal、Delphi、vb等编程语言者,实现S7-SCL语言的快速入门是非常容易的,不必了解继电器原理,而且,即使是做逻辑控制也只需简单的编程语句就可以完成,所以S7 SCL特别适合于习惯于使用编程语言的人使用。这种语言适合于处理复杂的逻辑和大量的数学运算,由于其具有语言的编程结构,因此和S7的STL语句表编程方式比较起来有着更加方便的控制方式,可以这样说,只要是必须使用语句表的地方,我们均可以考虑使用SCL。
也许STL在执行时比SCL更加高效,但事实上也不一定,首先SCL可以编译成STL,同时 SCL设计时可以优化编程,而STL若运用不当,可能还会将低效率。当然在目前的这种系列的PLC上,效率对于我们来说已是次要的,我们更关心的是编程结构。就像在PC机上,舍弃了汇编语言,而主要采用C/C++等语言。总体来说,SCL适合于编写标准功能块,由于在维护中,它和STL一样,不象 Lad一样利于维护,因此这些标准功能块都应该有文档说明,以便用户了解其功能。STL源文件由文本组成,使用关键字在源文件中设定块结构、声明变量表和程序网络段,为将其编译成块,必须按一定规则编写其结构及语句。
当使用LAD(梯形图)/FBD(功能图)编程时,系统会自动添加严格的语法结构。而STL并不自动添加完整的语法结构(数据类型匹配,系统堆栈处理等)。应此LAD/FBD格式的程序可以转换为STL格式,而STL格式的程序并不一定可以转换为LAD/FBD。
SCL可以编译成STL。如果想再把STL*转换成LAD,难度很大,或者说不可能。把STL程序按功能组拆成逐个网络,然后或许大部分可以转换成LAD,但是无法保持程序的完整性,零零散散无法阅读。
做 PCS7项目,如果不学会SCL语言,做项目难度比较大,单纯使用CFC和SFC编程,由于工艺控制的复杂性和多样性,CFC图表会有大量的块,程序可读性不高,技术保密不了;用SCL编程可以把工艺联锁、工艺核心控制程序和工艺数据处理包装成一个FB块,CFC程序就简单多了。 PCS7是DCS系统,模拟量很多,而且程序一般都比较大。这种大型的程序通常都用语言工具来编写,例如SCL,CFC和SFC。他们编译以后生成STL,但是没有注释,阅读难度会非常大,一年都未必看的明白。工业控制软件发展到现在,大型程序通常都是用语言来编写,如SCL,CFC和SFC这样工作量会小很多很多。所以建议大家直接阅读学习SCL语言编写的程序。
对于STL、LAD、SCL等语言之间进行转换的问题,的确有些STL变成LAD是转不过来的。反过来行。LAD可以直接转SCL,但反过来不一定行,需要严格的按一定的格式写才能转回来,因为SCL是结构化编程语言,比LAD复杂
1.指令特点与编程
S7-300/400的转换指令功能相对单一,所有代码转换指令均为用于数据形式转换的指令,且不可以实现ASCII码、字符串的转换,也无译码功能。
S7-300/400的数据形式转换指令主要有如下特点:
①转换指令主要有BCDj、I-BCD、BCD_DI、DI—BCD、DI_RI、I_DI、ROUND、TRUNC、CEIL、FLOOR等,可以进行十六进制数与BCD之间的转换、整数与浮点数之间的转换、浮点数的“取整”等操作。
②与移位指令一样,S7-300/400的数据形式转换一般只能通过累加器1进行,当存储器需要移位时,应首先将存储器的内容移动到累加器l中。
③S7-300/400的移位操作只能对字、双字长的数据进行,不能用于字节。
数据形式转换指令的梯形图编程与S7-200相似,如需要将输入字IW20的BCD数据(十进制数据)转换为整数(十六进制数据)的程序格式如图10-6.6所示。
从图10-6.6的指令表程序可以看出,数据形式转换的步是将“源数据”IW20装入累加器l中,然后再对累加器l的内容进行转换,结果传送到目标存储器MW100中。
2.BCD转换指令
S7-300/400的数据形式转换指令BCD I、I__BCD、BCD—DI、DI__ BCD用于十六进制数与BCD
之间的转换。
编程需要注意以下几点:
①S7-300/400的BCD数据只能对字、双字长的数据进行,不能用于字节。
②指令BCD I、LBCD用于16位整数与BCD间的转换,由于数据带符号,因此只能转换3位BCD码,BCD数据的范围为-999~+999。指令BCD DI、DI__ BCD用于32位整数与BCD间的转换,同样带符号,因此只能转换7位BCD码,BCD数据的范围为-9999999~+9999999。
③16位整数的BCD存储格式为:
格式中的空余位(16位整数的bit14~bit12、32位整数的bit30~bit28),一般取与符号位相同的值,如:正数为“O”;负数为“l”。
④当16位、32位整数转换为BCD时,如果出现大于9的十进制数值(如1100等),或者转换后的数值超过了BCD格式允许存储的范围,将出现转换错误,并导致plc的停止。
3.整数、浮点数转换指令
S7-300/400的数据形式转换指令I DI、DI R用于16位整数与32位整数、32位整数与浮点数之间的转换;ROUND、TRUNC的作用、意义与S7-200相同,用于对浮点数的小数部位处理;CEIL、FLOOR是当浮点与整数相差很大时的两种不同处理方式。
IDI指令可以将16位整数转换为32位整数,其实质只是将符号位从原16位整数的bit15移到32位整数的bit31上,其余数据不变或增补0而已。
ROUND指令是将浮点数的小数部分四舍五入转换成双整数;TRUNC指令是将浮点数的小数部分舍去转换成双整数。
由于浮点数的数据表示范围要远远大于双字长整数。当浮点数的值大于整数时,通过CEIL指令,可以将浮点数转换为大于等于该浮点数的小整数;通过FLOOR指令,可以将浮点数转换为小于等于该浮点数的大整数