欧姆龙plc内置 EIP 口实现 TCP SOCKET 通讯
1. 系统概述,硬件搭建和接线

本案例中设置 NJ 的 IP 地址为 10.110.59.2, 计算机 IP 地址为 10.110.
2. 操作步骤
(1) 软件操作:
a. NJ 的 IP 地址设置:

2) 编程说明
a. 插入程序-段,在编辑窗口中进行主程序的编写,内容如下所示:

编写 SktTCPAccept 功能块, NJ 作为 TCP 服务器建立连接:

设置 NJ 的 SOCKET 端口号为 5000, TimeOut=0 不限超时时间,SOCKET 相关参
数反馈到 TCPacp_PARAMETER 变量中。
指令相关变量说明如下:

b. 编写 SktTCPSend 功能块:

设置从 TCPacp_SENDADDRESS[0]开始,发送 TCPacp_SENDSIZE 变量中指定的字节数到计算机客户端, 其中 SOCKET 变量要与 SktTCPAccept 功能块中的变量设置同一个。
指令相关变量说明如下:

c. 编写 SktTCPRcv 功能块:

设 置 接 收 TCPacp_RECEIVESIZE 变 量 中 指 定 的 字 节 数 , 保 存 到 从TCPacp_RECEIVEADDRESS[0]开始的数组中,其中 SOCKET 变量要与 SktTCPAccept功能块中的变量设置同一个。
指令相关变量说明如下:

d. 编写 SktClose 功能块,用于关闭 SOCKET 端口:

SOCKET 变量要与 SktTCPAccept 功能块中的变量设置同一个。
指令相关变量说明如下:

编写 SktTCPconnect 功能块,将 NJ 作为 TCP 客户端,

在 connect 功能块里写入目标,也就是 PC 的 IP 地址和端口号,以及本地 socket的端口号,此处设置为 6000(勿与 NJ 里 FINS/TCP、 UDP 的端口号重复默认是9600)。
指令相关变量说明如下:

NJ 用于 TCP 客户端时,剩余指令编写方法与作为服务器时一致,请参考上述
服务器相关功能块编写。
3. 现象和结论
(1) NJ 作为服务器:
a. SOCKET TOOL 创建 TCP 客户端,指定 NJ 的 IP 地址,和 NJ socket 端口号
5000(跟功能块设定的端口一致):

b. 先触发 START_ACPTCP 打开 socket 端口,然后点网口工具的连接, 正常会
显示已连接:

指令正常接通,无错误代码。
之后可在监视窗口看到, NJ 会自动读入 PC 的参数。

正常建立连接之后,会自动读入 socket 参数。
c. 在监视窗口写入发送数据,再在 send 功能块写发送的字节数 2 字节。

可看到网口工具收到 NJ 发来的数据,如下:

d. 在串口工具写入要发送给 NJ 的数据。

在工程里先写入要接受的字节长度 2。
触发接收,可看到数据正常接收进来。

e. 关闭连接。
执行 CLOSE 功能块,断开连接。

(2) NJ 作为客户端:
a. SOCKET TOOL 创建 TCP 服务器:
注意此处要正常识别 PC 的 IP 地址,识别不了更换电脑。

软件自动分配的端口为 10000。
b. NJ 触发 star_client 进行客户端连接, 正常会发现网口工具自动显示为“已连接”状态,并正常识别 NJ 的 IP 和端口号:

c. 在 send 功能块里写入发送的 SIZE 位 2 字节,以及发送的数据 1234:

可看到网口调试工具正常接收到数据:

d. 在网口工具发送窗口,给 NJ 发送 FFFF。

在接收功能块里 SIZE 填入接收字节 2,触发接收,可在监视窗口看到接收到的
数据:

e. 关闭连接。
执行 CLOSE 功能块,断开连接。
4. 注意事项
(1) SktUDPCreate 指令、 SktUDPRcv 指令、 SktUDPSend 指令、 SktTCPAccept指令、 SktTCPConnect 指令、 SktTCPRcv 指令、 SktTCPSend 指令、 SktGetTCPStatus指令、 SktClose 指令、 SktClearBuf 指令可同时执行的数量最多为 32。
(3) 如果接收缓存中无数据,则按照超时时间“TimeOut”中设定的时间等待
接收数据,本实例中为设置接收等待时间,则为一直接收。
(4) 一次可发送/接收的数据容量最大为2000字节,SendDat[]的数组容量高于
2000字节时,最多也只能发送2000字节。指定广播地址时,最多只能发送 1472 字节。
(5) TCP通讯时,可以通过SktGetTCPStatus读取TCP状态, SktClearBuf清除接
收缓存。
