嵌入式学习-网络高级-Day01

嵌入式学习-网络高级-Day01

【1】Modbus协议

起源

分类

优势

应用场景

【2】Modbus TCP

特点

组成

报文头:7个字节

寄存器(存储数据)

功能码

总结

练习

【3】工具安装

Modbus Slave、Poll安装

网络调试助手

wireshark

练习

【1】Modbus协议

起源

Modbus由Modicon公司于1979年开发,是全球第一个真正用于工业现场的总线协议

在中国,Modbus 已经成为国家标准,并有专业的规范文档,感兴趣的可以去查阅相关的文件,详情如下:标准编号为:GB/T19582-2008文件名称:《基于 Modbus 协议的工业自动化网络规范》

Modbus通信协议具有多个变种,其中有支持串口,以太网多个版本,其中最著名的是Modbus RTU、Modbus ASCII和Modbus TCP三种

其中Modbus TCP是在施耐德收购Modicon后1997年发布的。

分类

1)Modbus RTU

运行在串口上的协议,采用二进制表现形式以及紧凑的数据结构,通信效率较高,应用比较广泛

2)Modbus ASCII

运行在串口上的协议,采用ASCII码进行传输,并且每个字节的开始和结束都有特殊字符作为标志,传输效率远远低于Modbus RTU,一般只有通讯量比较少时才会考虑它。

3)Modbus TCP

是一种基于以太网的协议,使用 TCP/IP 协议栈进行通信。它使用以太网帧作为数据传输的封装,通过 IP 地址和端口号来标识设备

优势

简单、免费、容易使用

应用场景

Modbus协议是现在国内工业领域应用最多的协议,不只PLC设备,各种终端设备,比如水控机、水表、电表、工业秤、各种采集设备

【2】Modbus TCP

特点

1.遵循主从问答的形式通信。(主从问答:采集信息,控制)

(主问------从答(247)0:广播 1-247:从机 248-255:保留)

2.Modbus TCP协议是应用层协议,基于传输层TCP通信

3.Modbus TCP的默认端口号为502

组成

Modbus TCP协议包含三部分:报文头、功能码、数据

报文头有7个字节,功能码有1个字节,Modbus TCP协议最大数据帧长度为260个字节,数据最多为252个字节。

报文头:7个字节

事务处理标识符:序列号没有限制,主机发什么,从机回什么

协议标识符:0x0000正好是两个字节

长度:接下来的字节长度

单元标识符:从机标识(从机id)

寄存器(存储数据)

Modbus TCP通过寄存器的方式存储数据。

一共有四种类型的寄存器,分别是:离散量输入、线圈、输入寄存器、保持寄存器。

1) 离散量和线圈其实就是位寄存器(每个寄存器数据占1字节),工业上主要用于控制IO设备。

线圈寄存器,类比为开关量,每一个bit都对应一个信号的开关状态。所以一个byte就可以同时控制8路的信号。比如控制外部8路io的高低。 线圈寄存器支持读也支持写,写在功能码里面又分为写单个线圈寄存器和写多个线圈寄存器。

对应上面的功能码也就是:0x01 0x05 0x0f

离散输入寄存器,离散输入寄存器就相当于线圈寄存器的只读模式,他也是每个bit表示一个开关量,而他的开关量只能读取输入的开关信号,是不能够写的。比如我读取外部按键的按下还是松开。

所以功能码也简单就一个读的 0x02

2) 输入和保持寄存器是字寄存器(每个寄存器数据占2个字节),工业上主要用于存储工业设备的值。

保持寄存器,这个寄存器的单位不再是bit而是两个byte,也就是可以存放具体的数据量的,并且是可读写的。比如我我设置时间年月日,不但可以写也可以读出来现在的时间。写也分为单个写和多个写

所以功能码有对应的三个:0x03 0x06 0x10

输入寄存器,这个和保持寄存器类似,但是也是只支持读而不能写。一个寄存器也是占据两个byte的空间。类比我我通过读取输入寄存器获取现在的AD采集值

对应的功能码也就一个 0x04

功能码

15(十进制)转换为十六进制:0x0f

16(十进制)转换为十六进制:0x10

寄存器PLC地址和寄存器的对应关系:

00001-09999:线圈

10001-19999:离散量输入

