C#与欧姆龙PLC实现CIP通讯

参考文档:

欧姆龙PLC使用-CSDN博客

CIP通讯介绍(欧姆龙PLC)-CSDN博客

使用NuGet添加引用:CIPCompolet

基础参考我的CIP协议介绍,默认TCP端口为:44818

类NXCompolet

类的功能可以在安装PLC开发软件后帮助文档中查看,对应路径:C:\ProgramData\Omron\CX-Compolet\StartMenu\CX-Compolet\SYSMAC Compolet help

功能及其示例代码点击后查看

# MachineAutomationControllerCompolet继承CIPPlcCompolet,CIPPlcCompolet的
# 变量
public const long TIMEOUT_INFINITE = 4294967295L;
string RoutePath
ConnectionType ConnectionType
bool Active
long ReceiveTimeLimit
string TypeName
int HeartBeatTimer
CIPDevice Device
bool UseRoutePath
string PeerAddress
int LocalPort
bool IsConnected
string[] VariableNames
# 函数
byte[] ExecuteCIPService(byte serviceCode, int classId, int instanceId, int attributeId, byte[] requestData, long requestDataSize)
byte[] ExecuteCIPService(byte serviceCode, int classId, long instanceId, int attributeId, byte[] requestData, long requestDataSize)
byte[] ExecuteCIPService(byte serviceCode, string variableName, byte[] requestData, long requestDataSize)
void Update()
void AboutBox()
VariableInfo GetVariableInfo(string variableName)# NXCompolet继承MachineAutomationControllerCompolet的
# 变量
string UnitName
short RunStatus
Encoding PlcEncoding
string[] VariableNames                // 可以通过这个公共变量获取到有哪些可读的参数名
string[] SystemVariableNames
DateTime Clock
bool DontFragment
# 函数 
MachineAutomationControllerCompolet(IContainer container)
object ReadVariable(string variableName)
Hashtable ReadVariableMultiple(string[] variableNames)
void WriteVariable(string variableName, object writeData)
byte[] ReadRawData(string variableName)
Hashtable ReadRawDataMultiple(string[] variableNames)
void WriteRawData(string variableName, byte[] writeData)
VariableInfo GetVariableInfo(string variableName)                // 获取变量信息,是否为结构体、数组、对应变量类型
EventLogItemCollection GetEventLogs(EventCategory category)# NXCompolet自己定义的
RunModeTypes RunMode// 数据类型
public enum VariableType
{TIMER = 1,COUNTER = 2,CHANNEL = 3,UINT_BCD = 4,UDINT_BCD = 5,ULINT_BCD = 6,ENUM = 7,DATE_NSEC = 8,TIME_NSEC = 9,DATE_AND_TIME_NSEC = 10,TIME_OF_DAY_NSEC = 11,UNION = 12,BOOL = 193,SINT = 194,INT = 195,DINT = 196,LINT = 197,USINT = 198,UINT = 199,UDINT = 200,ULINT = 201,REAL = 202,LREAL = 203,STRING = 208,BYTE = 209,WORD = 210,DWORD = 211,LWORD = 212,ASTRUCT = 160,STRUCT = 162,ARRAY = 163
}

ExecuteCIPService函数功能描述

# CIPPlc Compolet Class Library
byte[] requestData = new byte[2];
requestData[0] = 1;
requestData[1] = 0;
data = CIPPlcCompolet1.ExecuteCIPService(0x4C, "Variable1", requestData, 2);

运行环境启动配置

  • 安装欧姆龙PLC开发软件
  • 安装工具:CX-Compolet_SGW_Ver1.72
  • 在Network Browser》Control Panel》Network Configuration》EtherNet/IP Hardware》Communications Adapter》如果使用网管更改ip地址

  • 启动网关。点击Start如果有对应Open状态就可以,负责勾选上下面的Extend the Ethernet ports后再Start

  • PLC上配置IP地址(连接成功后更改IP地址)

  • 更改后连接的IP地址设置(如果这里不更改一致,无法实现在线测试更改)
    1. 上方工具栏》控制器》通信设置》远程IP地址

  • PLC添加可被外部读取的全局变量

上位机代码实现

依赖项,Nuget中搜索CIPCompolet添加:

