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.rhkb.cn/news/272315.html

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

相关文章

【Transformer】single self-attention的理解与计算步骤

参考B站Enzo_Mi老师 【self-Attention|自注意力机制 |位置编码 | 理论 代码】https://www.bilibili.com/video/BV1qo4y1F7Ep?vd_source19425b683f74eeac34bde8ddf968a0d6 建议大家去看老师的原视频,讲解非常清晰,这里…

类和对象-继承

师从黑马程序员 基本语法 有些类与类之间存在特殊的关系,例如: 定义这些类时,下一级别的成员除了拥有上一级的共性,还有自己的特性。 这时候我们就可以考虑继承技术,减少重复代码 语法:class 子类&…

【鸿蒙 HarmonyOS 4.0】应用状态:LocalStorage/AppStorage/PersistentStorage

一、介绍 如果要实现应用级的,或者多个页面的状态数据共享,就需要用到应用级别的状态管理的概念。 LocalStorage:页面级UI状态存储,通常用于UIAbility内、页面间的状态共享。AppStorage:特殊的单例LocalStorage对象&…

Android Studio下载gradle超时问题解决

方法一 1. 配置根目录的setting.gradle.kts文件 pluginManagement {repositories {maven { urluri ("https://www.jitpack.io")}maven { urluri ("https://maven.aliyun.com/repository/releases")}maven { urluri ("https://maven.aliyun.com/repos…

【Pytorch、torchvision、CUDA 各个版本对应关系以及安装指令】

Pytorch、torchvision、CUDA 各个版本对应关系以及安装指令 1、名词解释 1.1 CUDA CUDA(Compute Unified Device Architecture)是由NVIDIA开发的用于并行计算的平台和编程模型。CUDA旨在利用NVIDIA GPU(图形处理单元)的强大计算…

SpringCloudGateway全局过滤器

文章目录 全局过滤器的作用自定义全局过滤器过滤器执行的顺序 上一篇 Gateway理论与实践 介绍的过滤器,网关提供了31种,但每一种过滤器的作用都是固定的。如果我们希望拦截请求,做自己的业务逻辑则没办法实现。 全局过滤器的作用 全局过滤器的…

App前端开发跨平台框架比较:React Native、Flutter、Xamarin等

引言 移动应用开发领域的跨平台框架正在不断演进,为开发者提供更多选择。在本文中,我们将比较几个流行的跨平台框架:React Native、Flutter和Xamarin等。讨论它们的优缺点、适用场景以及开发体验。 第一部分 React Native: 优缺点、适用场景…

大模型时代下的自动驾驶研发测试工具链-SimCycle

前言: 最近OpenAI公司的新产品Sora的发布,正式掀起了AI在视频创作相关行业的革新浪潮,AI不再仅限于文本、语音和图像,而直接可以完成视频的生成,这是AI发展历程中的又一座重要的里程碑。AI正在不断席卷着过去与我们息…

接口自动化框架(Pytest+request+Allure)

前言: 接口自动化是指模拟程序接口层面的自动化,由于接口不易变更,维护成本更小,所以深受各大公司的喜爱。 接口自动化包含2个部分,功能性的接口自动化测试和并发接口自动化测试。 本次文章着重介绍第一种&#xff0c…

python学习the sixth day

python函数进阶 一、函数多返回值 二、函数的多种参数使用 1.位置参数 2.关键字参数 3.缺省参数 设置默认值,必须放在最后面 4.不定长参数 4.总结 三、匿名函数 1.函数作为参数传递 这是计算逻辑的传递,而非数据的传递 2.lambda匿名函数 python文件操…

【vue.js】文档解读【day 3】 | 条件渲染

如果阅读有疑问的话,欢迎评论或私信!! 文章目录 条件渲染前言:v-ifv-elsev-else-iftemplate中的v-ifv-showv-if vs v-show 条件渲染 前言: 在JavaScript中,我们知道条件控制语句可以控制程序的走向&#…

ReactNative项目构建分析与思考之react-native-gradle-plugin

前一段时间由于业务需要,接触了下React Native相关的知识,以一个Android开发者的视角,对React Native 项目组织和构建流程有了一些粗浅的认识,同时也对RN混合开发项目如何搭建又了一点小小的思考。 RN环境搭建 RN文档提供了两种…

阿珊详解Vue Router的守卫机制

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

用一个 Python 脚本实现依次运行其他多个带 argparse 命令行参数的 .py 文件

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 问题描述:在 Windows 环境中,您希望通过一个 Python 脚本来实现特定的自动化任务,该任务需要依次运行其他多个带 argparse 命令行参数的 .py 文件。您希望找到一种简…

CXYGZL实现钉钉、飞书和微信全面覆盖!!!

非常欣慰能在这里与大家分享,CXYGZL已圆满实现多端互通的目标!!! 无论您是在手机、电脑还是平板上使用钉钉、企微还是飞书,只需将CXYGZL轻松集成到您的办公软件中,即可实现无缝审批处理各项任务&#xff0c…

计算机找不到msvcr120.dll的五种修复方法,轻松搞定msvcr120.dll丢失问题

当计算机系统中msvcr120.dll文件丢失时,可能会引发一系列运行问题和故障现象。msvcr120.dll是Microsoft Visual C Redistributable Package的一部分,对于许多Windows应用程序的正常运行至关重要。由于msvcr120.dll是许多软件在运行过程中依赖的重要动态链…

Java项目:44 ssm003在线医疗服务系统+jsp(含文档)

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 主要功能 前台登录: 注册用户:用户名、密码、姓名、联系电话 注册医生:医生工号、密码、医生姓名、职称、…

idea:springboot项目搭建

目录 一、创建项目 1、File → New → Project 2、Spring Initializr → Next 3、填写信息 → Next 4、web → Spring Web → Next 5、填写信息 → Finish 6、处理配置不合理内容 7、注意事项 7.1 有依赖包,却显示找不到依赖,刷新一下maven 7.…

基于 HBase Phoenix 构建实时数仓(2)—— HBase 完全分布式安装

目录 一、开启 HDFS 机柜感知 1. 增加 core-site.xml 配置项 2. 创建机柜感知脚本 3. 创建机柜配置信息文件 4. 分发相关文件到其它节点 5. 重启 HDFS 使机柜感知生效 二、主机规划 三、安装配置 HBase 完全分布式集群 1. 在所有节点上配置环境变量 2. 解压、配置环境…

瑞_Redis_短信登录(一)

文章目录 项目介绍1 短信登录1.1 项目准备1.1.1 导入SQL1.1.2 导入后端项目1.1.3 导入前端项目 🙊 前言:本文章为瑞_系列专栏之《Redis》的实战篇的短信登录章节的项目准备小节。由于博主是从B站黑马程序员的《Redis》学习其相关知识,所以本系…