【网络通讯】【通讯协议(一)】

【网络通讯】【SuperSocket实现(三)】 介绍使用SuperSocket实现网络通讯(作为客户端,使用FixedHeaderReceiveFilter协议实现)。 阅读详情

网络通讯系列

第四章 【网络通讯】【DotNetty实现(四)】
第三章 【网络通讯】【SuperSocket实现(三)】
第二章 【网络通讯】【Socket实现(二)】
第一章 【网络通讯】【通讯协议(一)】



前言

这里协定通讯协议。在自动化设备开发的场景下,因为项目时间紧,很多时候我们都是随便列一些字符串表示不同意思,就当是通讯协议了,但其实这样不好,一个是后期不好维护、后人不好接手,在开发过程中的变化不好追溯,同事也增加了莫名其妙BUG出现的概率,提高调试、维护成本。


一、基本规则

1. 以太网接口,TCP/IP协议。

网线要根据具体情况选择,如考虑传输速率、抗干扰性、柔性等,一般常用的内容通讯简单网线即可。
如无特殊要求的话,不要纠结,上位机通常作为TCP客户端。

2. 数据格式,使用16进制字节。

(在程序中也可以在应用层上再封装一层字符串的接口,装换字节后再通过通讯接口发送,或将接收到的内容转换字符串再输出)

注意:在16进制字节中,本协议规定,所有数据均按照小端格式传输,即16位、32位数据格式均先传输先低后高原则

3. 问答方式通讯,有问必有答。

正常通讯时,由上位机客户端下发指令到服务器,服务器收到指令,然后处理逻辑,最后需要回复上位机客户端处理结果,如无逻辑需要处理,也要回复信息表示收到(心跳指令除外)
上位机客户端发出的报文叫下行报文,服务器发出的报文叫上行报文。

二、数据链路层

1. TCP标准数据包格式

包长度固定标识命令码操作号总包数分包号数据长度数据内容校验码结束符固定标识
0x04PFDataCrc160x550x00
2字节1字节1字节1字节2字节2字节2字节N字节2字节1字节1字节

包长度:表示发送的有效数据长度(不包括本身),即从前面固定标识到包尾固定标识范围内的字节总数(包括固定标识),用来解析分隔收到的通讯内容。

命令码:标识当前指令的具体分类,如表示心跳命令可以用0xFF,表示视觉图形处理结果可以用0xFE,这个可以分两部分,一部分是公司内所有项目固定的命令,另一个部分根据项目具体的情况协定,但是不管怎么样,一定一定一定要输出定好后的协议文档存档。

操作号:从0开始,这个是每次发送命令后,下次发送新命令需要递增的,因为工业自动化设备的生产环境千奇百怪,有的设备干扰挺强的,容易丢包,这时候程序就可以通过操作号很容易处理了,程序可以一直发送同一条指令,操作号不变,直到收到回复后再发送下一条指令,操作号递增变化。

总包数、分包号:从1开始,这两个是一起使用的,因为发送一条指令不能太大,否则容易出现丢包等异常现象,我们协议规定一条指令最大1Kb即1024字节,那么某个场景下需要发送升级文件到下位机嵌入式板,可能就发不出了,这时候就可以用上分包功能,读文件内容并拆分多包分别发送,注意操作号应该是要一样的,因为在分包号已经区分开了。总包数、分包号分别使用2个字节,意味着一共可以发送最大的内容长度是:(1024-15)*65535=66124815字节,约为63MB大小,如果超出这个范围,需要结合命令码扩展。

数据长度:即数据内容的长度,用于解析数据内容

数据内容:即发送的具体内容,举个例子,如需要发送视觉的X、Y补偿数据给到机械手,X为0.01,Y为0.12,那么在协议上可以这样定,单位为0.001,X占一个字节,Y占一个字节,那么X为10即0x0A,Y为120即0x78,那么数据长度+数据内容就应该是:0x02 0x0A 0x78

校验码:表示从命令字到后数据内容最后一个数据的范围内所有数据的CRC16查表校验。
校验表:

    CRC16_Table = [
    0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
    0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
    0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
    0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
    0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
    0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
    0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
    0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
    0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
    0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
    0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
    0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
    0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
    0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
    0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
    0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
    0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
    0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
    0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
    0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
    0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
    0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
    0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
    0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
    0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
    0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
    0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
    0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
    0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
    0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
    0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
    0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
];

