3. PLC对高速数据交换区的访问
PLC使用FC21 T r a n s f e r访问高速数据交换区。其中: E n a b l e —— 启动传送;Funct——WORD类型,等于3是读取操作,等于4是写入操作;S7Var——Any类型,指定PLC存储地址;IVAR1——INT类型,指定高速数据交换区的访问地址;IVAR2——INT 类型,指定信号量;Error——BOOL类型,等于1则程序出错;ErrCode——出错时存储错误代码。程序如下:
CALL"Transfer"
Enable :=TRUE
Funct :=B#16#3
S7Var :=P#L 0.0 INT 7
IVAR1 :=1000
IVAR2 :=1001
Error :=#error
ErrCode:=#errcode
A n y类型中分别指定起始地址、数据类型和重复次数。P#L0.0 INT 7解释为起始地址L0.0,数据类型INT,重复次数7。IVAR1=1000高速数据交换区的访问地址是$A_DBB[1000]。
上文程序从$A_DBB[1000]起始读取7个整数,存储到L0.0起始的7个INT即LW0到LW7。
4. 字节顺序
NC和PLC的字节顺序是不同的。NC字节顺序:16位高8位在后,低8位在前;32位高16位在后,低16位在前。PLC字节顺序与之相反。FC21运行时会根据数据类型转换字节顺序,使传输的数值保持正确。在编程时要注意这一点。例如:LW0存储16进制数 270E,LB0存储27,LB1存储0E;传送到$A_DBW[0],则$A_DBB[0]存储0E,$A_DBB[1]存储27。
5. 信号量
信号量确保N C和P L C之间如有一方对一段地址连续访问, 则禁止另一方访问这段地址。信号量在FC21的IVAR2 中指定,VAR2=1001即指定$A_DBB[1001]为信号量。
使用信号量时的读写过程:PLC——只有在信号量等于1时对数据区读写,读写完成后把信号量置0,由FC21执行。NC——只有在信号量等于0时对数据区读写, 读写完成后把信号量置1 。使用同步动作执行。例如WHENEVER $A_DBB[1001]==1DO RDISABLE ,当信号量等于1时读入禁止。
6. 从PLC向NC传送BOOL信号
为了使BOOL信号传送到NC,可把多个BOOL信号保存在字节变量中,然后向NC传送这个字节变量。NC使用位指令检测相应的位。
例如:PLC把某开关信号赋值给L0.3,然后通过FC21把LB0传送给$A_DBB[0]。NC使用位指令检测第三位,即($A_DBB[0]B_AND'B00001000'),如果开关BOOL量等于1,($A_DBB[0]B_AND 'B00001000')不等于0;如果开关BOOL量等于0,( $A_DBB[0] B_AND'B00001000')等于0。
从PLC与NC传送数组或结构:传送数组在S7Var中把数组的起始地址、数据类型和数据长度指定即可。由于NC和PLC字节顺序不同,对于结构则应对其内部各变量逐个按其类型传送。PLC编程时结构和数组可直接赋值给ANY类型的参数,但变量类型为BYTE,有可能在字节顺序上出错。
7. NC向PLC任意传送数据的试验
NC向PLC传送数据,首先NC把数据写入数据交换区,然后PLC从数据交换区读取数据。PLC要想取得数据首先要知道数据的起始位置、数据量,读到哪里,这些信息必须在编写PLC程序时在FC21参数S7Var和IVAR1指定。
使NC向PLC任意位置传送数据的方法如下:首先NC把需要传送的数据写入数据交换区并写入数据的起始位置,然后在数据交换区指定位置建立一个ANY结构指定PLC地址数据、类型和数量;PLC调用1个FC21读取数据的起始位置和ANYA结构;PLC调用第2个FC21以第1个FC21读取的起始位置和ANYA为参数读取。
图4所示为把所需传送数据的地址存在1002,在交换区1004到1013处建立一个ANY结构,1000设为信号量。图5所示为两次调用FC21。图6所示为临时变量表,第1次调用的FC21 的P#L0.0 INT 7涵盖了变量c t r、Departure和Destination。在第2次调用FC21时使用这些变量。
图4
图5
图6
8. 结语
如果您有机床行业、企业相关新闻稿件发表,或进行资讯合作,欢迎联系本网编辑部, 邮箱:skjcsc@vip.sina.com