西门子S7-1200PLC模块辽宁代理商

每个块包含一个代码时间标记和一个接口时间标记,可以在块的属性对话框中查看它们。下列情况将会产生时间标记冲突:
1)被调用的块比调用它的块的时间标记更新。
2)用户定义数据类型( UDT)比使用它的块或使用它的用户数据的时间标记更新。
3)功能块比它的背景数据块的时间标记更新。
4) FB2在FB1中被定义为多重背景,FB2的时间标记比FB1的更新。
即使块与块之间的时间标记的关系是正确的,如果块的接口的定义与它被使用的区域中的定义不匹配(有接口冲突),也会出现不一致性。
以随书光盘中的例程“发动机控制”为例,如果在FB1的变量声明表中修改或增减输入/输出参数,在保存块时,将会出现“块接口已改变……”的警告信息。保存后打开调用它的OB1,出现“至少一个块调用有时间标志冲突”的对话框。在OB1中可以看到,调用FB1的指令变成红色。带有时间标记冲突的程序下载到CPU后将导致停机。如果用手工来消除块的不一致性,是很麻烦的。可以用下面的方法自动修正一致性错误:
1)关闭与冲突有关的所有的块。
2)选中SIMATIC管理器左边窗口的“块”,执行菜单命令“编辑”→“检查块的一致性”。在出现的“检查块的一致性”对话框中(见图4-33),有时间标记冲突的块用红色的指示灯标出。执行菜单命令“程序”→“编译”,STEP 7将打开相应的编辑器,时间标记冲突和块的不一致性被自动地尽可能地消除,同时对块进行编译。经过编译后,图4-33中的时间冲突被消除,对应的红色指示灯消失(见图4-34)。
3)如果上述编译操作不能自动清除所有块的不一致性,在输出窗口中给出有错误的块的信息。用鼠标右键点击某一错误,调用弹出的菜单中的错误显示,对应的错误被打开,程序将跳到被修改的位置。清除块中的不一致性后,保存并关闭块。对于所有标记为有错误的块,重复这一过程。
4)重新执行步骤1和2,直至信息窗口不再显示错误信息。
如果不能用上述的操作自动清除所有块的不一致性,只有删除被调用的有冲突的块,然后重新调用它们。
1.参数类型ANY
在调用逻辑块时,参数类型ANY用于将任意的数据类型传递给声明的形参。ANY可用于实参的数据类型未知,或实参可以使用任意数据类型的情况。数据类型ANY主要用于为系统功能( SFC)和系统功能块(SFB)分配参数。用户也可以用ANY作为逻辑块的接口参数来传递数据。
ANY由10B组成(见图4-31),第4~9个字节的意义与POINTER的第0~5个字节相同,第1个字节(数据类型编码)见表4-6。
ANY指针可以用来表示一片连续的数据区,例如P#DB2. DBX50.0 BYTE 10表示DB2中的DBB50~ DBB59这10个字节。在这个例子中,DB编号为2,重复因子(数据长度)为10,数据类型编码为B#16#02 (BYTE)。
图4-31 ANY指针
ANY指针也可以用地址作实参,例如DB2.DBW30和Q12.5,但是只能指向一个地址。ANY指针只能用于形参的IN、OUT(不能用于FB)、IN_OUT和TEMP变量。
表4-6 数据类型的编码
2.FC2的程序设计
【例】 用ANY指针作为输入参数,用FC2对若干个连续存放的字作异或运算。不是字则不进行运算。
在项目“寄存器间接寻址”中生成FC2,其局部变量如表4-7所示。下面是FC2中的STL程序:
表4-7 FC2的局部变量
L P##AnyPomt //P#表示指针,第2个#号表示局部变量
LAR1 //ANY指针送地址寄存器AR1
L 0
T #Result //将保存异或运算结果的字清零
L B[ AR1,P#1.0] //取ANY指针内的数据类型(见图4-31)
L B#16#4
< >I
JC 003 //不是字则返回
L 0
L W[AR1,P#4.0] //取ANY指针内的数据块编号(见图4-31)
==I
JC 001 //不是数据块(编号为0)则跳转
T #DB No //保存数据块编号
OPN DB[#DB_No] //打开ANY指针指定的数据块
_001:1 W[AR1,P#2.0] //取ANY指针内的重复因子(见图4-31)
T #Lenth //保存需要累加的字的个数
L D[AR1,P#6.0] //取ANY指针内数据区的起始地址(见图4-31)
LAR1 //要异或的数据的起始地址送AR1
L #Lenth //取需要累加的字的个数(即需要循环的次数)
_002 :T #Lenth //保存剩余循环次数
L W[AR1,P#0.0] //取数据字
L #Result //取异或运算的中间结果
XOW //字异或运算
T #Result //存放运算结果
+AR1 P#2.0 //AR1指向下一个字
L #Lenth //取剩余循环次数
LOOP _002 //未运算完则返回
_003: NOP 0
从这个例子可以看到寄存器间接寻址的优点,通过修改地址偏移量,可以方便地读写相距任意字节的地址的数据。
3.OB1的程序设计与程序运行结果
下面是OB1中调用FC2的程序,对DB1中的DBW0、DBW2和DBW4作异或运算,运算结果送MW4。
CALL FC 2
AnyPoint :=P#DB1. DBX 0.0 WORD 3
Result :=MW4
应先定义后使用数据块中的变量,如果使用了数据块中未定义的变量,将会出错。
图4-32中的变量表给出了程序运行的结果,DB1前3个字同一位中1的个数为奇数时,异或运算后MW4的同一位为1;1的个数为偶数时,MW4的同一位为0。
图4-32 变量表
西门子S7-1200PLC模块辽宁代理商