30001-39999:输入寄存器

40001-49999:保持寄存器

点亮一个灯:05

读温、湿度数据:03 04

具体协议分析:实例分享 | ModbusTCP报文详解

总结

读数据

主机---》从机:

报文头------功能码-------起始地址-------数量

从机---》主机:

报文头(字节长度可能发生变化)------功能码------字节计数-------数据

写数据

写单个

主机---》从机:

报文头------功能码-------地址-------数据/断通标志(2个字节)

(数据:保持寄存器 断通标志:线圈)

从机---》主机:

原文返回

对于读数据以及写单个来说,在主机询问报文里面报文头中字节长度固定,都是0x0006,(1个字节的单元标识符,1个字节功能码,2个字节的地址,2个字节的数据)

写多个

主机---》从机:

报文头------功能码-------起始地址-------数量--------字节计数--------数据

从机---》主机:

原文返回(报文头------功能码-------起始地址-------数量)

练习

练习一

主机---》从机:

12 34 00 00 00 06 01 03 00 63 00 02

12 34 :事务处理标识符

00 00 :协议标识符

00 06 :字节长度

01 :单元标识符03 :功能码(保持寄存器)

00 63 :起始地址 6*16+3=99,40100

00 02:寄存器数量

从机---》主机:

12 34 00 00 00 07 01 03 04 02 13 30 08

12 34 :事务处理标识符

00 00 :协议标识符

00 07 :字节长度

01 :单元标识符

03功能码(保持寄存器)

04 :字节计数

02 13 :40100寄存器的数据

30 08 :40101寄存器的数据

练习二

读传感器数据,读1个寄存器数据,写出主从数据收发协议。

主机--》从机:0000 0000 0006 01 03 0007 0001

从机--》主机:0000 0000 0005 01 03 02 1234

写出控制IO设备开关的协议数据,操作1个线圈,置1。

主机--》从机:0000 0000 0006 04 05 0012 ff00

从机--》主机:0000 0000 0006 04 05 0012 ff00

【3】工具安装

Modbus Slave、Poll安装

1)默认安装

2)破解:点击connection-》connect,输入序列号(序列号在SN.txt)

3)使用:

从机:Modbus Slave

先设置:

再连接:点击connection-》connect

主机:

先设置

再连接:(一定要先开启从机(salve端),再开启主机(poll端))

网络调试助手

wireshark

捕获器选择:

windows如果连接有线网络,选择本地连接/以太网

如果连接无线网络,选择WLAN

如果只是在本机上的通信,选择NPCAP Loopback apdater

或Adapter for loopback traffic capture

过滤条件:

过滤端口:tcp.port==502

过滤IP:ip.addr == 192.168.3.11(windows 的ip)

练习

在虚拟机写程序实现poll端功能,编写客户端实现和Slave通信,完成03功能码。

发送的内容是什么?怎么去读数据?

uint8_t data[12]={0x00,0x00,0x00,0x00.......};

