我用的是SFC67,SFC68,无组态单边编程通信方式,即200为服务器,300为客户机。
参考例子如下:
CALL "X_GET" //调用SFC 67
REQ :=M8.1 //激活读取请求(BOOL 1有效)
CONT :=TRUE //接收完成后保持连接(BOOL 1连续)
DEST_ID :=W#16#B //对方(B站)的MPI地址(WORD)
VAR_ADDR:=P#DB1.DBX2100.0 BYTE 10 //要读取的对方的数据接收区(ANY)
RET_VAL :=LW4 //返回的故障信息(WORD)
BUSY :=M8.2 //接收状态(ANY 1为接收中)
RD :=P#M 210.0 BYTE 10 //本地的数据接收区(ANY)
CALL "X_PUT" //调用SFC 68
REQ :=M8.3 //激活发送请求(BOOL 1有效)
CONT :=TRUE //发送完成后保持连接(BOOL 1连续)
DEST_ID :=W#16#B //接收方的MPI地址(WORD)
VAR_ADDR:=P#DB1.DBX2200.0 BYTE 10 //对方的数据接收区(ANY)
SD :=P#M220.0 BYTE 10 //本地的数据发送区(ANY)
RET_VAL :=LW2 //返回的故障信息(WORD)
BUSY :=M8.4 //发送状态(ANY 1为发送中)
CALL "X_GET" //调用SFC 67
REQ :=M8.1 //激活读取请求(BOOL 1有效)
CONT :=TRUE //接收完成后保持连接(BOOL 1连续)
DEST_ID :=W#16#C //对方(B站)的MPI地址(WORD)
VAR_ADDR:=P#DB1.DBX2300.0 BYTE 10 //要读取的对方的数据接收区(ANY)
RET_VAL :=LW4 //返回的故障信息(WORD)
BUSY :=M8.2 //接收状态(ANY 1为接收中)
RD :=P#M 230.0 BYTE 10 //本地的数据接收区(ANY)
CALL "X_PUT" //调用SFC 68
REQ :=M8.3 //激活发送请求(BOOL 1有效)
CONT :=TRUE //发送完成后保持连接(BOOL 1连续)
DEST_ID :=W#16#C //接收方的MPI地址(WORD)
VAR_ADDR:=P#DB1.DBX2400.0 BYTE 10 //对方的数据接收区(ANY)
SD :=P#M240.0 BYTE 10 //本地的数据发送区(ANY)
RET_VAL :=LW2 //返回的故障信息(WORD)
BUSY :=M8.4 //发送状态(ANY 1为发送中)
=================================================================
目前对REQ、CONT、BUSY该什么时候置位,什么时候复位不太明白,从实际结果来看,300读取200的数据基本上没问题,但是300-->200的数据有时候200能接收到,很多时候接收不到,不知是为什么?