总结

后面章节我们从代码上具体实现

网口通讯与串口通讯(内含代码) 网口通讯与串口通讯 阅读详情

相关推荐

Modbus 网络通讯协议

1、概述 通信协议详细地描述了温湿度传感器的输入和输出命令、信息和数据,以便第三方使用和开发。 1.1通信协议的作用     使信息和数据在上位机(主站)和温湿度传感器之间有效地传递,允许访问温湿度传感器的所有测量数据。    温湿度传感器可以实时采集现场温湿度的值,具备一个RS485通讯口,能满足小型温湿度监控系统的要求。其功能和技术指标参见用户手册。     温湿度传感器通信协议

拥抱变化 8919

.NET C# Socket产品性能测试、性能对比报告(包含SuperSocket、HPSocket.Net、TouchSocket)

因为我是TouchSocket 的作者,所以难免会对自家产品有诸多赞扬,但是实际上我知道,TouchSocket 还有很长的路要走,好的产品只有经过时间和更多人的考验,才能淘沙出金。所以希望本篇测评,能该您一个建议,也能给TouchSocket 一个机会。下次选择Socket的时候,可以考虑一下TouchSocket 哦。

若汝棋茗 的博客 1万+

Python爬虫实战:5分钟搞定东方财富A股数据抓取(附完整代码)

本文提供了一套基于Python的A股数据自动化采集与分析系统构建方案。文章详细解析了如何通过稳健的爬虫框架从东方财富等公开数据源高效抓取A股数据,并设计数据库进行自动化存储与管理,特别适合量化研究和数据分析场景。

weixin_29062963的博客 4429

Netty和Tomcat的区别已经性能对比

一、Netty和Tomcat有什么区别? Netty和Tomcat最大的区别就在于通信协议,Tomcat是基于Http协议的,他的实质是一个基于http协议的web容器,但是Netty不一样,他能通过编程自定义各种协议,因为netty能够通过codec自己来编码/解码字节流,完成类似redis访问的功能,这就是netty和tomcat最大的不同。有人说netty的性能就一定比tomcat性能高,其...

qq_36318234的博客 3万+

Flutter for web 首次加载过慢问题优化

Flutter web 加载慢优化

Bright_TY的专栏 7836

静态与动态LACP链路聚合:原理、配置与排错实战指南

链路聚合技术是提升网络带宽与可靠性的核心方案,通过将多个物理端口逻辑捆绑,实现带宽叠加与链路冗余。其原理基于IEEE 802.3ad标准,通过负载均衡算法将数据流分布到不同物理链路,既避免了数据包乱序,又提升了整体吞吐量。该技术的核心价值在于消除单端口瓶颈、提供毫秒级故障切换,并能简化网络拓扑管理。在企业服务器接入、数据中心互联及虚拟化平台等场景中,链路聚合已成为构建高可用网络的基础。实践中,动态LACP模式通过协议报文协商,能主动检测链路故障并防止配置错误导致的网络环路,相比静态聚合更为可靠。本文将深入解

weixin_31412781的博客 267

surging 集成SuperSocket预发布版本2.0

周末在家试着扩展SuperSocket,因为之前都是只支持.net framework, 后面出现支持.NET CORE 的SuperSocket 2.0 ,然后集成进来和dotnetty 做下对比,dotnetty 有多强,我压测可以支持20w/s, 然后客户提供的服务器,通过外网压测网关,把上行速度50MB带宽的网络跑满了,引擎主机CPU只是在15%左右,完全没有跑满。/// <param name="message">消息内容。/// <param name="message">消息内容。

weixin_55010563的博客 792

通俗范畴论10 泛性质(MD版)

