1.NX1P官方文件:
在欧姆龙官方的手册上我们可以看见TCP通信的如下功能块:
我们使用的是以plc作为服务器,机械手作为客户端。
SktTCPAccept :建立TCP服务器的指令。
SktTCPRcv:接受客户端信息指令。
SktTCPSend:服务器发送指令。
SktTCPStatus:链接状态。
2.欧姆龙官网试例子程序:
这个示例程序虽然使用的case指令,但依旧是按照case的选项顺序执行,也就是说这段程序只能执行一次,无法反复执行。
// 在Trigger的上升沿启动时序
IF ( (Trigger=TRUE) AND (DoTCP=FALSE) AND (_Eip_EtnOnlineSta=TRUE) ) THEN
DoTCP :=TRUE;
Stage :=INT#1;
SktTCPConnect_instance(Execute:=FALSE); // 实例初始化
SktClearBuf_instance(Execute:=FALSE); // 实例初始化
SktGetTCPStatus_instance(Execute:=FALSE); // 实例初始化
SktTCPSend_instance( // 实例初始化
Execute :=FALSE,
SendDat :=SendSocketDat[0]); // 虚拟
SktTCPRcv_instance( // 实例初始化
Execute :=FALSE,
RcvDat :=RcvSocketDat[0]); // 虚拟
SktClose_instance(Execute:=FALSE); // 实例初始化
END_IF;
IF (DoTCP=TRUE) THEN
CASE Stage OF
1 : // 连接请求
SktTCPConnect_instance(
Execute :=TRUE,
SrcTcpPort :=UINT#0, // 本机UDP端口编号 自动分配
DstAdr := ‘192.168.250.2’, // 对方IP地址
DstTcpPort :=UINT#6000, // 对方TCP端口编号
Socket =>WkSocket); // Socket
IF (SktTCPConnect_instance.Done=TRUE) THEN
Stage:=INT#2; // 正常结束
ELSIF (SktTCPConnect_instance.Error=TRUE) THEN
Stage:=INT#10; // 异常结束
END_IF;
2 : // 清除接收缓存
SktClearBuf_instance(
Execute :=TRUE,
Socket :=WkSocket); // Socket
IF (SktClearBuf_instance.Done=TRUE) THEN
Stage:=INT#3; // 正常结束
ELSIF (SktClearBuf_instance.Error=TRUE) THEN
Stage:=INT#20; // 异常结束
END_IF