当前位置: 首页 > news >正文

EtherNet/IP开发:C++开发CIP源代码

① 介绍一下CIP

CIP是一种考虑到自动化行业而设计的通用协议。然而,由于其开放性,它可以并且已经应用于更多的领域。CIP网络库包含若干卷:

第1卷介绍了适用于所有网络自适应的CIP的常见方面。本卷包含通用对象库和设备配置文件库,以及通信模型、设备配置和CIP数据管理的一般说明。本卷还定义了一个辅助配电系统,该系统对CIP的所有改造都是通用的。

-第2卷是CIP的EtherNet/IP适配,描述了CIP如何适配到以太网TCP/IP和UDP/IP传输层。它还包含第1卷中EtherNet/IP所需材料的任何扩展,如可选的工业物理层和连接器。

-第3卷是CIP的DeviceNet适配,描述了CIP如何适配到CAN数据链路层。它还包含DeviceNet所需的对第1卷中材料的任何扩展。

-第4卷是CIP的ControlNet适配,描述了CIP如何适配到ControlNet数据链路层。它包含ControlNet数据链路层的完整描述以及ControlNet所需的第1卷中材料的任何扩展。

-第5卷为CIP安全。它包含在CIP网络上实施CIP安全协议所需的信息。

第6卷是CIP的CompoNet适配,描述了CIP如何适配到CompoNet数据链路层。它包含了对CompoNet数据链接层的完整描述,以及对第1卷中材料的任何扩展,这些都是CompoNet所必需的。

-第7卷是Modbus设备与CIP体系结构的集成。本卷描述了将Modbus设备集成到CIP世界的标准。

资料下载和源代码

www.jngbus.com 广州金南瓜科技

② 上代码

C++处理CIP这块内容

代码写完,还需要大量PLC和EtherNet\IP模块测试

CResult CCipHandle::SendData(EncapsulationHeader* pHeader, const char* pData, int nSize)
{int nAllSize = ENCAPSULATION_HEADER_SIZE + nSize;// 使用缓存,避免次次都创建内存vLocker lock(&m_syncSend);m_pSendDataBuffer.SetSize(nAllSize);unsigned char* pBuffer = (unsigned char*)m_pSendDataBuffer.GetString(); if (pBuffer == NULL){return CResult(EIP_MALLOC_FAIL, GetLanguage(EIP_MALLOC_FAIL));}// 处理转换SetShortLH(pHeader->nCommand, pBuffer);SetShortLH(pHeader->nLength, pBuffer + 2);SetIntLH(pHeader->nSessionID, pBuffer + 4);SetIntLH(pHeader->nStatus, pBuffer + 8);SetInt64LH(pHeader->nSenderContext, pBuffer + 12);SetIntLH(pHeader->nStatus, pBuffer + 20);memcpy(pBuffer + ENCAPSULATION_HEADER_SIZE, pData, nSize);// 发送数据return m_pCommHandle.SendData((char*)pBuffer, nSize);
}

数据大小端处理

unsigned int GetIntLH(const unsigned char* pData)
{__int64 nNum = 0;nNum = pData[0];nNum += (((int)pData[1]) << 8) & 0xFF00;nNum += (((int)pData[2]) << 16) & 0xFF0000;nNum += (((int)pData[3]) << 24) & 0xFF000000;return (unsigned int)nNum;
}void SetShortLH(__int64 nNum, unsigned char* pData)
{	pData[0] = nNum & 0xFF;pData[1] = (nNum >> 8) & 0xFF;
}void SetIntLH(__int64 nNum, unsigned char* pData)
{	pData[0] = nNum & 0xFF;pData[1] = (nNum >> 8) & 0xFF;pData[2] = (nNum >> 16) & 0xFF;pData[3] = (nNum >> 24) & 0xFF;
}

相关文章:

EtherNet/IP开发:C++开发CIP源代码

① 介绍一下CIP CIP是一种考虑到自动化行业而设计的通用协议。然而&#xff0c;由于其开放性&#xff0c;它可以并且已经应用于更多的领域。CIP网络库包含若干卷&#xff1a; 第1卷介绍了适用于所有网络自适应的CIP的常见方面。本卷包含通用对象库和设备配置文件库&#xff0…...

【算法题】68. 文本左右对齐

题目 给定一个单词数组 words 和一个长度 maxWidth &#xff0c;重新排版单词&#xff0c;使其成为每行恰好有 maxWidth 个字符&#xff0c;且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词&#xff1b;也就是说&#xff0c;尽可能多地往每行中放置单词。必…...

PHP 调用 e 签宝接口签名指南

前言 在 401 问题上卡了 一段时间&#xff0c;参考官网文档和鉴权签名计算测试也试了很久&#xff0c;签名确定是没错的&#xff0c;但是一直提示 INVALID_SIGNATURE 其实问题在于我忽略了 公共请求头格式 中 Content-MD5 部分的一句话&#xff1a; GET 和 DELETE 请求且 Bod…...

穿越Flink的时间隧道:解锁实时数据之窗,掌握流处理之巅