using OMRON.Compolet.CIP;internal class MyCIP
{NXCompolet nXCompolet;          // 欧姆龙的CIP通讯Mutex mutex = new Mutex();      // 进程间互斥锁public MyCIP() {Conncet("192.168.50.1");    // 192.168.50.1; 127.0.0.1}public void Conncet(string ip){Task.Run(() =>{nXCompolet = new NXCompolet(new Container());nXCompolet.PeerAddress = ip;while (true){mutex.WaitOne();Console.WriteLine("RunStatus: " + nXCompolet.RunStatus + "; PeerAddress:" + nXCompolet.PeerAddress);Console.WriteLine("port: " + nXCompolet.LocalPort);//Console.WriteLine("UnitName: " + nXCompolet.UnitName + ",DontFragment: " + nXCompolet.DontFragment);nXCompolet.Active = true;if (!nXCompolet.IsConnected){nXCompolet.Active = false;Console.WriteLine("PLC连接错误");Thread.Sleep(1000);continue;}Console.WriteLine("PLC连接成功");//nXCompolet.RunMode = NXCompolet.RunModeTypes.Program;object obj = nXCompolet.ReadVariable("gbHMI_CloseDoor");Console.WriteLine(obj.ToString());mutex.ReleaseMutex();Thread.Sleep(1000);}});}
}

运行结果

RunStatus: 1; PeerAddress:192.168.50.1 port: 2 PLC连接成功 True

抓取报文

安装wireshark抓取

使用欧姆龙附带的调试工具

更改IP后勾选上Active进入连接状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue svelte solid 虚拟滚动性能对比

