Modbus协议学习第四篇之线圈的概念

2024-01-19 21:36

本文主要是介绍Modbus协议学习第四篇之线圈的概念,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

        在学习Modbus协议时,如果没有相关的基础知识,每次看到线圈相关的概念时,可能会特别困惑,线圈到底是个啥东西,这段文字表达的是啥意思?那么本篇博客,就带大家 一起浅浅的了解一下线圈相关的知识。

定义

        第一次在Modbus接触线圈的概念,应该是在介绍功能码的时候,因为其中有一个功能码是“读线圈状态”。我们可以把“线圈状态”理解为一种寄存器,类似于计算机中的寄存器概念,所以读线圈状态就是读某个寄存器,而这个特殊的寄存器其实就是一个bit,也就是要么是on/1,要么是off/0。

举例说明

        为了更好的理解线圈的概念,我们就以功能码01(读线圈状态)作为例子来展开说明一下线圈的概念。

        01功能码:用于读取设备或离散量输出的状态,即on/off。主设备发出的请求消息帧中指定了需要读取的线圈的起始地址和线圈数目。

        现在假设我们的主设备发送了一个请求报文,具体内容如下表,该报文中,从设备的地址为0x03,表明从3号从设备读取线圈状态,起始地址的值为0x0013,转为十进制是19,寄存器数的值为0x0025,转为十进制是37,即本请求需要读3号从设备的线圈状态,不是读这个设备所有的线圈状态,而是读线圈起始地址为20(Modbus为19,而根据规定线圈地址应该+1,所以是20)到结束地址为56,共计37个线圈状态的值,每个状态需要1bit数据来表示。

         那么,在正常的情况下,我们的主设备,应该收到来自设备3返回来的这样一条报文,如下图所示:它的从设备地址和功能码与请求报文保持一致(从设备地址用于告知主设备这条响应报文是来自哪个具体的从设备),数据域字节数表示返回的报文中,数据的空间大小。因为在请求报文中,我们需要知道这个设备的37个“线圈状态”的值,每个线圈状态占用一个bit位,而每个数据大小占用一个字节,所以我们的数据域需要5个字节(37 / 8 + 1)。而从设备的线圈地址20-37的状态为:OFF-ON-OFF-ON-OFF-OFF-ON-ON,对应二进制数为:01010011,所以数据1的值为:0x53。对于数据5,因为37 mod 8 = 5,不足8位,则用0填充,所以数据5为0x1B,对应的状态为:OFF-OFF-OFF-ON-ON-OFF-ON-ON。

总结

        把线圈状态理解成只能存一个bit信息的寄存器,就会很好理解线圈这个概念了。 

(免责声明:本博文仅供参考,因为博主也是初学者)

这篇关于Modbus协议学习第四篇之线圈的概念的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/623761

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台