# 欧姆龙NJ系列PLC内置EIP口实现TCP SOCKET通信详解

张开发
2026/4/10 7:07:38 15 分钟阅读

分享文章

# 欧姆龙NJ系列PLC内置EIP口实现TCP SOCKET通信详解
- **硬件设备**NJ301-1100PLC - **软件环境**Sysmac Studio、Socket Tool - **通信协议**TCP/IP Socket通信 - **应用场景**NJ内置EIP口作为TCP服务器/客户端实现数据交换---## 目录1. [系统概述与硬件配置](#1-系统概述与硬件配置)2. [软件配置与网络参数](#2-软件配置与网络参数)3. [功能块编程详解](#3-功能块编程详解)- 3.1 [TCP服务器模式](#31-tcp服务器模式)- 3.2 [TCP客户端模式](#32-tcp客户端模式)4. [通信测试与现象分析](#4-通信测试与现象分析)- 4.1 [NJ作为服务器测试](#41-nj作为服务器测试)- 4.2 [NJ作为客户端测试](#42-nj作为客户端测试)5. [技术规范与注意事项](#5-技术规范与注意事项)---## 1. 系统概述与硬件配置### 硬件设备- **PLC**: OMRON NJ301-1100- **通信接口**: 内置EtherNet/IP端口支持TCP Socket- **调试工具**: 计算机 Socket Tool调试软件### 网络拓扑与接线采用标准以太网连接硬件接线图如下### IP地址规划| 设备 | IP地址 | 子网掩码 | 备注 ||:---:|:---:|:---:|:---:|| NJ PLC | 10.110.59.2 | 255.255.255.0 | 内置EIP口 || 计算机 | 10.110.59.214 | 255.255.255.0 | 调试终端 |---## 2. 软件配置与网络参数### 2.1 IP地址设置在Sysmac Studio中配置NJ的IP地址为10.110.59.2确保与计算机在同一网段。---## 3. 功能块编程详解NJ系列PLC使用IEC 61131-3标准的功能块Function Block实现Socket通信。以下是服务器端和客户端的完整实现方案。### 3.1 TCP服务器模式#### 3.1.1 建立连接 - SktTCPAccept使用SktTCPAccept功能块将NJ配置为TCP服务器监听客户端连接请求。pascal// 功能块实例化SktTCPAccept_instance(Execute : START_ACPTCP,Socket : ,PortNo : 5000, // NJ服务器端口号TimeOut : 0, // 0表示不限超时时间Socket TCP_SOCKET, // 输出Socket句柄DstAdr , // 客户端地址信息DstPort , // 客户端端口信息Done ,Busy ,Error ,ErrorID );**参数说明**| 变量名 | 类型 | 说明 ||:---:|:---:|:---|| PortNo | UINT | 本地端口号本例设置为**5000** || TimeOut | UDINT | 连接超时时间0表示无限等待 || Socket | STRUCT | Socket句柄后续Send/Rcv/Close需使用同一变量 || DstAdr | STRING | 自动读入的客户端IP地址 || DstPort | UINT | 自动读入的客户端端口号 |**输出变量映射**- 将Socket相关参数反馈到TCPacp_PARAMETER变量中- 成功建立连接后自动读入PC客户端的参数IP地址和端口号#### 3.1.2 数据发送 - SktTCPSend通过SktTCPSend功能块向客户端发送数据。pascalSktTCPSend_instance(Execute : SEND_TRIG,Socket : TCP_SOCKET, // 必须与Accept中的Socket一致SendDat : TCPacp_SENDADDRESS, // 发送数据起始地址数组Size : TCPacp_SENDSIZE, // 发送字节数Done ,Busy ,Error ,ErrorID );**关键参数**- **SendDat**: 从TCPacp_SENDADDRESS[0]开始的数组- **Size**: TCPacp_SENDSIZE变量指定的字节数最大2000字节- **Socket**: 必须与SktTCPAccept中的变量设置同一个#### 3.1.3 数据接收 - SktTCPRcv使用SktTCPRcv功能块接收来自客户端的数据。pascalSktTCPRcv_instance(Execute : RCV_TRIG,Socket : TCP_SOCKET, // 与Accept中的Socket一致Size : TCPacp_RECEIVESIZE, // 期望接收的字节数RcvDat : TCPacp_RECEIVEADDRESS, // 接收缓冲区起始地址RcvSize , // 实际接收字节数Done ,Busy ,Error ,ErrorID );**数据流向**- 接收TCPacp_RECEIVESIZE指定的字节数- 保存到从TCPacp_RECEIVEADDRESS[0]开始的数组中#### 3.1.4 关闭连接 - SktClose通信完成后使用SktClose功能块关闭Socket端口。pascalSktClose_instance(Execute : CLOSE_TRIG,Socket : TCP_SOCKET, // 与Accept中的Socket一致Done ,Busy ,Error ,ErrorID );---### 3.2 TCP客户端模式#### 3.2.1 建立连接 - SktTCPConnect将NJ配置为TCP客户端主动连接服务器。pascalSktTCPConnect_instance(Execute : START_CLIENT,DstAdr : 10.110.59.214, // 目标PC的IP地址DstPort : 10000, // 目标服务器端口号LocalPort : 6000, // 本地Socket端口号Socket TCP_SOCKET_CLIENT,Done ,Busy ,Error ,ErrorID );**重要提示**- **本地端口设置**此处设置为**6000**- **端口冲突避免**勿与NJ内部的FINS/TCP默认9600、UDP端口重复- **目标地址**写入PC服务器的IP地址和端口号#### 3.2.2 数据收发与关闭NJ作为客户端时剩余指令SktTCPSend、SktTCPRcv、SktClose的编写方法与服务器端一致参考上述服务器相关功能块编写使用对应的Socket变量即可。---## 4. 通信测试与现象分析### 4.1 NJ作为服务器测试#### 步骤1创建TCP客户端在Socket Tool中创建TCP客户端配置参数- 目标IP10.110.59.2NJ的IP- 目标端口5000与功能块设定一致#### 步骤2建立连接1. 先触发START_ACPTCP打开Socket端口2. 点击网口工具的连接按钮3. 正常显示已连接状态**现象观察**- 指令正常接通无错误代码ErrorFALSE- 监视窗口中NJ自动读入PC的参数客户端IP和端口#### 步骤3数据发送测试NJ→PC1. 在监视窗口写入发送数据如0x12342. 在SktTCPSend功能块设置发送字节数如2字节3. 触发发送**验证** Socket Tool接收窗口显示NJ发来的数据。#### 步骤4数据接收测试PC→NJ1. 在Socket Tool发送窗口写入数据如0xFFFF2. 在工程中设置接收字节长度如2字节3. 触发SktTCPRcv接收**验证** 监视窗口显示接收到的数据正常写入数组。#### 步骤5关闭连接执行SktClose功能块Socket Tool显示连接断开。---### 4.2 NJ作为客户端测试#### 步骤1创建TCP服务器在Socket Tool中创建TCP服务器- 监听端口软件自动分配如10000- 确保正确识别PC的IP地址如识别失败请更换电脑测试#### 步骤2客户端连接NJ触发START_CLIENT进行连接现象- Socket Tool自动显示已连接状态- 正常识别NJ的IP地址10.110.59.2和端口号6000#### 步骤3数据收发验证**发送测试NJ→PC**- 设置发送Size为2字节- 发送数据0x1234- PC端正常接收**接收测试PC→NJ**- PC发送数据0xFFFF- NJ设置接收Size为2字节触发接收- 监视窗口显示接收数据正确#### 步骤4断开连接执行SktClose功能块关闭连接。---## 5. 技术规范与注意事项### 5.1 并发执行限制以下指令同时执行的数量**最多为32个**- SktUDPCreate、SktUDPRcv、SktUDPSend- SktTCPAccept、SktTCPConnect、SktTCPRcv、SktTCPSend- SktGetTCPStatus、SktClose、SktClearBuf### 5.2 接收超时机制- 如果接收缓存中无数据则按照TimeOut设定的时间等待- **本实例未设置超时时间**TimeOut0则为**一直等待/阻塞接收**### 5.3 数据容量限制| 通信类型 | 最大数据量 | 说明 ||:---:|:---:|:---|| 单播TCP/UDP | 2000字节 | SendDat[]数组容量超过2000时最多发送2000字节 || 广播地址 | 1472字节 | 指定广播地址时的最大限制 |### 5.4 状态管理与维护- **读取状态**可通过SktGetTCPStatus功能块读取当前TCP连接状态- **清除缓存**使用SktClearBuf功能块清除接收缓存中的残留数据### 5.5 端口使用规范- **服务器端口**示例使用5000可自定义需避开系统保留端口- **客户端本地端口**示例使用6000- **避免冲突**不得与FINS/TCP默认端口9600、UDP端口等内部服务端口重复---## 总结本文详细介绍了欧姆龙NJ系列PLC通过内置EtherNet/IP端口实现TCP Socket通信的完整方案包括1. **服务器模式**使用SktTCPAccept监听连接SktTCPSend/SktTCPRcv进行全双工数据交换2. **客户端模式**使用SktTCPConnect主动建立连接后续操作与服务器模式一致3. **技术限制**严格注意32个并发指令限制和2000字节数据包大小限制该方案适用于NJ301、NJ501等支持Socket指令的OMRON NJ系列控制器可实现与上位机、视觉系统、MES系统等第三方设备的标准TCP/IP通信。---**参考文档**OMRON 客户服务中心 P066-1 技术案例**标签**欧姆龙 PLC NJ系列 TCP/IP Socket通信 工业自动化 EtherNet/IP

更多文章