EtherNet/IP开发:C++搭建基础模块,EtherNet/IP源代码

news2025/1/16 17:05:58

这里是CIP资料的协议层级图,讲解协议构造。

ODVA(www.ODVA.org)成立于1995年,是一个全球性协会,其成员包括世界领先的自动化公司。结合其成员的支持,ODVA的使命是在工业自动化中推进开放、可互操作的信息和通信技术。成员团体的基础是其在制定标准和促进通过《共同工业议定书》方面的主要共同利益™), ODVA的媒体独立网络协议,以及CIP–EtherNet/IP的网络适配™, DeviceNet™, CompoNet™ 和ControlNet™. ODVA管理这些技术,并在一个通用结构中开发和分发这四个网络的规范,以帮助确保一致性和准确性。下图说明了由四个网络组成的库的组织结构。

中文总线资料和方案 www.jngbus.com

广州金南瓜科技

我们可以看到,其中一个EtherNet/IP是基于TCP/UDP之上。

那么我们就可以理解为,基于socket应用之上就可以了。

如果只是纯应用角度去开发EtherNet/IP,可以借助一些成熟的socket库。奈何我们早期学C++的人,没有那么多成熟模块,都是靠自己撸出来。

把TCP/IP通讯单独做成一个dll

① 目的是后续我们讲解开发modbus tcp、profinet等这些以太网协议时候,就不需要每种协议都单独写一次TCP/UDP通讯了

头文件代码


// 用于TCP/IP通讯
class CTcpCommunication : public CTcpCommExport
{
public:
    CTcpCommunication();
    virtual ~CTcpCommunication();

    // 释放
    void Release();    

    void SetCallback(OnCommDataHandle* pDataCallback, OnCommEventNotify* pEventCallback, void* pObject);
    CResult Connect(const char* pIP, __int32 nPort);        // 连接
    void Disconnect();                                        // 关闭连接
    CResult SendData(const char* pData, __int32 nSize);        // 数据发读
    void SetLanguage(__int32 nType);

protected:

    // 数据接收    
private:
    
    void InitSockWSA();
    void ReleaseSockWSA();

    // 接收数据线程
    void CreateRecvThread();        // 创建接收线程
    void ExitRecvThread();            // 退出接收线程
    static void RunRecvThread(void* lp);
    void RecvHandle();
    bool IsExitThread();
    void OneRecvData();                // 一次接收数据
    void StartRecvData();            // 开始接收数据
    void StopRecvData();            
    void CloseConnect();            // 关闭通讯

private:

    CData m_pData;

};

② socket处理很简单,其实就是围绕着收发

connect和send、recv

至于性能问题,就是如何优化在这处理和同步问题了。

程序稳定可靠需要靠自身的积累了。

建立通讯代码。

	if(m_hSock == INVALID_SOCKET)
	{
		m_hSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
		if(m_hSock != INVALID_SOCKET)
		{		
			if(connect(m_hSock, (struct sockaddr*)&m_pSA, sizeof(m_pSA)) < 0)
			{					
				closesocket(m_hSock);
				m_hSock = INVALID_SOCKET;	

				// MC TCP连接失败,请查看网络是否通讯上、或者端口问题
				return CResult(TCP_SOCKET_CONNECT_FAIL, GetLanguage(TCP_SOCKET_CONNECT_FAIL));			
			}	
		}
		else
		{
			return CResult(TCP_SOCKET_CREATE_FAIL,  GetLanguage(TCP_SOCKET_CREATE_FAIL));				
		}
	}

	return CResult();

发送数据

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

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

相关文章

人工智能原理实验1(2)——传教士与野人问题

&#x1f9e1;&#x1f9e1;实验内容&#x1f9e1;&#x1f9e1; 有n个牧师和n个野人准备渡河&#xff0c;但只有一条能容纳c个人的小船&#xff0c;为了防止野人侵犯牧师&#xff0c;要求无论在何处&#xff0c;牧师的人数不得少于野人的人数(除非牧师人数为0)&#xff0c;且假…

算法练习-替换数字(思路+流程图+代码)

难度参考 难度&#xff1a;简单 分类&#xff1a;字符串 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。以下内容均为个人笔记&#xff0c;旨在督促自己认真学习。 题目 给定一个字符串S,它包含小写字母和数字字符&#xff0…

全国各省市上市公司数量数据,Shp、excel格式,含上市企业数量、行政区划中心点位经纬度等字段

基本信息. 数据名称: 全国各省市上市公司数量数据 数据格式: Shp、excel 数据时间: 2023年1月 数据几何类型: 面 数据坐标系: WGS84 数据来源&#xff1a;网络公开数据 数据字段&#xff1a; 序号字段名称字段说明1province省份名称2provin_dm省份代码3city城市名…

力扣刷MySQL-第七弹(详细讲解)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;力扣刷题讲解-MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出…

如何快速搭建springboot+前后端分离(vue),多商户客户端实现微信小程序+ios+app使用uniapp(一处编写,处处编译)

kxmalls外卖生鲜多商户&#xff0c;针对中小商户、企业和个人学习者开发。使用Java编码&#xff0c;采用SpringBoot、Mybatis-Plus等易用框架&#xff0c;适合个人学习研究。同时支持单机部署、集群部署&#xff0c;用户与店铺范围动态定位&#xff0c;中小商户企业可根据业务动…

C语言的编译和链接