#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
    char buf[128] = {0};
    uint8_t data[12]={0x12,0x34,0x00,0x00,0x00,0x06,0x01,0x03,0x00,0x00,0x00,0x02};
    // 1.创建套接字(socket)------------》有手机
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
    {
        perror("socket err");
        return -1;
    }
    printf("sockfd:%d\n", sockfd);
    // 2.指定(服务器)网络信息--------》有对方的号码
    struct sockaddr_in saddr;
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(atoi(argv[2]));
    saddr.sin_addr.s_addr = inet_addr(argv[1]);
    // 3.连接(connect)-------------------》拨打电话
    if (connect(sockfd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0)
    {
        perror("connect err");
        return -1;
    }
    printf("connect okk\n");
    // 4.接收发送消息(recv send)---》通话
    send(sockfd,data,sizeof(data),0);
    uint8_t d[32]={0};
    read(sockfd,d,sizeof(d));
    for(int i=0;i<d[8];i++)
    {
        //d[8]:表示字节计数:前8个位置分别为:7个字节报文头+1个字节功能码
        printf("%#x ",d[9+i]);
    }
    putchar(10);
    // 5.关闭套接字(close)------------》挂电话
    close(sockfd);
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java项目实战II基于Spring Boot的问卷调查系统的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导 一、前言 在当今信息爆炸的时代&#xff0c;问卷调查…

【c++语言程序设计】数组(对象数组)

数组是一种按照特定顺序排列的对象集合体&#xff0c;数组中的每个对象称为“元素”。数组的每个元素都用“数组名下标”的形式来表示&#xff0c;并且同一数组内的所有元素类型相同。数组可以由任何类型的数据构成&#xff08;除 void 外&#xff09;&#xff0c;且数组的概念…

5分钟跑起来:Java构建的AI人工智能智能问答系统_springboot_spring ai_LLM_人工智能_开源免费使用

Agenda&#xff1a; 1&#xff09;介绍一下AI支持下的智能问答系统有哪些主要模块 2&#xff09;一个可以跑起来的代码样例&#xff0c;说明怎么用Java构建这个AI智能问答系统 AI人工智能智能问答系统简介 智能问答系统是一种利用人工智能技术理解并回答用户提问的应用。该系…

如何基于pdf2image实现pdf批量转换为图片

最近为了将pdf报告解析成为文本和图片&#xff0c;需要将大量多页的pdf文件拆分下单独的一页一页的图像&#xff0c;以便后续进行OCR和图像处理&#xff0c;因此就需要实现将pdf2image&#xff0c;本文主要结合开源的pdf2image和poppler&#xff0c;实现了pdf转换为png格式图片…

Pytorch用BERT对CoLA、新闻组文本数据集自然语言处理NLP:主题分类建模微调可视化分析

原文链接&#xff1a;https://tecdat.cn/?p38181 原文出处&#xff1a;拓端数据部落公众号 自然语言处理&#xff08;NLP&#xff09;领域在近年来发展迅猛&#xff0c;尤其是预训练模型的出现带来了重大变革。其中&#xff0c;BERT 模型凭借其卓越性能备受瞩目。然而&#…

Kaggle:免费 GPU 使用指南,Colab 的理想替代方案

如果电脑显卡性能不足&#xff0c;又无法访问 Colab 的免费 GPU&#xff0c;那该怎么开始之后的学习呢&#xff1f; 答案是 Kaggle。 Kaggle 不仅提供免费的 GPU 计算资源&#xff0c;还可以直连而无需翻墙&#xff0c;同时不需要海外手机号验证。接下来&#xff0c;文章将详细…

Zookeeper 简介 | 特点 | 数据存储

1、简介 zk就是一个分布式文件系统&#xff0c;不过存储数据的量极小。 1. zookeeper是一个为分布式应用程序提供的一个分布式开源协调服务框架。是Google的Chubby的一个开源实现&#xff0c;是Hadoop和Hbase的重要组件。主要用于解决分布式集群中应用系统的一致性问题。 2. 提…

神经网络基础--什么是神经网络?? 常用激活函数是什么???

前言 本专栏更新神经网络的一些基础知识&#xff1b;案例代码基于pytorch&#xff1b;欢迎收藏 关注&#xff0c; 本人将会持续更新。 神经网络 1、什么是神经网络 人工神经网络&#xff08; Artificial Neural Network&#xff0c; 简写为ANN&#xff09;也简称为神经网络…

大模型也要“私人定制“?最新综述带你解锁AI的个性化服务 | 综述!扩散模型:AI艺术创作背后的“魔法引擎“

大模型领域的发展日新月异&#xff0c;每天都有许多有趣的论文值得深入品读。下面是本期觉得比较有意思的论文&#xff1a; 1、大模型也要"私人定制"&#xff1f;最新综述带你解锁AI的个性化服务 2、综述&#xff01;扩散模型&#xff1a;AI艺术创作背后的"魔法…

【MySQL 保姆级教学】深层理解索引及其特性(重点)--上(11)

MySQL与磁盘 1. MySQL与内存和磁盘的联系2. 认识磁盘2.1 MySQL与存储2.2 磁盘结构2.3 扇区2.4 定位扇区 3. MySQL与磁盘交互基本单位4. 建立共识5. 索引的理解5.1 建立一个表并查询5.2 为何 I/O 交互要是Page 6. B树 Vs B 树数6.1 不同存储引擎支持的索引结构类型6.2 B树 Vs B树…

1分钟教你利用ai工具免费制作养生视频,自动化批量操作,效率提升10倍!

养生这个是未来比较火爆的一个赛道,很多人越来越注重养生&#xff0c;你会发现抖音各种健身操博主&#xff0c;视频播放数据都很不错。很多人上一秒说的养生&#xff0c;下一秒又熬起了夜。年纪轻轻就喝起了枸杞续命。 有想做视频号带货的家人&#xff0c;其实可以考虑养生赛道…

思通数科纸质档案扫描与识别与档案馆应用场景介绍

在传统档案馆中&#xff0c;纸质文件的处理和管理是一个重要且繁琐的环节&#xff0c;特别是面对庞大的历史资料库。思通数科的AI能力平台提供了一种高效的数字化解决方案&#xff0c;利用OCR技术将纸质档案中的信息自动提取并转化为数字文本&#xff0c;具体过程包括以下几个步…

AutoCAD的Dwg版本代号、R版本参数值以及二次开发时VS、.NET版本关系

Dwg的AC版本代号 出处&#xff1a;https://www.autodesk.com.cn/support/technical/article/caas/sfdcarticles/sfdcarticles/CHS/drawing-version-codes-for-autocad.html 以下是AutoCAD图形的不同版本代号&#xff1a; MC0.0 - DWG Release 1.1 AC1.2 - DWG R1.2 AC1.4 - DW…

微服务day02

教学文档&#xff1a; 黑马教学文档 Docker Docker的安装 镜像和容器 命令解读 常见命令 案例 查看DockerHub&#xff0c;拉取Nginx镜像&#xff0c;创建并运行容器 搜索Nginx镜像&#xff1a;在 www.hub.docker.com 网站进行查询 拉取镜像&#xff1a; docker pull ngin…

脉冲全闭环EtherCAT运动控制器的固件升级

本文导读 随着产品的发展&#xff0c;正运动技术产品的固件也在不断更新与完善&#xff0c;新固件较老固件会解决一些客户的新需求与软件上的bug&#xff0c;增加了一些指令和功能&#xff0c;添加了更多的 EtherCAT从站与io模块。因此&#xff0c;升级固件是常用功能。推荐优…

用 Python 爬取淘宝商品价格信息时需要注意什么?

用 Python 爬取淘宝商品价格信息时&#xff0c;需要注意以下方面&#xff1a; 一、法律和道德规范&#xff1a; 遵守法律法规&#xff1a;网络爬虫的行为应在法律允许的范围内进行。未经淘宝平台授权&#xff0c;大规模地爬取其商品价格信息并用于商业盈利等不当用途是违法的…

三周精通FastAPI:35 最常用的模板引擎Jinja2

官方文档&#xff1a;https://fastapi.tiangolo.com/zh/advanced/templates/ 模板 FastAPI 支持多种模板引擎。 Flask 等工具使用的 Jinja2 是最常用的模板引擎。 在 Starlette 的支持下&#xff0c;FastAPI 应用可以直接使用工具轻易地配置 Jinja2。 安装依赖项 安装 ji…

AI 搜索来势汹汹,互联网将被颠覆还是进化?

最近&#xff0c;美国新闻集团起诉了知名 AI 搜索引擎 Perplexity AI。也许你会想&#xff0c;这不就是又一起“AI 惹官司”吗&#xff1f;其实&#xff0c;这次情况不太一样&#xff0c;甚至可能会改变我们未来上网的方式&#xff01; 争议的焦点是什么&#xff1f;是未来的 …

微信小程序官方评价组件wxacommentplugin下线后如何巧妙调用

在前一段时间微信小程序官方下线了评价组件后&#xff0c;无法再申请到了&#xff0c; 先来说说小程序什么情况下弹出评价&#xff1f; 1.官方邀请用户评价 用户通过搜索使用过小程序后&#xff0c;官方会邀请用户对小程序的使用体验进行评价。这个是系统随机的&#xff0c;…

Nat Med 病理AI系列|人工智能在肝病临床试验中的应用·顶刊精析·24-11-06

小罗碎碎念 今天分析Nature Medicine病理AI系列的第6篇文章——《AI-based automation of enrollment criteria and endpoint assessment in clinical trials in liver diseases》。 这篇文章介绍了一种基于人工智能的测量工具AIM-MASH&#xff0c;它能够提高非酒精性脂肪性肝…