前言 由于svelte solid 两大无虚拟DOM框架,由于其性能好,在前端越来越有影响力。 因此本次想要验证,这三个框架关于实现表格虚拟滚动的性能。 比较版本 vue3.4.21svelte4.2.12solid-js1.8.15 比较代码 这里使用了我的 stk-table-vue(np…

web坦克大战小游戏

H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境,解压后浏览器直接打开。有需要的订阅后,私信本人,发源码,含60+小游戏源码。如五子棋、象棋、植物大战僵尸、贪吃蛇、飞机大战、坦克大战、开心消消乐、扑鱼达人、扫雷、打地鼠、斗地主等等。 <!DOCTYPE htm…

【图论】Dijkstra 算法求最短路 - 构建邻接矩阵(带权无向图)

文章目录 例题&#xff1a;到达目的地的方案数题目描述代码与解题思路构建带权无向图的邻接矩阵 例题&#xff1a;到达目的地的方案数 题目链接&#xff1a;1976. 到达目的地的方案数 题目描述 代码与解题思路 func countPaths(n int, roads [][]int) int {g : make([][]int…

数据库和缓存如何保持一致性

目录 前言 更新数据库更新缓存&#xff1a; 1.在更新缓存前先加一个分布式锁 2.在更新完缓存时&#xff0c;给缓存加上较短的过期时间 Cache Aside策略 1.先删除缓存&#xff0c;再更新数据库 延迟双删 2.先更新数据库&#xff0c;再删除缓存 保证两个操作都能执行成功…

【译】WordPress Bricks主题安全漏洞曝光,25,000个安装受影响

WordPress的Bricks主题存在一个严重的安全漏洞,恶意威胁行为者正在积极利用该漏洞在易受攻击的安装上运行任意PHP代码。 该漏洞被跟踪为CVE-2024-25600(CVSS评分:9.8),使未经身份验证的攻击者能够实现远程代码执行。它影响Bricks的所有版本,包括1.9.6版本及更早版本。 该…

线程变量ThreadLocal用于解决多线程并发时访问共享变量的问题。

ThreadLocal介绍 ThreadLocal叫做线程变量&#xff0c;用于解决多线程并发时访问共享变量的问题。意思是ThreadLocal中填充的变量属于当前线程&#xff0c;该变量对其他线程而言是隔离的&#xff0c;也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建…

如何用生成式人工智能准备和制作吸引人的美食视频?

YouTube是一个全球性的视频分享平台&#xff0c;上面充满了各式各样的内容&#xff0c;其中美食内容因其视觉和味觉上的双重吸引而备受欢迎。作为一个想要进入这个领域的创作者&#xff0c;你需要知道如何准备和制作吸引人的美食视频。以下是一些基本步骤和技巧&#xff1a; 选…

UE4 Niagara 关卡3.4官方案例解析

Texture sampling is only supported on the GPU at the moment.(纹理采样目前仅在GPU上受支持) 效果&#xff1a;textures can be referenced within GPU particle systems。this demo maps a texture to a grid of particles&#xff08;纹理可以在GPU粒子系统中被引用这个演…

git使用教程14-Pycharm版本控制与分支管理

一、版本控制 1、版本控制介绍 &#xff08;1&#xff09;Version Control System 版本控制系统&#xff0c;简称VCS。 &#xff08;2&#xff09;版本控制系统分类&#xff1a; 集中式版本控制工具&#xff1a;SVN 分布式版本控制工具&#xff1a;Git 2、Pycharm 支持的版本…

Windows安装MySQL8.0详细步骤

目录 一、官网下载MySQL二、将压缩包解压到没有中文和空格的目录下三、设置配置文件四、配置环境变量五、安装初始化mysql服务 一、官网下载MySQL 进入MySQL官网&#xff1a;https://downloads.mysql.com/archives/community/&#xff0c;下载 Windows (x86, 64-bit), ZIP Arch…

项目管理中,项目经理如何搞定跨部门沟通与协作?

在项目管理中&#xff0c;跨部门沟通是一项至关重要的任务。项目经理作为项目的核心协调者&#xff0c;需要确保不同部门之间的顺畅沟通&#xff0c;以推动项目的顺利进行。项目经理如何搞定跨部门沟通&#xff1f; 实际案例&#xff1a; 某公司正在开发一款智能家居系统&am…

深入探索Docker数据卷:实现容器持久化存储的完美方案(下)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Docker入门到精通》 《k8s入门到实战》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 四、Docker数据卷的高级管理 1、数据卷的生命周期管理 2、数据…

如何做代币分析:以 CRO 币为例

作者&#xff1a;lesleyfootprint.network 编译&#xff1a;Mingfootprint.network 数据源&#xff1a;CRO Token Dashboard &#xff08;仅包括以太坊数据&#xff09; 在加密货币和数字资产领域&#xff0c;代币分析起着至关重要的作用。代币分析指的是深入研究与代币相关…

【Python】进阶学习:pandas--rename()用法详解

【Python】进阶学习&#xff1a;pandas-- rename()用法详解 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您的…

基于SpringBoot的物业管理系统

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一 、设计说明 1.1 研究…

Springboot 过滤器、拦截器、全局异常处理

Springboot 过滤器、拦截器、全局异常处理 一 过滤器&#xff08;Filter&#xff09; 过滤器是JavaWeb三大组件&#xff08;Servlet&#xff0c;Filter&#xff0c;Listener&#xff09;之一。 Filter可以把对资源的请求拦截下来&#xff0c;从而实现一些功能。 注意&#…

低代码工具APEX的入门使用(未包含安装)

第一次使用APEX是2019年&#xff0c;这个技术成名已久只是我了解的比较晚。请看Oracle ACE的网站&#xff0c;这就是用APEX做的。实际上有一次我看O记的人操作他们的办公流程&#xff0c;都是用APEX做的。 那一年&#xff0c;我用APEX做了一个CMDB的管理系统。那时候还没有流行…

美摄科技实时语音数字人解决方案

随着科技的飞速发展&#xff0c;数字人技术已经逐渐渗透到我们生活的各个角落。作为数字人技术的先驱者&#xff0c;美摄科技凭借其卓越的实时语音数字人解决方案&#xff0c;正引领着企业步入一个全新的交互时代。 美摄科技的实时语音数字人解决方案&#xff0c;是基于语音和…

HCIA-Datacom题库(自己整理分类的)_33_DHCP协议多选【7道题】

1.使用动态主机配置协议DHCP分配IP地址有哪些优点? 可以实现IP地址重复利用 工作量大且不好管理 配置信息发生变化(如DNS),只需要管理员在DHCP服务器上修改,方便统一管理 避免IP地址冲突 2.网络中部署了一台DHCP服务器,但是管理员发现部分主机并没有正确获取到该DHCP服务…

产品说明书模板帮你写好了,快来抄作业

想要写好产品说明书&#xff0c;想在网络上参考&#xff0c;信息繁杂且各有不同&#xff0c;东拼西凑也写不出一个好的产品说明书。这时候&#xff0c;如果有产品说明书模板&#xff0c;不仅可以可以提高工作效率&#xff0c;还能保持产品说明书的一致性、提供参考和指导&#…