T9系类PLC的串口编程作为从站,协议自定义 点击:266 | 回复:3



steelen

    
  • 精华:1帖
  • 求助:2帖
  • 帖子:164帖 | 1497回
  • 年度积分:4
  • 历史总积分:5171
  • 注册:2002年3月15日
发表于: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); (*将处理完的数据发送出去*)



工控老马

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 309回
  • 年度积分:0
  • 历史总积分:1394
  • 注册:2010年7月07日
发表于:2011-04-13 13:19:44
1楼
这是个编程的框架吧?

steelen

  • 精华:1帖
  • 求助:2帖
  • 帖子:164帖 | 1497回
  • 年度积分:4
  • 历史总积分:5171
  • 注册:2002年3月15日
发表于:2011-04-13 18:34:35
2楼
是,一个简单的框架。 

steelen

  • 精华:1帖
  • 求助:2帖
  • 帖子:164帖 | 1497回
  • 年度积分:4
  • 历史总积分:5171
  • 注册:2002年3月15日
发表于:2011-11-20 15:00:50
3楼
AT+RESTORENWCONN

热门招聘
相关主题

官方公众号

智造工程师