TIA SCL 编程
Structured Control Language 是一种基于文本的结构性高级语言。它主要是简化了数学计算和复杂数据处理过程的任务。
(资料图片)
功能:
SCL有高级语言的功能:
循环 选择 支路分布 也有PLC特定的功能:
位访问,位存储,计时器,计数器; 访问符号表 数据块读取。 不像STEP7基于SCL v5.3,在TIA Portal里面不在有SCL 源文件,也就是说文本块“Sources”就不再存在了。
每一个单独的语句主要有为三种类型:
赋值语句: 用来给一个标签赋值
控制语句 用来一个支路编程或者重复的语句
子程序调用 用来处理功能和功能块
注意事项:
每一条指令都要用分号;结尾;
语句中的每一个变量都必须是声明过的。
一行的注释使用://
多行的注释使用:*………………..*
操作数和数据类型转换
算数运算符
算数运算符可运算的数据类型是INT, DINT和REAL(不包括:BOOL, WORD, DWORD,CHAR,STRING)
数据类型转换
默认数据类型转换
编译的时候自动插入 位数据类型:BOOL->BYTE->WORD->DWORD 数字数据类型:INT->DINT->REAL 明确的数据类型转换
转类型的类,比如:WORD->INT; 目标数据类型比源数据类型弱:比如DINT->INT; 功能调用:
INTVar:=WORD_TO_INT(WORD_var);
Result:=SQRT(INTTO_REAL(WORD_TO_INT(WORD_Var)));
Siemens TIA 中的字节顺序
对于跨越多个字节的程序对象,我们必须建立两个规则:
这个对象的地址是什么? 内存里面如何排列这些字节? 在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。
例如,一个类型为int的变量x的地址为 0x1000x100 ,也就是说地址为 0x1000x100 ,也就是说,地址表达式&x的值为 0x1000x100 。那么假设数据类型 intint 为32位表示 x的四个字节将会被存储在内存的 0x100,0x101,0x102,0x1030x100, 0x101, 0x102, 0x103 位置。
排列表示一个对象的字节有两个通用的规则。考虑到一个ww位的整数其位表示为 [xw−1,xw−2,…,x1,x0][x_{w-1}, x_{w-2},…, x_{1},x_{0}] 其中 xw−1x_{w-1} 是最高有效位,而 x0x_{0} 是最低有效位。假设 ww 是8的倍数。这些位就能被分组成字节,其中最高有效字节包含位 [xv−1,xv−2,…,xv−8][x_{v-1}, x_{v-2},…, x_{v-8}] ,最低有效字节包含位 [x7,x6,…,x0][x_{7}, x_{6},…, x_{0}] ,其他的字节包含中间的位。某些机器选择在内存中按照从最低有效字节到最高有效字节的顺序存储;而另一些机器则按照从最高有效字节到最低有效字节的顺序存储。
MSB(Most Significant Byte),最高有效字节,指多字节序列中具有最大权重的字节,是一个数据中权值最大的那一个字节。
LSB(Least Significant Byte),最低有效字节,指多字节序列中最小权重的字节,是一个数据中权值最小的那一个字节。
Big-Endian(BE),是指数据的高字节(MSB)保存在内存的低地址中,而数据的低字节(LSB)保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
Little-Endian(LE),是指数据的高字节(MSB)保存在内存的高地址中,而数据的低字节(LSB)保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
最低有效字节在最前端的方式——小端法
最高有效字节在最前端的方式——大端法
假设:变量 xx 的类型为 intint,位于地址 0x1000x100 处,它的16进制值为 0x012345670x01234567 ,地址范围 0x100,0x101,0x102,0x1030x100, 0x101, 0x102, 0x103 的字节顺序依赖机器的类型:
由此,分析西门子PLC控制器的数据如下:
比如数据为 intint ,在PLC内的数据长度是16位,定义的地址为MW5000, 地址从MB5000开始,到MB5001,如下排列:MW5000的值为0x1234
控制器数据是采用大端法来定义。
由此延伸到一个双字,同样MD5000, 对应的是
这样MW5000的值为0x0123; MW5002的值为0x4567。
进一步推算每一个字节中的位的状态,则采用的是:[x7,x6,…,x0][x_{7}, x_{6},…, x_{0}]的排列顺序。
最后得到字节和位的顺序图表如下所示:
进一步延伸到博图中的指令%,
比如要获取MW5000中的M5000.0的地址,就应该是:
%为slice访问指令,可以访问一个bit,一个byte,16bit或者32bit。
对应的指令是:
具体的访问地址方向如下所示:
比如这里需要访问MW5000里面的M5000.0,首先采用大端法,然后根据slice指令的从右向左的增加的访问方式,定义MW5000的标签名字为:MW_Slice_Test.
指令为: A “MW_Slice_Test”.%X8.
如何定义HMI语言
HMI可以定义多个语言,并可以通过配置系统参数选择不同语言显示。
在系统的languages&resources里面配置了相应的多语言选项。
但是在勾选了多语言之后并不能实现多语言的选项,比如:
定义了一个选择语言的按钮,并做了切换语言的事件。但是在语言的选择里面只有英语一个选项。如下所示:
这是因为在运行环境中并没有设置所添加的中文语言,其具体的位置是:
Runtime Settings–>Language & font
在里面需要将添加的其他语言勾选上,之后就可以选择切换至该语言了。
DT_Date and DT_TOD apply in TIA Portal
因为软件架构的问题,需要将OB1中的变量OB1_DATE_TIME,变量类型Date_And_Time转换成程序中可以使用的日期还有时间。
但在导入到博图中之后显示错误,如下所示:
因此需要在博图中寻找相应的功能块来实现相同的功能。
主要的作用就是将Date_And_Time 中的信息提出其中的日期和时间信息。
在帮助里面查找,找到相应的内容:
采用的功能块是:
T_CONV
然后可以自行定义相应的转换数据类型。如下所示:
其中框框中的内容是自行定义。
这样就可以从OB1中的OB1_DATE_TIME变量中获取系统的日期和时间。
标签: