发表于:2011-04-13 10:09:12
楼主
PORT_OPEN_1(EN:=PLCMODE_RUN,Port:=BYTE#2,Setting:=‘9600,1,N,8‘,TimeOut:=BYTE#10); (*打开串口*)
PORT_READ_1(EN:=PLCMODE_RUN,Port:=BYTE#2,Dataptr:=RBUF);(*使能串口接收*)
ReadDone:=PORT_READ_1.Done;(*获得数据接收完标志*)
RBUF:=PORT_READ_1.Dataptr;(*得到串口收到的数据*)
R_TRIG_2(CLK:=ReadDone);;
MOVEW_1(EN:=R_TRIG_2.Q,IN:=PORT_READ_1.Length);(**)
RLEN:=MOVEW_1.OUT;;(*接收到的数据长度 BYTE的个数*)
TLEN:=WORD#0;(*发送字节数清零*)
IF R_TRIG_2.Q THEN ;(*如果接收完毕*)
IF RLEN >WORD#2 THEN (*如果接收字节大于2 可以自己定义*)
IF 地址满足 或者其他条件 THEN
FUN:=UINT_TO_INT(BYTE_TO_UINT(RBUF【XX】)); (*获取功能码*)
CASE FUN OF
INT#XX :
XXXX;(*处理命令 和要做的动作*)
XXXX;(*处理命令 和要做的动作*)
TLEN:=WORD#29;(*要发送的数据长度 如果不返回数据则 省略此句*)
INT#136 :
INT#XX :
XXXX;(*处理命令 和要做的动作*)
XXXX;(*处理命令 和要做的动作*)
TLEN:=WORD#29;(*要发送的数据长度 如果不返回数据则 省略此句*)
END_CASE;
END_IF;
END_IF;
END_IF;
PORT_WRITE_1(EN:= R_TRIG_2.Q,Port:=BYTE#2,Length:=TLEN,Dataptr:=RBUF); (*将处理完的数据发送出去*)