菜鸟:
$A_DBR[560] = 0.0
$A_DBR[564] = 0.0
读取NC内存,具体的位置在哪,如何跟PLC对应?
侠士:
需要在PLC 中调用FC21
菜鸟:
不知道怎么把图片填上去,UBB标签示例看不懂,
侠士:
$A_DBR[560] = 0.0
该NC数值可以通过调用FC21和PLC进行通讯,Funct角标3为读取,4为写入,IVAR1为具体的地址,在这里也就是560,需要去PLC中寻找IVAR1为560的FC21。
也可能IVAR1中的数值小于560,但是该数值加上Any型的长度所需的字节数,大于560了,则$A_DBR[560]的传输就在这里边。
ym :
840的不熟悉,802D中有一个NC与PLC的公共存储区
比如$A_DBB[0] 对应PLC地址VB49000000,以此类推
希望能帮助你
bz:
从FC21的块能看到如下信息:左侧 M0.1 Enable,B#16#3 Funct,P#DB250.DBX1496.0REAL34 S7var,560 IVAR1,697 IVAR2;右侧Error,Errcode; 在DB250数据块中能看到 DB250.DBX1496.0 REAL 注释为NC--PLC;
NC程序是这样写的:
Write DualPort RAM -Semaphore 696- ;*RO*
;----------------------------------------------------------;*RO*
N700 WHILE $A_DBB[696]<>0 ;*RO*
N710 MSG("Semaphorentransfer 696 aktiv!") ;*RO*
N720 ENDWHILE ;*RO*
; ;*RO*
N640 $A_DBR[560] = 0.0 ;*RO*
N650 $A_DBR[564] = 0.0
另外一段:
N1070 $A_DBB[696] =1 ;*RO*
; ;*RO*
N1080 STOPRE ;*RO*
N1090 WHILE $A_DBB[696]<>0 ;*RO*
N1100 MSG("Semaphorentransfer 696 aktiv!") ;*RO*
N1110 ENDWHILE ;*RO*
; ;*RO*
;----------------------------------------------------------;*RO*
; Write DualPort RAM -Semaphore 697- ;*RO*
;----------------------------------------------------------;*RO*
N1120 WHILE $A_DBB[697]<>0 ;*RO*
N1130 MSG("Semaphorentransfer 697 aktiv!") ;*RO*
N1140 ENDWHILE ;*RO*
; ;*RO*
; Werte f黵 Vorrichtung 0? ;*RO*
N1060 $A_DBR[560] = Fix_Clamp ;*RO*
N1070 $A_DBR[564] = Fix_Clamp ;*RO*
该信息是给PLC,或者PLC给NC的(上例看是给PLC的夹具夹紧信号)。跟PLC对应的地方,要到PLC中,去搜索FC21的调用情况,然后根据FC21的两个行参——S7Var,IVar1。
CALL FC 21 (
Enable := M 10.0, //if TRUE, FC 21 active
Funct := B#16#3, //读数据,PLC--->NC
S7Var := P#M 100.0 DWORD 3, //M100.0指针指向的起始地址,传送3个双字。
IVAR1 := 4,
IVAR2 := 0,
Error := M 10.1,
ErrCode := MW12);
上边这段调用程序总共传递了三个NC量,$A_DBR[4],$A_DBR[8],
$A_DBR[12]。$A_DBR[4],对应的PLC地址是MD100;$A_DBR[8],对应的PLC地址是MD104;$A_DBR[12],对应的PLC地址是MD108。
这下应该讲清楚了吧。
菜鸟:
非常感谢大家,似乎有点明白了!