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

相关文章

Nginx概念、架构、配置与虚拟主机实战操作指南

《Nginx概念、架构、配置与虚拟主机实战操作指南》Nginx是一个高性能的HTTP服务器、反向代理服务器、负载均衡器和IMAP/POP3/SMTP代理服务器,它支持高并发连接,资源占用低,功能全面且... 目录Nginx 深度解析:概念、架构、配置与虚拟主机实战一、Nginx 的概念二、Nginx 的特点

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Java Instrumentation从概念到基本用法详解

《JavaInstrumentation从概念到基本用法详解》JavaInstrumentation是java.lang.instrument包提供的API,允许开发者在类被JVM加载时对其进行修改... 目录一、什么是 Java Instrumentation主要用途二、核心概念1. Java Agent

Kotlin 协程之Channel的概念和基本使用详解

《Kotlin协程之Channel的概念和基本使用详解》文章介绍协程在复杂场景中使用Channel进行数据传递与控制,涵盖创建参数、缓冲策略、操作方式及异常处理,适用于持续数据流、多协程协作等,需注... 目录前言launch / async 适合的场景Channel 的概念和基本使用概念Channel 的

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

一文带你迅速搞懂路由器/交换机/光猫三者概念区别

《一文带你迅速搞懂路由器/交换机/光猫三者概念区别》讨论网络设备时,常提及路由器、交换机及光猫等词汇,日常生活、工作中,这些设备至关重要,居家上网、企业内部沟通乃至互联网冲浪皆无法脱离其影响力,本文将... 当谈论网络设备时,我们常常会听到路由器、交换机和光猫这几个名词。它们是构建现代网络基础设施的关键组成

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.