目录 Flink中的时间和窗口 1时间语义 1.1Flink中的时间语义 1.1.1处理时间 1.1.2事件时间 1.2那种时间语义更重要 2 水位线 2.1 事件时间和窗口 2.2 什么是水位线 2.3 如何生成水位线 2.3.1使用WatermarkGenerator 2.3.2使用SourceFunction 2.4 水位线的传递 2.5 水位…...

服务器与Ajax

1.初识Ajax Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 术语ajax最早产生于2005年&#xff0c;Ajax表示Asynchronous JavaScript and XML(异步JavaScript和XML)&#xff0c;但是它不是像HTML、JavaScript或CSS这样的一种“正式的”技…...

Electron项目架构方案心得

这里只记录FE的业务流程设计考虑和Electron的业务流程考虑。 一个electron客户端&#xff0c;理想的架构是&#xff0c;底层的能力支持完全由electron底层模块支持。关于electron底层模块的支持&#xff0c;不限于node packages 或者 dll 或者 rust实现的一些东东。而业务流程…...

Java中创建List接口、ArrayList类和LinkedList类的常用方法(一)

List接口 要了解List接口&#xff0c;就不得不说起Java的集合框架。 &#xff08;该图来自菜鸟教程&#xff09; Collection接口和Map接口 Java 集合框架主要包括两种类型的容器&#xff0c;集合Collection和图Map。 Collection接口代表了单列集合&#xff0c;它包含了一组…...

顶级开源社区开发者体验实践分享

实践一&#xff1a;开发者贡献指南 实践二&#xff1a;Dev Container Setup&#xff08;bonus&#xff09; 实践三&#xff1a;Good First Issues 实践三&#xff1a;Good Second Issues&#xff08;bonus&#xff09; 实践四&#xff1a;RFC 机制 实践五&#xff1a;完善 CI I…...

STM32之RTC实时时钟

一、实时时钟概述 1、实时时钟介绍 英文缩写&#xff1a;RTC。显示年、月、日、时、分、秒、星期,自动计算闰年&#xff0c;能够区分每个月的天数。 RTC特点&#xff1a;能从RTC获取到具体的日期时间&#xff0c;断掉后再开机时间仍然准确&#xff08;需要纽扣电池&#xff…...

Java JVM 堆、栈、方法区详解

目录 1. 栈 2. 堆 3. 方法区 4. 本地方法栈 5. 程序计数器 首先来看一下JVM运行时数据区有哪些。 1. 栈 在介绍JVM栈之前&#xff0c;先了解一下 栈帧 概念。 栈帧&#xff1a;一个栈帧随着一个方法的调用开始而创建&#xff0c;这个方法调用完成而销毁。栈帧内存放者方…...