每日一言 要保持希望在每天清晨太阳升起。 --自己 前言 当我们写下C语言代码&#xff08;源文件、以.c为后缀&#xff09;的时候&#xff0c;他需要经过一个翻译环境&#xff0c;被处理后形成一个可执行程序&#xff08;以.exe为后缀&#xff09;。形成的这个可执行程序里面放…

【服务器】搭建一台属于自己的服务器

​🌈个人主页:Sarapines Programmer🔥 系列专栏:【服务器】搭建网站⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 1. 购买服务器和域名 1.1 购买服务器 1.1.1 阿里云服务器 1.1.2 香草云服务器 1.2 购买域名 2. 安装宝塔…

matlab抽取与插值

什么是抽取&#xff1f; 我们假设一个数字信号 x ( n ) , n 1 , 2 , . . . , N x(n),n1,2,...,N x(n),n1,2,...,N共有 N N N个点&#xff0c;抽取就是每个几个点抽1个点&#xff0c;比如2倍抽取&#xff0c;那么抽取后的信号为 y ( n ) , y ( 1 ) x ( 1 ) , y ( 2 ) x ( 3 …

WebSocket-黑马好客租房

文章目录 网站中的消息功能如何实现&#xff1f;什么是WebSocket&#xff1f;http与websocket的区别httpwebsocket 浏览器支持情况快速入门创建itcast-websocket工程websocket的相关注解说明实现websocket服务测试编写js客户端 SpringBoot整合WebSocket导入依赖编写WebSocketHa…

Python实现M-Estimators稳健线性回归模型(RLM算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 M-Estimators 是稳健统计估计中的一个重要概念&#xff0c;它们在处理含有异常值、离群点或者影响点的…

GPT应用_AutoGPT

项目地址&#xff1a;https://github.com/Significant-Gravitas/AutoGPT 1 功能 1.1 整体功能&#xff0c;想解决什么问题 单独使用 ChatGPT 时&#xff0c;只提供基本的聊天&#xff0c;无法实现复杂多步的功能&#xff0c;以及与其它应用交互&#xff0c;如果想提供某种功…

【开源】基于JAVA的停车场收费系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 停车位模块2.2 车辆模块2.3 停车收费模块2.4 IC卡模块2.5 IC卡挂失模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 停车场表3.2.2 车辆表3.2.3 停车收费表3.2.4 IC 卡表3.2.5 IC 卡挂失表 四、系统实现五、核心代码…

【微服务】springcloud集成sleuth与zipkin实现链路追踪

目录 一、前言 二、分布式链路调用问题 三、链路追踪中的几个概念 3.1 什么是链路追踪 3.2 常用的链路追踪技术 3.3 链路追踪的几个术语 3.3.1 span ​编辑 3.3.2 trace 3.3.3 Annotation 四、sluth与zipkin概述 4.1 sluth介绍 4.1.1 sluth是什么 4.1.2 sluth核心…

微电网优化MATLAB:遗传算法(Genetic Algorithm,GA)求解微电网优化(提供MATLAB代码)

一、微网系统运行优化模型 微电网优化是指通过对微电网系统中各个组件的运行状态进行监测和调节&#xff0c;以实现微电网系统的高效运行和能源利用的最大化。微电网是由多种能源资源&#xff08;如太阳能、风能、储能等&#xff09;和负载&#xff08;如建筑、工业设备等&…

NLP论文阅读记录 - 2021 | WOS 使用预训练的序列到序列模型进行土耳其语抽象文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作2.1 预训练的序列到序列模型2.2 抽象文本摘要 三.本文方法3.1 总结为两阶段学习3.1.1 基础系统 3.2 重构文本摘要 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结…

STM32 Hal库FreeRtos查看所有任务的内存栈信息使用情况剩余空间 仅需一个函数搞定 超简单

STM32F103 基于Hal库跑FreeRtos&#xff0c;查看所有任务的栈的信息&#xff0c;包括任务名&#xff0c;任务状态&#xff0c;任务优先级&#xff0c;空闲栈&#xff0c;任务号。 运行结果如下 只需要使用一个函数vTaskList &#xff1a;获得任务的统计信息&#xff0c;形式为…

【leetcode】移除元素

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一.暴力求解法二.使用额外数组三.原地修改数组 点击查看题目 一.暴力求解法 若我们不考虑时间复杂度…

AI视频智能识别技术在智慧农业大棚升级改造管理场景中的应用方案

一、需求分析 随着科技的进步和农业现代化的推进&#xff0c;智能化技术逐渐成为现代农业发展的重要支撑。农业大棚作为现代农业的重要组成部分&#xff0c;其智能化改造对于提高农业生产效率、降低成本、增加收益具有重要意义。利用先进的信息化手段来对农业大棚进行管理&…

复合材料压缩过程中引入屈曲变形前后的对比

振动模态&#xff1a; 压缩过程&#xff08;不考虑屈曲引入&#xff09; 在45KN出现拐点&#xff0c;在30步。 30步&#xff0c;压缩时的面外位移&#xff0c;与一阶模态类似&#xff1b;31步已经不正常。在快破坏前几步与一阶模态很相似。 30步树脂拉伸只是零星出现 …

CSS之高度塌陷和外边距塌陷

目录 1.高度塌陷&#xff08;原因&#xff0c;如何解决&#xff09; 【概念介绍】 【解决办法】 【概念介绍-BFC】 【拓展-BFC的触发条件】 2.外边距塌陷 &#xff08;原因&#xff0c;如何解决&#xff09; 【概念介绍】 【两种情况】 1.相邻块元素 2.嵌套块元素 【…