既然泛性质可以在同构意义下唯一确定一个泛构造,那么我们就可以用泛性质来定义泛构造。我们回顾一下已经掌握的泛性质和泛构造。泛性质其实我们并不陌生,始对象和终对象,就是具有泛性质的对象,一个具有“始”的泛性质,一个具有“终”的泛性质。比如始对象,如果一个范畴里面有始对象,它到所有对象都有且只有一个态射,这样的对象可能有两个么?嗯,还真可能,但是这两个始对象同构,所以在同构意义下,它们可以看成一个,因此在同构意义下,始对象是唯一的。同理,终对象也一样。同构的始对象。

RockTec的专栏 478

各网络通讯协议汇总(一)- TCP/IP

一、OSI(Open System Interconnection) 我们先认识OSI参考模型的七层中每层的含义、作用、可用协议和设备。 OSI的七层模型具体如下图 (一)、物理层(信号和介质) 含义:在物理信道(机械、电子、定时接口通信信道)上实现原始比特流的传输。 作用:定义了通讯接口及介质的标准,以及将上层封装的数据转换为比特流方式进行传输。 协议:IEEE 802.2、Ethernet ...

oyzy_Sean的篝火 1810

OCR技术解析:用Tesseract和PaddleOCR识别文本

OCR技术解析:用Tesseract和PaddleOCR识别文本 ,人工智能,计算机视觉,大模型,AI,光学字符识别(Optical Character Recognition,简称 OCR)是一项将图片、扫描件等文档中的文字信息转换为可编辑文本的技术。在数字化时代,OCR 技术广泛应用于文档处理、车牌识别、身份证识别、古籍数字化等领域,极大地提高了文字信息处理的效率。Tesseract 和 PaddleOCR 是两款极具代表性的 OCR 工具。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 3万+

安卓刷Windows太难?这款手机平板双系统刷机工具,小白也能轻松拿捏!(小白福音!手机平板专用,一键搞定安卓刷 Windows 双系统!)

安卓刷Windows太难?这款手机平板双系统刷机工具,小白也能轻松拿捏!(小白福音!手机平板专用,一键搞定安卓刷 Windows 双系统!)

XiaoqiangClub的博客 4669

网络通讯协议TCP/IP、IOS、IoT——一图胜千言

adeyi的专栏 462

NVIDIA平台Xavier/TX2板摄像头驱动开发与TP2850方案开发

本文介绍了在NVIDIA平台上开发Xavier/TX2板摄像头驱动的过程,并结合TP2850方案实现了多路模拟相机输入。我们提供了初始化摄像头和连接TP2850方案的示例代码,并介绍了相关的步骤和注意事项。需要注意的是,以上示例代码仅提供了基本的摄像头初始化和与TP2850通信的框架,你需要根据具体的需求进行进一步开发和配置。你可能需要参考摄像头和TP2850的数据手册以及相关的开发文档,以了解更多详细的配置和操作。此外,你还需要一个支持TP2850方案的硬件设备,并将其连接到Xavier/TX2板上。

PixelLancer的博客 592

科来软件网络通讯协议图2020版_Eclipse Kura物联网网关软件介绍(一)——概述...

本文是对Eclipse Kura物联网网关软件进行介绍的系列文章的第一篇。本文主要从总体上介绍Kura。1.物联网系统三大组件对于任何一个物联网系统,有三个重要的组件:设备:网关连接的末端物联网节点;网关:连接多个设备,并与物联网云平台双向通信;物联网云平台:连接分布式的大量网关和设备,并可基于其开发物联网应用程序。对于这三个组件,目前许多物联网公司都是自己投入资源,自己从头开发。但是实际上,这里...

weixin_39605840的博客 1106

《UDS协议从入门到精通》系列——图解0x38:请求文件传输

详细解释UDS协议中0x38-请求上传服务的各个参数!!

车载系统攻城狮 3263

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

matlab制作以太网数据接收上位机_西门子S7-1200PLC网络通信解析(以太网、串口通讯...)...

写在前面前面我们讲了PLC之间的通讯:S7-200/300/400/1200/1500全系列通信总结也解读了关于常用的通讯协议,接口,工业以太网等:最全整理工业通讯上的领域各种总线+协议+规范+接口—数据采集与控制技术解读PROFINET、Ethernet/IP等7种主流工业以太网同时还讲了网络中通讯的自动化金字塔:工业通讯网络层级全解读,解析工业网络的自动化金字塔今天单独聊一聊S7-1200的网...

