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

【网络通讯】【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万+

【C++】C++异常语法、使用、规范、异常安全及异常的优缺点

实际中我们可以可以去继承exception类实现自己的异常类。但是实际中很多公司像上面一样自己定义一套异常继承体系。因为C++标准库设计的不够好用。如果有一个块抛出一个异常,捕获异常的方法会使用 try 和 catch 关键字。try 块中放置可能抛出异常的代码,try 块中的代码被称为保护代码。C++ 提供了一系列标准的异常,定义在 中,我们可以在程序中使用这些标准的异常。异常是一种处理错误的方式,

weixin_51692487的博客 1524

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

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

qq_36318234的博客 3万+

基于角谱传播的MATLAB仿真:从相位恢复看自由空间光传播

本文详细介绍了基于角谱传播理论的MATLAB仿真方法,用于模拟自由空间光传播过程。通过傅里叶光学原理,将光场分解为频谱并应用传播相位滤波器,实现了从纯相位物体到可观测衍射图样的仿真。文章结合具体代码,演示了如何利用角谱法进行相位恢复,为计算成像和生物医学检测等领域的研究提供了实用的仿真工具和思路。

weixin_29055699的博客 280

汽水音乐自动化薅羊毛教程:从零搭建稳定赚钱脚本

📖 前言:为什么要学习自动化脚本?在数字时代,时间就是金钱。汽水音乐等App通过观看广告奖励用户金币的模式,本质上是将我们的时间转化为收益。本教程将教你如何用Python自动化这个过程,让程序为你"打工",实现被动收入。通过本教程,你将学到:移动端自动化测试的核心技术Python在自动化领域的实际应用如何将重复性任务转化为自动化流程创造属于自己的"数字员工"第一章:环境准备与基础配置1.1 硬件要求Android手机一部(建议使用备用机)USB数据线。

weixin_44947827的博客 5777

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

SAP面试全过程(已拿offer)

周五打电话给我说过了SAP第一轮面试,第二轮要在下周四北京,这几天终于体会到了什么叫做重压下的感觉,越复习越虚,看别人的面经都感觉卧槽这问题也巨难了吧...连去北京可以见妹子这种事情都感觉一点心情都没有。面前准备固然是要有的,但关键是平时就要有料,多想想自己做的项目。当作一个给自己的提醒吧!

cloudray8580的专栏 4万+

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

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

oyzy_Sean的篝火 1810

C++游戏开发实战:从零构建局域网联机对战系统(附完整代码解析)

本文详细介绍了如何使用C++开发局域网联机对战游戏系统,涵盖从环境搭建到实战代码解析的全过程。重点讲解了Winsock库的应用、Socket通信原理、服务端与客户端开发技巧,以及性能优化和安全防护方案,帮助开发者快速掌握C++游戏开发的核心技术。

weixin_42524945的博客 444

避坑指南:Xilinx SelectIO IP核官方例程里那些容易忽略的细节(复位、时钟与数据回环)

本文深入解析Xilinx SelectIO IP核设计中复位策略、时钟域交互和数据回环验证三大关键领域的实战避坑技巧。针对官方例程中易被忽视的细节,如复位同步链深度、时钟相位约束和数据对齐机制,提供经过项目验证的优化方案,帮助工程师节省80%以上的调试时间。特别适用于FPGA开发中高速接口设计场景。

weixin_42561476的博客 447

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

adeyi的专栏 462

最新Python爬虫实战(入门爬虫篇)——案例1:某瓣网站Top250图片数据采集(附上完整爬虫代码)

本次案例通过Python爬虫技术实现了某瓣Top250电影封面的批量下载。代码采用模块化设计,函数实现cookies的自动解析,简化了配置流程,涵盖请求、解析、存储的完整流程。学习重点包括:抓包工具定位数据源、正则表达式匹配图片链接、模拟请求头绕过反爬机制、以及自动化文件管理。需要注意控制请求频率并遵守网站使用规范,适用于入门爬虫实践。

努力让自己发光,对的人才能迎着光而来 16万+

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

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

weixin_39605840的博客 1106

基于STM32设计的智能防盗单车锁_349

本设计基于STM32F103RCT6单片机,研制了一种适用于户外环境的智能防盗单车锁系统。系统集成了GPS定位模块、ADXL345加速度传感器、4G通信模块(Air780E)、OLED显示屏、继电器模拟锁控模块等硬件,通过姿态感知实现车辆异常移动检测,在锁车状态下自动触发蜂鸣器报警并通过短信与APP通知用户。

866

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

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

weixin_39945789的博客 983

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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、付费专栏及课程。

余额充值