PLCS7300400的编程语言与指令系统.docx
《PLCS7300400的编程语言与指令系统.docx》由会员分享,可在线阅读,更多相关《PLCS7300400的编程语言与指令系统.docx(21页珍藏版)》请在冰豆网上搜索。
PLCS7300400的编程语言与指令系统
S7-300/400的编程语言与指令系统
3.1S7-300/400的编程语言
3.1.1PLC编程语言的国际标准
IEC61131是PLC的国际标准,1992~1995年发布了IEC61131标准中的1~4部分,我国在1995年11月发布了GB/T15969-1/2/3/4(相当于IEC61131-1/2/3/4)。
IEC61131-3广泛地应用PLC、DCS和工控机、“软件PLC”、数控系统、RTU等产品。
定义了5种编程语言
1)指令表IL(Instructionlist):
西门子称为语句表STL。
2)结构文本ST(Structuredtext):
西门子称为结构化控制语言(SCL)。
3)梯形图LD(Ladderdiagram):
西门子简称为LAD。
4)功能块图FBD(Functionblockdiagram)。
5)顺序功能图SFC(Sequentialfunctionchart):
对应于西门子的S7Graph。
3.1.2STEP7中的编程语言
梯形图、语句表和功能块图是3种基本编程语言,可以相互转换。
1.顺序功能图(SFC):
STEP7中的S7Graph
2.梯形图(LAD)
直观易懂,适合于数字量逻辑控制。
“能流”(Powerflow)与程序执行的方向。
3.语句表(STL):
功能比梯形图或功能块图强。
4.功能块图(FBD):
“LOGO!
”系列微型PLC使用功能块图编程。
5.结构文本(ST):
STEP7的S7SCL(结构化控制语言)符合EN61131-3标准。
SCL适合于复杂的公式计算、复杂的计算任务和最优化算法,或管理大量的数据等。
6.S7HiGraph编程语言
图形编程语言S7HiGraph属于可选软件包,它用状态图(stategraphs)来描述异步、非顺序过程的编程语言。
7.S7CFC编程语言
可选软件包CFC(ContinuousFunctionChart,连续功能图)用图形方式连接程序库中以块的形式提供的各种功能。
8.编程语言的相互转换与选用
在STEP7编程软件中,如果程序块没有错误,并且被正确地划分为网络,在梯形图、功能块图和语句表之间可以转换。
如果部分网络不能转换,则用语句表表示。
语句表可供喜欢用汇编语言编程的用户使用。
语句表的输入快,可以在每条语句后面加上注释。
设计高级应用程序时建议使用语句表。
梯形图适合于熟悉继电器电路的人员使用。
设计复杂的触点电路时最好用梯形图。
功能块图适合于熟悉数字电路的人使用。
S7SCL编程语言适合于熟悉高级编程语言(例如PASCAL或C语言)的人使用。
S7Graph、HiGraph和CFC可供有技术背景,但是没有PLC编程经验的用户使用。
S7Graph对顺序控制过程的编程非常方便,HiGraph适合于异步非顺序过程的编程,CFC适合于连续过程控制的编程。
3.2S7-300/400CPU的存储区
3.2.1数制
1.二进制数
二进制数的1位(bit)只能取0和1这两个不同的值,用来表示开关量的两种不同的状态。
该位的值与线圈、触点的关系。
ON/OFF,TURE/FALSE。
二进制常数:
2#1111_0110_1001_0001。
2.十六进制数
十六进制的16个数字是0~9和A~F,每个占二进制数的4位。
B#16#,W#16#,DW#16#,W#16#13AF(13AFH)。
逢16进1,例如B#16#3C=3×16+12=60。
表3-1不同进制的数的表示方法
十进
制数
八进
制数
十六
进制数
二进
制数
BCD码
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
20
21
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
00000000
00000001
00000010
00000011
00000100
00000101
00000110
00000111
00001000
00001001
00010000
00010001
00010010
00010011
00010100
00010101
00010110
00010111
3.BCD码
BCD码用4位二进制数表示一位十进制数,十进制数9对应的二进制数为1001。
最高4位用来表示符号,16/32位BCD码的范围。
BCD码实际上是十六进制数,但是各位之间逢十进一。
296对应的BCD码为W#16#296,或2#0000001010010110。
2#0000000100101000对应的十进制数也是296,对应的十进制数为
。
3.2.2基本数据类型
1.位(bit):
位数据的数据类型为BOOL(布尔)型。
I3.2的意义。
2.字节(Byte)
3.字(Word)表示无符号数。
取值范围为W#16#0000~W#16#FFFF。
4.双字(DoubleWord)表示无符号数。
范围DW#16#0000_0000~DW#16#FFFF_FFFF。
5.16位整数(INT,Integer)是有符号数,补码。
最高位为符号位,为0时为正数,取值范围为32768~32767。
6.32位整数(DINT,DoubleInteger)最高位为符号位,取值范围为2147483648~2147483647。
图3-6字节、字和双字
7.32位浮点数
浮点数又称实数(REAL),表示为1.m
,例如123.4可表示为1.234
。
指数E是有符号数。
根据ANSI/IEEE标准
浮点数=1.m
式中指数e=E+127(1≤e≤254),为8位正整数。
ANSI/IEEE标准浮点数占用一个双字(32位)。
因为规定尾数的整数部分总是为1,只保留尾数的小数部分m(0~22位)。
浮点数的表示范围为±1.175495
~±3.4028231038。
图3-7浮点数的结构
用很小的存储空间(4个字节)可以表示非常大和非常小的数。
PLC输入和输出的数值大多是整数,浮点数的运算速度比整数运算的慢。
L#为32位双整数常数,例如L#+5。
P#为地址指针常数,例如P#M2.0是M2.0的地址。
S5T#是16位S5时间常数,格式为S5T#aD_bH_cM_dS_eMS。
S5T#4S30MS=4s30ms,取值范围为S5T#0~S5T#2H_46M_30S_0MS(9990s),时间增量为10ms。
C#为计数器常数(BCD码),例如C#250。
8位ASCII字符用单引号表示,例如‘ABC’。
T#为带符号的32位IEC时间常数:
T#1D_12H_30M_0S_250MS。
DATE是IEC日期常数,例如D#2004-1-15。
取值范围D#1990-1-1~D#2168-12-31。
TOD#是32位实时时间(Timeofday)常数,例如TOD#23:
50:
45.300。
B(b1,b2)、B(b1,b2,b3,b4)用来表示2个字节或4个字节常数。
3.2.3复合数据类型与参数类型
1.复合数据类型
通过组合基本数据类型和复合数据类型可以生成下面的数据类型:
(1)数组(ARRAY)将一组同一类型的数据组合在一起。
(2)结构(STRUCT)将一组不同类型的数据组合在一起。
(3)字符串(STRING)是最多有254个字符(CHAR)的一维数组。
(4)日期和时间(DATE_AND_TIME)用于存储年、月、日、时、分、秒、毫秒和星期,占用8个字节,用BCD格式保存。
星期天、星期一~星期六的代码为1~7。
例如DT#2004-07-15-1230:
15.200为2004年7月15日12时30分15.2秒。
(5)用户定义的数据类型UDT(user-defineddatatypes)。
在数据块DB和逻辑块的变量声明表中定义复合数据类型。
2.参数类型
为在逻辑块之间传递参数的形参(formalparameter,形式参数)定义的数据类型:
(1)TIMER(定时器)和COUNTER(计数器):
对应的实参(actualparameter,实际参数)应为定时器或计数器的编号,例如T3,C21。
(2)BLOCK(块):
指定一个块用作输入和输出,实参应为同类型的块。
(3)POINTER(指针):
指针用地址作为实参,例如P#M50.0。
(4)ANY:
用于实参的数据类型未知或实参可以使用任意数据类型的情况,占10个字节。
3.2.5系统存储器
1.过程映像输入/输出(I/Q)
在扫描循环开始时,CPU读取数字量输入模块的输入信号的状态,并将它们存入过程映像输入(processimageinput,PII)中。
在扫描循环中,用户程序计算输出值,并将它们存入过程映像输出表(processimageoutput,PIQ)。
在循环扫描结束时将过程映像输出表的内容写入数字量输出模块。
I和Q均可以按位、字节、字和双字来存取,例如I0.0、IB0、IW0和ID0。
与直接访问I/O模块相比有延迟,在一个扫描周期内I/O保持不变,比访问模块更快。
6.外设I/O区(PI/PO)
外设输入(PI)和外设输出(PQ)区允许直接访问本地的和分布式的输入模块和输出模块。
可以按字节(PIB或PQB)、字(PIW或PQW)或双字(PID或PQD)存取,不能以位为单位存取PI和PO。
2.内部存储器标志位(M)存储器区
3.定时器(T)存储器区
时间值可以用二进制或BCD码方式读取。
4.计数器(C)存储器区
计数值(0~999)可以用二进制或BCD码方式读取。
5.共享数据块(DB)与背景数据块(DI)
DB为共享数据块,DBX2.3、DBB5、DBW10和DBD12。
DI为背景数据块,DIX3.5、DIB2、DIW4和DID6。
3.2.6CPU中的寄存器
1.累加器(ACCUx)
累加器用于处理字节、字或双字的寄存器。
S7-300有两个32位累加器(ACCU1和ACCU2),S7-400有4个累加器(ACCU1~ACCU4)。
数据放在累加器的低端(右对齐)。
2.状态字寄存器(16位)
首次检测位/FC,
逻辑运算结果(RLO);
状态位STA不能用指令检测;
OR位暂存逻辑“与”的操作结果(先与后或);
图3-9状态字的结构
算术运算或比较指令执行时出现错误,溢出位OV被置1。
OV位被置1时溢出状态保持位OS位也被置1,OV位被清0时OS仍保持为1,用于指明前面的指令执行过程中是否产生过错误。
条件码1(CC1)和条件码0(CCO)综合起来用于表示在累加器1中产生的算术运算或逻辑运算的结果与0的大小关系、比较指令的执行结果或移位指令的移出位状态。
二进制结果位(BR)对应于梯形图中的ENO,在一段既有位操作又有字操作的程序中,用于表示字操作结果是否正确。
在梯形图的方框指令中,BR位与ENO输出的能流有对应关系,用于表明方框指令是否被正确执行:
如果执行出现了错误,BR位为0,ENO也为0;如果功能被正确执行,BR位为1,ENO也为1。
将下图转换为语句表时,将会出现“ABR”指令。
A(
AI0.1
JNB_001
LMW2
TMW4
SET//RLO置1
SAVE//RLO保存到BR
CLR//RLO清零
_001:
ABR
)
JNB_002
LIB2
TIB8
_002:
NOP0
3.数据块寄存器:
DB和DI寄存器分别用来保存打开的共享数据块和背景数据块的编号。
3.3位逻辑指令
位逻辑指令用于二进制数的逻辑运算。
位逻辑运算的结果简称为RLO。
3.3.1触点指令
1.触点与线圈
A(And,与)指令来表示串联的常开触点。
O(Or,或)指令来表示并联的常开触点。
AN(AndNot,与非)来表示串联的常闭触点。
ON(OrNot)来表示并联的常闭触点。
输出指令“=”将RLO写入地址位,与线圈相对应。
A(
AI0.0
ANI0.1
OI0.2
)
AI0.3
ONC5
=L20.0
AL20.0
=Q4.3
AL20.0
=Q4.4
AL20.0
ANI3.4
=Q4.6
L20.0是局域变量。
将梯形图转换为语句表时,局域变量L20.0是自动分配的。
A*B+C*D=Q(A+B)*(C+D)=Q
4.中线输出指令下面是图3-14(b)中第一行对应的语句表。
AI0.0
ANI0.1
=M0.1
AM0.1
AI0.3
=Q4.3
后执行的优先
Network1:
AI0.3
AI0.0
FP
=Q4.5
Network2:
AI0.3
AI0.0
FN
=Q4.3
检测P、N触点左边的电路的边沿
AI0.3
A(
AI0.4
BLD100//无操作,与显示有关
FNM0.1
)
=Q4.5
相当于一个触点,检测方框上面的元件的边沿。
M0.0等为边沿存储位,用于保持上一扫描周期的状态。
【例3-1】设计故障信息显示电路,故障信号I0.0为1时Q4.0控制的指示灯以1Hz的频率闪烁。
操作人员按复位按钮I0.1后,如果故障已经消失,指示灯熄灭。
如果没有消失,指示灯转为常亮,直至故障消失。
设置CPU的属性时,在“Cycle/ClockMemory”标签页令MB1为时钟存储器字节,其中的M1.5提供周期为1s的时钟脉冲。
SET与CLR(Clear)指令将RLO(逻辑运算结果)置位或复位,紧接在它们后面的赋值语句中的地址将变为1状态或0状态。
SET//将RLO置位
=M0.2//M0.2的线圈“通电”
CLR//将RLO复位
=Q4.7//Q4.7的线圈“断电”
3.4.1定时器指令
在CPU内部,时间值以二进制格式存放,占定时器字的0~9位。
可以按下列的形式将时间预置值装入累加器的低位字:
(1)十六进制数W#16#wxyz,其中的w是时间基准,xyz是BCD码形式的时间值。
时基代码为二进制数00,01,10和11时,对应的时基分别为10ms,100ms,1s和10s。
(2)S5T#aH_bM_cS_Dms,例如S5T#18S。
6.脉冲定时器(PulseTimer)
类似于上升沿触发的单稳态电路。
S5脉冲定时器:
S为设置输入端,TV为预置值输入端,R为复位输入端;Q为定时器位输出端,BI输出不带时基的十六进制格式,BCD输出BCD格式的当前时间值和时基。
定时器中的S、R、Q为BOOL(位)变量,BI和BCD为WORD(字)变量,TV为S5TIME量。
各变量均可以使用I、Q、M、L、D存储区,TV也可以使用定时时间常数S5T#。
脉冲定时器线圈(SP):
AI1.2
FRT0//允许定时器T1再起动
AI0.0//以下是图3-27对应的语句表
LS5T#2s//预置值2s送入累加器1
SPT0//启动T0
AI0.1
RT0//复位T0
LT0//将T0的十六进制时间当前值装入累加器1
TMW10//将累加器1的内容传送到MW10
LCT0//将T0的BCD时间当前值装入累加器1.
TMW12//将累加器1的内容传送到MW12
AT0//检查T0的信号状态
=Q4.0//T0的定时器位为1时,Q4.0的线圈通电
仅在语句表中使用的FR指令允许定时器再起动,即控制FR的RLO(I1.2)由0变为1状态时,重新装入定时时间,定时器又从预置值开始定时。
再起动只是在定时器的起动条件满足(图3-28中的I0.1=1)时起作用。
该指令可以用于所有的定时器,但是它不是起动定时器定时的必要条件。
8.扩展的脉冲定时器
起动信号可以比定时时间短
10.接通延时定时器
图3-38振荡电路
12.保持型接通延时定时器
起动信号可以比定时时间短
14.断开延时定时器线圈
3.4.2计数器指令
1.计数器的存储器区
每个计数器有一个16位的字和一个二进制位。
计数器字的0~11位是计数值的BCD码,计数值的范围为0~999。
二进制格式的计数值只占用计数器字的0~9位。
下面是图3-46中左边的电路对应的语句表:
AI0.0//在I0.0的上升沿
CUC10//加计数器C10的当前值加1
BLD101//与图形显示有关的指令
AI0.2//在I0.2的上升沿
LC#6//计数器的预置值6被装入累加器的低字
SC10//将预置值装入计数器C10
AI0.3//如果I0.3为1
RC10//复位C10
LC10//将C10的二进制计数当前值装入累加器1
TMW0//将累加器1的内容传送到MW0
LCC10//将C10的BCD计数当前值装入累加器1
TMW8//将累加器1的内容传送到MW8
AC10//如果C10的当前值非0
=Q5.0//Q5.0为1状态
设置计数值线圈SC(SetCounterValue)用来设置计数值,在RLO的上升沿预置值被送入指定的计数器。
CU的线圈为加计数器线圈。
在I0.0的上升沿,如果计数值小于999,计数值加1。
复位输入I0.3为1时,计数器被复位,计数值被清0。
计数值大于0时计数器位(即输出Q)为1;计数值为0时,计数器位亦为0。
在减计数输入信号CD的上升沿,如果计数值大于0,计数值减1。
T11产生的脉冲周期为4h