您的位置 首页 > 数码极客

【65535是2的几次方】西门子 PLC SCL编程讲解 1

今天开始解释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方面的文章,都迁移到那里。同样欢迎大家去阅读。

关于作者: admin

无忧经验小编鲁达,内容侵删请Email至wohenlihai#qq.com(#改为@)

热门推荐