在S7300400型PLC中使用高级语言编程Word文档格式.docx
《在S7300400型PLC中使用高级语言编程Word文档格式.docx》由会员分享,可在线阅读,更多相关《在S7300400型PLC中使用高级语言编程Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
1、编写SCLSource文件的一般规则
●FB,FC,OB,DB以及用户定义的UDT,它们使用的任意数字号均可以在SCLSource中编辑。
●每种块类型都有它自己的结构。
●每段落或者每个变量的声明以符号”;
”标志结束。
●不区分大小写。
●注释仅存在于程序文档中,它不影响程序运行。
●当一个功能块被调用时,其背景数据块被自动创建,因此它们不需要被编辑。
●DB0有特定用途,因此在程序中不能创建DB0.
2、编写块的先后次序
●被调用的块必须位于调用块之前。
●UDT的定义必须位于其被使用的位置之前。
●共享数据块必须位于那些使用它的所有块之前。
三、数据类型
1、数据类型预览
Ⅰ、基本数据类型
2、补充
<
1>
、DATE_AND_TIMEDataType
其值的范围:
DT#1990-01-01-0:
0:
0.0---------DT#2089-12-31-23:
59:
59.999
该类型以BCD码形式存储。
例如20/Oct./199512:
20:
30and10milliseconds显示如下:
DATE_AND_TIME#1995-10-20-12:
30.10
DT#1995-10-20-12:
30.10
2>
STRING
e.g.声明
VAR
Text1:
String[123];
//该字符串的最大容量为123个字符
Text2:
String;
//该字符串的默认容量为254个字符
END_VAR
初始化:
x:
STRING[7]:
='
Address'
;
//在使用STRING前,必须对它赋值。
FUNCTIONTest:
STRING[45]
VAR_TEMP
STRING[45];
END_VAR
='
a'
=concat(in1:
=x,in2:
=x);
Test:
=x;
//返回值
END_FUNCTION
3>
数组类型
e.g.
CONTROLLER1:
//声明3行、4列的二位整数数组,并对其初始化
ARRAY[1..3,1..4]OFINT:
=-54,736,-83,77,
-1289,10362,385,2,
60,-37,-7,103;
CONTROLLER2:
ARRAY[1..10]OFREAL;
//声明10个数的一维实数数组
注:
数组的最大维数为6维,数组的索引范围为-32768---32767之间的任意整数。
所有的基本数据类型均可用于数组。
数组可以使用变量进行索引,例如:
arrname_1[i]:
=arrname_2[j];
4>
STRUCT类型
e.g.声明一个结构MOTOR中包含另一个结构DATA。
对结构声明时,可以初始化元素,也可以在使用之前再初始化。
MOTOR:
STRUCT
DATA:
LOADCURR:
REAL;
VOLTAGE:
INT:
=5;
END_STRUCT;
结构以WORD的形式结尾,否则系统自动把丢失的字节补到结构中去。
5>
用户定义类型UDT(使用关键字TYPE)
TYPE//定义名字为MEASVALUES的数据类型
MEASVALUES:
BIPOL_1:
=5;
BIPOL_2:
WORD:
=W#16#FFAA;
BIPOL_3:
BYTE:
=B#16#F1;
BIPOL_4:
=W#16#1919;
MEASURE:
BIPOLAR_10V:
UNIPOLAR_4_20MA:
REAL;
END_STRUCT;
END_TYPE
//在FB10中使用该类型
FUNCTION_BLOCKFB10
MEAS_RANGE:
MEASVALUES;
//创建UDT数据
BEGIN
//使用UDT数据
MEAS_RANGE.BIPOL_1:
=-4;
MEAS_RANGE.MEASURE.UNIPOLAR_4_20MA:
=2.7;
END_FUNCTION_BLOCK
6>
POINTER类型
//定义功能块FC100
FUNCTIONFC100:
VOID//VOID表明该功能不返回值
VAR_IN_OUT//定义FC100的输入输出型参数
N_out:
INT;
out:
POINTER;
//定义POINTER型数据类型,参数均为临时变量
VAR_TEMP//定义临时变量
ret:
BEGIN//进入函数主体
//...
=SFC79(N:
=N_out,SA:
=out);
END_FUNCTION
//定义功能块FB100
FUNCTION_BLOCKFB100
VAR//定义静态变量,即离开块后仍旧保存状态的变量
ii:
aa:
ARRAY[1..1000]OFREAL;
FC100(N_out:
=ii,out:
=aa);
//调用FC100,使用指针的方式传递整个数组
7>
ANY类型
VAR_INPUT//输入型变量
iANY:
ANY;
//定义为ANY
pANY:
CASEiiOF//CASE分支语句
1:
=MW4;
//将MW4的地址赋给pANY
//ofMW4
3..5:
//等于3,4,5的情况下
pANY:
=aINT[ii];
//pANYcontainstheaddress
//oftheiith
//elementoftheaINTfield;
100:
=iANY;
//pANYcontainsthevalue
//oftheiANYinputvariable
ELSE
=NIL;
//oftheNILpointer
END_CASE;
SFCxxx(IN:
=pANY);
四、局部变量和参数的声明
1、变量
静态变量:
用于保持块的数据,该数据存在背景数据块中。
临时变量:
仅在块运行过程中存在。
若多个变量的数据类型一致,可用如下方式:
VALUE2,VALUE3,VALUE4,....:
声明时可以初始化:
VALUE:
REAL:
=20.25;
数组的初始化有两种方式:
ARRAY[1..2,1..2]OFINT:
=-54,736,-83,77;
当把相邻的数组元素赋相同的值时,例如,把A3[2]到A3[11]的值设为100.0:
A3:
ARRAY[1..12]OFREAL:
=0.0,10(100.0),1.0;
2、块参数
输入参数:
用于接收当块被调用时的输入值,他们是只读的。
输出参数:
传输当前值到这个调用块,在被调用块中应该对该参数赋值
输入/输出参数:
用于接收当块被调用时的输入值,并可以把结果返回到调用块。
3、使用多重背景
声明方式如下:
Supply1:
FB10;
//Supply1为FB10的背景DB
Supply2,Supply3,Supply4:
FB100;
//为FB100声明多个背景DB
Motor1:
Motor;
//Motor为某个FB的符号名
4、变量的声明
五、常量
S7-SCL常量分位常量、数字常量、字符常量、时间常量,使用CONST…END_CONST声明。
CONST
Number:
=10;
//整数常量
TIMEOFDAY1:
=TIME#1D_1H_10M_22S_2MS;
//时间常量
NAME:
SIEMENS'
;
//字符串常量
NUMBER2:
=2*5+10*4;
NUMBER3:
=3+NUMBER2;
END_CONST
1、位常量
Bool#false位的值为TRUE或者FALSE
8#1777778进制
DW#16#0000_000016进制
2、整数常量,它有多种表达方式
1510进制值为15
2#11112进制值为15
16#F16进制值为15
Value_2:
=2#0101;
//2进制值为5
Value_3:
=8#17;
//10进制值为14
Val