Oracle篇—分区表和分区索引的介绍和分类(第一篇,总共五篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…...

Vue中的模式和环境变量

文章目录 一、介绍二、配置1、环境文件2、变量使用 三、读取环境文件 一、介绍 vue官网&#xff1a;https://cli.vuejs.org/zh/guide/mode-and-env.html模式是 Vue CLI 项目中一个重要的概念。默认情况下&#xff0c;一个 Vue CLI 项目有三个模式 开发环境&#xff1a;develop…...

用ChatGPT教学、科研!亚利桑那州立大学与OpenAI合作

亚利桑那州立大学&#xff08;简称“ASU”&#xff09;在官网宣布与OpenAI达成技术合作。从2024年2月份开始&#xff0c;为所有学生提供ChatGPT企业版访问权限&#xff0c;主要用于学习、课程作业和学术研究等。 为了帮助学生更好地学习ChatGPT和大语言模型产品&#xff0c;AS…...

问题解决:django模型查询报错,找不到数据库表

django项目&#xff0c;使用的postgresql数据库&#xff0c;建了多个模式&#xff0c;模型查询时一直默认查public的表 1. 问题&#xff1a; django.db.utils.ProgrammingError: relation "ip_management_app.table" does not exist 2. 代码&#xff1a; class …...

持续集成工具Jenkins的使用之安装篇(一)

Jenkins是一个基于Java开发的开源的一种持续集成工具&#xff0c;主要用于环境部署&#xff0c;监控重复性的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。要想使用它&#xff0c;你就必须的先安装&#xff0c;接下来我们就介绍下J…...

【JavaScript】面向后端快速学习 笔记

文章目录 JS是什么&#xff1f;一、JS导入二、数据类型 变量 运算符三、流程控制四、函数五、对象 与 JSON5.1 对象5.2 JSON5.3 常见对象1. 数组2. Boolean对象3. Date对象4. Math5. Number6. String 六、事件6.1 常用方法1. 鼠标事件2. 键盘事件3. 表单事件 6.2 事件的绑定**1…...

笨蛋学设计模式行为型模式-命令模式【19】

行为型模式-命令模式 8.6命令模式8.6.1概念8.6.2场景8.6.3优势 / 劣势8.6.4命令模式可分为8.6.5命令模式8.6.6实战8.6.6.1题目描述8.6.6.2输入描述8.6.6.3输出描述8.6.6.4代码 8.6.7总结 8.6命令模式 8.6.1概念 ​ 命令模式允许将请求封装成一个对象(命令对象&#xff0c;包含…...

windows用msvc编译opencv、opencv-python、opencv_contrib、cuda

如要用mingw编译opencv&#xff0c;参考我另外一篇文章https://blog.csdn.net/weixin_44733606/article/details/135741806。 如要用Ubuntu编译opencv&#xff0c;参考我另外一篇文章https://blog.csdn.net/weixin_44733606/article/details/131720128。 一、安装VS2022&…...

JVM实战篇:GC调优

目录 一.GC调优的核心指标 1.1吞吐量&#xff08;Throughput&#xff09; 1.2延迟&#xff08;Latency&#xff09; 1.3内存使用量 二.GC调优的方法 2.1监控工具 Jstat工具 VisualVm插件 Prometheus Grafana 2.2诊断原因 GC日志 GC Viewer GCeasy 2.3常见的GC模…...

C# 获取QQ会话聊天信息

目录 利用UIAutomation获取QQ会话聊天信息 效果 代码 目前遇到一个问题 其他解决办法 利用UIAutomation获取QQ会话聊天信息 效果 代码 AutomationElement window AutomationElement.FromHandle(get.WindowHwnd); AutomationElement QQMsgList window.FindFirst(Tr…...

告别臃肿软件!OmenSuperHub:惠普暗影精灵的纯净硬件控制神器

告别臃肿软件&#xff01;OmenSuperHub&#xff1a;惠普暗影精灵的纯净硬件控制神器 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度&#xff0c;自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 厌倦了官方Omen Gamin…...

别再只让小车跑了!给Arduino履带底盘加上机械臂,实现自动搬运的5个关键点

从玩具到工具&#xff1a;Arduino履带机械臂的工程化升级指南 当你的Arduino履带小车已经能在客厅里自如巡线时&#xff0c;是否想过让它真正"动手"做点事情&#xff1f;给底盘加装机械臂绝不是简单的物理拼接——我曾亲眼见证一个精心设计的六自由度机械臂在第一次抓…...

轻量级推荐系统MiniOneRec:从协同过滤到服务部署的实践指南

1. 项目概述&#xff1a;一个轻量级、高可用的推荐系统引擎在数据驱动的今天&#xff0c;推荐系统早已不是大型互联网公司的专属。无论是电商平台、内容社区&#xff0c;还是企业内部的知识库、工具集&#xff0c;个性化推荐都已成为提升用户体验和业务效率的核心能力。然而&am…...

从零开始将个人小项目的大模型API切换至Taotoken的过程与感受

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 从零开始将个人小项目的大模型API切换至Taotoken的过程与感受 1. 迁移前的项目状态与动机 我维护着一个用于内容摘要和分类的个人…...

B站视频解析API架构解析:PHP实现的高效视频流获取方案

B站视频解析API架构解析&#xff1a;PHP实现的高效视频流获取方案 【免费下载链接】bilibili-parse bilibili Video API 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse 在视频内容生态蓬勃发展的今天&#xff0c;开发者经常面临一个技术挑战&#xff1a;…...

告别模拟器:在Windows上直接安装Android应用的终极指南

告别模拟器&#xff1a;在Windows上直接安装Android应用的终极指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经梦想过在Windows电脑上直接运行Android应…...

别再手动画图表了!用这套Figma可视化组件库7.0,5分钟搞定大屏设计稿

别再手动画图表了&#xff01;用这套Figma可视化组件库7.0&#xff0c;5分钟搞定大屏设计稿 凌晨3点的设计工作室里&#xff0c;咖啡杯已经空了第三轮。李然盯着屏幕上那个反复修改了7次却始终不够"科技感"的柱状图&#xff0c;突然意识到——设计师的时间不该浪费在…...

【效率革命】PolyWindow插件:从多边形到精美窗户的3dMax一键生成秘籍

1. 为什么你需要PolyWindow插件&#xff1f; 如果你经常用3dMax做建筑可视化或室内设计&#xff0c;肯定遇到过这样的烦恼&#xff1a;项目里需要做几十个风格各异的窗户&#xff0c;每个都要手动建模、分格、赋材质&#xff0c;光是想到这个工作量就让人头皮发麻。我去年接的一…...

Playwright自动化进阶:手把手教你用Yaml实现数据驱动,让测试用例管理效率翻倍

Playwright自动化进阶&#xff1a;手把手教你用Yaml实现数据驱动&#xff0c;让测试用例管理效率翻倍 当UI自动化测试用例数量达到三位数时&#xff0c;每次修改测试数据都像在代码海洋中捞针。我曾经历过这样的痛苦&#xff1a;某次产品迭代导致200多个测试用例中的URL全部需要…...

三步搞定海量图片二维码识别:QrScan批量检测工具终极指南

三步搞定海量图片二维码识别&#xff1a;QrScan批量检测工具终极指南 【免费下载链接】QrScan 离线批量检测图片是否包含二维码以及识别二维码 项目地址: https://gitcode.com/gh_mirrors/qrs/QrScan 你是否曾经面对成千上万的图片文件&#xff0c;需要从中筛选出包含二…...