weixin_39945789的博客 983

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

WebSocket客户端学习

1. WebSocket是一种网络通讯协议 参考文档:http://www.ruanyifeng.com/blog/2017/05/websocket.html https://github.com/mrniko/netty-socketio http://www.runoob.com/html/html5-websocket.html 转载于:https://www.cnblogs....

weixin_34411563的博客 89

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

9、为什么我的电脑在安装网卡后启动慢了很多,有什么解决办法?

9、为什么我的电脑在安装网卡后启动慢了很多,有什么解决办法? 可能原因有: 1、TCP/IP设置中设置了"自动获取IP地址",这样每次启动计算机时,计算机都会主动搜索当前网络中的DHCP服务器,所以计算机启动的速度会大大降低。解决的方法是选择"指定IP地址"; 2、安装了太多的网络通讯协议或服务,以致计算机启动时寻址和加载程序的时间加长。可以在本地连接的属性中将不必要的协议和服务删除,对局域

探索者 4072

Charles抓包(未完待续)

Charles是在 Mac 下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。 Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。 Charles 主要的功能包括: 截取 Http 和 Https 网络封包。 支持重发网络请求,方便后端调试。...

annuanjiu2049的博客 129

python网络编程(Tcp/Ip网络通讯协议)

Python网络编程是指使用Python编程语言进行网络通信和网络应用开发的技术。Python提供了一系列的网络编程库和模块,可以方便地进行网络通信、创建网络服务器、编写网络应用等。Python的网络编程模块包括socket、select、asyncio等。其中,socket模块是Python最基础、最常用的网络编程模块,提供了对套接字编程的支持,可以创建TCP、UDP等类型的套接字,进行网络通信。select模块提供了对I/O多路复用的支持,可以同时监听多个套接字的I/O事件。

m0_65995252的博客 4726

所有网络通讯协议汇总及各自应用

常用网络协议及不常用网络协议的汇总及应用总结。

超哥量化的博客 1303

网络通讯协议分析

网络通讯协议 什么是网络通讯协议 网络通信协议是一种网络通用语言,为连接不同操作系统和不同硬件体系结构的互联网络引提供通信支持,是一种网络通用语言。 简单来说就是通过底层硬件实现各个设备间的通讯 目标: 1.研究数据格式 2.研究协议的阅读和制定、使用 疑问: 1.传输层协议只有tcp和udp吗 答案:推测,两个协议的特性决定,只有可靠,不可靠的区分。(错误,看维基百科) 2.为什么tcp要有三次...

winsun的专栏 1044

网络通讯协议图

网址 网络通讯协议图

嵌入式 1115

网络通讯协议

网络通讯的基本要素   物理介质   通讯协议     物理层规定物理介质的相关规范 比如网线接口是什么样的 有几根线       问题:无法理解单纯的二进制数据     数据链路层       工作在这一层的是以太网       规定一组电信号有多少位       每一组电信号包含什么样的内容       每一台电脑必须拥有一个全球唯一的mac地址(可以有多个)  ...

dd345898084的博客 113

稳定高效的流式网络通讯协议:snet

稳定高效的流式网络通讯协议:snet 项目介绍 在移动终端应用中,网络连接的稳定性一直是开发者面临的挑战。为了解决这一问题,snet 项目应运而生。snet 是一个在 TCP/IP 协议之上构建的流式网络通讯协议,旨在提升长连接型应用在移动终端上的连接稳定性。通过支持重连和加密功能,snet 能够在网络不稳定的情况下,尽量保证用户体验的连贯性,同时减少对已有代码的修改。 项目技术分析 snet 协...

gitblog_01142的博客 954

轻松定义自己的网络通讯协议

目标主机的网络端点</param>/// 将对象发送到默认主机。/// <param name="iep">发送者的网络端点</param>/// <param name="obj">要发送的对象</param>/// <param name="obj">要发送的对象</param>/// <param name="obj">接收到的对象</param>/// <param name="port">端口

biyusr的专栏 594
上一篇: 分享WPF的UI开源库
下一篇: 【网络通讯】【Socket实现(二)】
Aflashstar
博客等级 码龄12年 205粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值