西门子plcscl编程方法(西门子PLCSCL编程讲解)
西门子plcscl编程方法(西门子PLCSCL编程讲解)图1 Q0.0 状态赋值Bool类型的赋值比较灵活,可以采用如下几种方式,有不明白的可以留言。基本数据类型:Bool(布尔类型)Bool类型是我们最常用的类型之一,比如输入信号I0.0 输出信号Q0.0 都是Bool类型。Bool类型变量只有两种状态,True 或者 False ,类似线圈输出的闭合和断开,是一样的概念;
今天要开始讲解SCL了,很多PLC编程员都害怕SCL,觉得是很难的东西。我前面说过拥有初中以上学历的人便可以学会,这不最近有个新闻,小学生要开始推广python编程了。各位,小学生都开始学python了啊,你一初中及以上学历的人好意思说自己不会SCL吗??
SCL适用的地方很多,套用一句话,有人的地方便有江湖,那么有程序的地方便有SCL。梯形图支持的,SCL基本都支持。SCL程序最常用的地方就是对数据进行处理,比如模拟量采样数据整理,通信数据收发的解析,会给你带来很大的便利性。
SCL全称为structured Control Language(结构化控制语言),是一种类似Pascal或者Basic的语言。西门子的SCL编程语言针对PLC进行了特别的优化,使其不但具有高级语言的循环、分支、假设、数组和函数等功能,还具有PLC的典型元素(输入、输出、定时器、计时器等等)。学习SCL 首先要了解变量的类型定义,所以这一期主要讲解SCL支持的变量类型。
注:由于1200和1500的数据变量类型更为丰富,有些东西不适合300/400,详细内容见帮助;
基本数据类型:
Bool(布尔类型)
Bool类型是我们最常用的类型之一,比如输入信号I0.0 输出信号Q0.0 都是Bool类型。Bool类型变量只有两种状态,True 或者 False ,类似线圈输出的闭合和断开,是一样的概念;
Bool类型的赋值比较灵活,可以采用如下几种方式,有不明白的可以留言。
图1 Q0.0 状态赋值
Byte(字节类型)
Byte类型变量数值变量范围是0-255,我们常见的%IB0 %QB0,就是Byte类型。Byte类型占有8个二进制位,所以IB0,QB0,我们常常用来表示I0.0...I0.7 Q0.0...Q0.7的状态。换句话说,我们通过对QB0的状态进行赋值,可以改变Q0.0..Q0.7某一位的状态。
图2 QB0 状态操作
对Byte类型变量进行的操作,我们需要记住一点的是,变量范围是0..255 也就是2的8次方-1 所以当你对其赋值超过范围的时候,便会存在一种现象叫做溢出,上图中便存在溢出现象,具体结果,请读者自己思考。
WORD dword(字类型,双字类型)
word和dword的区别是多了一个字母d,字母d的意思double 意为双倍。word类型占16个二进位,表示的数据范围为0..65535 即2的16次方-1,dword最大范围便是2的32次方-1。word类型占有2个字节,dword占有4个字节。我们常见的%IW0,%ID0分别是word和dword类型,代表什么范围的输入信号状态位呢?请读者自己思考。
SINT USINT INT UINT DINT UDINT LINT ULINT(各种整型变量)
上述变量的基本类型其实为INT,然后是各种变体。INT类型占用16位,因为是有符号类型,所以0-14位代表数值,第15位代表符号,第15位为"0"代表正,为"1"代表负,其表示范围为-32768 到 32767。我们来看一下 3785用二进制如何表示:
INT前面如果加一个U,变成了UINT类型,代表的是无符号整型,所以其取值范围为0到65535和WORD类型范围一致,都是占用2个字节;
INT前面的S表示这是一个short int类型,短整型,其占用1个字节,代表的数据范围是-128到127;
INT前面的D表示这是一个double int类型,占用4个字节,表示范围是-2147483648 到 2147483647;
INT前面的L表示这是一个long int类型,占用8个字节,表示范围是-9223372036854775808 到 9223372036854775807。
UINT UDINT ULINT,不再叙述,具体内容请查阅手册。
REAL LREAL(单精度浮点数和双精度浮点数)
REAL为单精度类型浮点数,占用4个字节,表示范围 1.175495e-38 到 3.402823e 38,有效位数为7位,可以精确到小数点后面6位。
LREAL为单精度类型浮点数,占用8个字节,表示范围 2.2250738585072014e-308 到 1.7976931348623158e 308
,有效位数为16位,可以精确到小数点后面15位。
我们常用的是Real类型浮点数,如果REAL无法满足精度要求,则要考虑使用LREAL。
复杂数据类型
struct(结构类型)
struct 类型主要用于存储复合类型数据,比如一个人,他有性别,年龄,身高等特点。当一个变量类型为"人"时,我们可以获取和设定该人的某些信息。
图 4 Struct 结构类型
图5 结构Person的使用
Array(数组类型)
数组类型主要用于存储同一类型的数据,比如Int Real 或者刚才定义的Struct 类型,进行批量处理,在For循环中经常使用。
举一个简单的例子,比如我每隔一秒采样一次模拟量数据,需要采样一分钟,然后计算一分钟内平均值,用数组来做就非常方便。
图6 数组声明
在上面的变量表中,我们定义了word 类型数组,数量为60个,数组索引地址从0开始。
图7 计算采样平均值
在上面SCL程序中,每隔1秒会定时采集模拟量输出通道值,然后60后计算平均值。通过FOR循环和数组可以很方便的实现此。
结束语
SCL的常用数据类型就讲到这里,下一次会讲解SCL常用语句,欢迎阅读和留言,并指出错误。欢迎大家关注我的另外一个平台,gongz hao 为 plcteacher 后面PLC方面的文章,都迁移到那里。同样欢迎大家去阅读。