在scl中如何置位?

五等一好男人


说一点个人意见:

在西门子PLC中有STL语言和SCL语言,相对于STL语句表编程来说SCL语言使用更少,SCL是Structured Control Language的缩写,也就是结构化控制语言的意思。在西门子PLC中SCL编程其实是创建了一个源文件,然后利用源文件去生成对应的数据块,而后在响应的程序块中调用生成后的这个程序!

就你这个问题,在SCL中如何置位其实是很简单,就是IF 条件A成立 THEN 位B就被置位,这样一句话就可以了,还是上图来讲一下。

这个图片就是我要生成FC1程序块的SCL程序的源程序,这个程序编译之后在STEP7软件中就会生成一个FC1的程序块。SCL编程是需要单独的一个安装组件安装后集成到STEP7系列软件中,因今天问题的主旨是SCL中的置位所以,我就不讲SCL组件的安装了。(前一段我写了一篇文章说如何在STEP7安装文件夹中找西门子的文档,里边我上传了我安装的软件的切图,不明白的可以去看看,或许你电脑就没有安装这个SCL安装包。)

--总之,这个图片就是SCL安装包安装后打开才能编辑的一个源文件编辑器,红圈①处我定义了FC1的2个输入点形参,红圈②处我定义了2个输出点形参。--当然输入和输出都是bool变量。

紫圈③处就是一个置位语句,X1=1的时候,就会使得Q1被SET为1。紫圈④处是一个Q2的状态始终等于X2状态的语句,相当于X2=1,Q2=1;X2=0,Q2=0。

来看一下源文件编译后生成的FC1在OB1中调用的情况吧:

这个图片是我组合的图片,上边部分可以看到这个项目只有2个程序块,OB1和FC1,OB1的创建语言就是LAD即梯形图,FC1的创建语言就是SCL。

图片的下边部分是OB1中调用FC1两次,可以看到FC1输入参数2个是X1和X2,输出参数是Q1和Q2还有一个返回值。上边我的SCL中X1对应Q1,X2对应Q2。

再来看一下程序执行的动态图,来看看Q1是否被置位了?

从这个动态图片应该可以看到,我点击M0.0让其为1后M1.0就被置位为1,无论我后边再怎么点击M0.0,M1.0都是为1的状态,因为SCL程序中没有复位的程序,所以置位后就一直为1了。

M0.1我点击时候M1.1随着M0.1的状态在改变,因此我在SCL中的注释是点动关系。

M0.2和M0.3也是和前边的状态一样,不过是第个FC1块的实参而已,因此他们的动作和前边的M0.0 M0.1一样。

想必到这里你已经知道SCL中置位程序的实现方法了,答题也就结束了。但是,还需要强调的是SCL中的符号, 如分号,冒号的录入,大家一定要小心,和C语言一样,如果少录或者录错,都会引起编译错误,我图上最后是0错误和0警告,所以如果要自己实验的朋友,如果有错,请和我的图片仔细对比,谢谢!


就说到这里了,希望对你有帮助,谢谢!


控制研究控


西门子PLC编程语言有以下五种:梯形图LAD,功能块图FBD,语句表STL,结构控制语言SCL,顺序功能图Graph。下面我们组态演示如何在SCL中置位以及注意事项。

首先,SCL是西门子PLC的结构控制编程语言,在其他的品牌例如三菱PLC中叫ST结构化文本,说法不同,但都是符合IEC61131-3标准的编程语言。西门子SCL是一种跨平台的语言,可移植性强,语法简单易学。它是由Pascal计算机语言演变而来。

Simatic Manager中需要安装独立的软件包才能组态SCL程序,而在TIA Portal中默认安装就有有SCL语言环境。我们以TIA Portal软件为平台演示。

第一步,新建一个test1项目如下图:

第二步,组态好硬件,创建PLC输入输出变量如下图所示:


第三步,在OB1里创建三段SCL程序(博途支持在梯形图里创建SCL程序段,但部分功能可能会受限,例如goto语句,可以在创建块时选选择SCL)。第一段程序表示I0.0为1时,Q0.0被置位;第二段程序表示I0.1为1时,Q0.1被置位,而I0.1为0时,Q0.1被复位;第三段程序表示将I0.3的值赋给Q0.3,效果和第二段程序一样。见下图:

第四步,启动仿真并且激活I0.0为1,I0.1为1,I0.2为1,见下图:

第五步,打开监视表,Q0.0,Q0.1,Q0.2都被置位为1,见下图:

第六步,取消激活I0.0,I0.1,I0.2,再查看监视表,会发现Q0.0仍为1,Q0.1和Q0.2都变为0,见下图:


总结以上可以看出,程序段1中当I0.0为1时,Q0.0被置位为1,如果想当I0.0为0时,Q0.0被复位,就要加else语句,见程序段2所示;如果想当I0.0为0且要满足其他条件才对Q0.0复位,那就要加elsif或 else if语句。


笨泽猫


IF conditions THEN

Tag1 := TRUE;

END_IF

这就相当于LAD中置位指令


分享到:


相關文章: