Modbus数据类型转换

前请提要:

从PLC读取的数值,不管是读正负整数还是正负浮点数,读取过来后都会变成UInt16,也就是Ushort类型

一、ushort(UInt16)转成 Int32

源代码方法:

        //ushort类型转Int32类型的方法
        private int ushortToInt32(ushort[] date, int start)
        {
            //先进行判断,长度是否正确
            if (start < 0 || start + 1 >= dat.Length)
            {
                throw new Exception($"ushortToInt32索引超范围{start}");
            }
            
            //这里是将数组拆分成4段,然后重新编成一个数组
            byte[] tmp = new byte[4];
            byte[] byteH = BitConverter.GetBytes(dat[start + 1]);
            byte[] byteL = BitConverter.GetBytes(dat[start + 0]);
            tmp[0] = byteL[0];
            tmp[1] = byteL[1];
            tmp[2] = byteH[0];
            tmp[3] = byteH[1];
            
            //这是里byte转成Int32
            return BitConverter.ToInt32(tmp, 0);

        }

前请提要:Int32是32位,ushort是16位,byte是8位

(1)使用原因

向PLC的地址读取数据,PLC向地址写入32位整数,数值为100,但Modbus传输走的是16位,因此无法直接把数值展示到页面上,所以需要转成32为整数

(2)为何是 ushort 转 Int32

用ReadHoldingRegisters方法接收的值为ushort类型

(3)转换方法的思路

先将ushort类型转成byte类型,再将byte类型转成Int32类型

(4)输入参数

前者是所要转换的ushort类型数组,后者是ushort类型数组从第几个数组开始转化(需要注意的是,一次只能转化一个;无法说调用一次方法,将ushort数组转成好几个Int32类型值

(5)检查所要转换的数组长度

何为所要转换的数组长度,比如ushort数组里只有两个,因此我们只能转 ushort[0] 和 ushort[1],但是int start 写成 1 ,那就是转化 ushort[1] 和 ushort[2] ,而 ushort[2] 根本不存在,因此抛出异常;同理当 ushort 的数组只有一位,根本不满足转化条件,因此也会抛出异常

(6)ushort 数组拆分成 byte 成啥样

Int32 100
ushort ushort[0] = 100 ushort[1] = 0
byte

byte[0] = 100

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

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

相关文章

【算法题】一种字符串压缩表示的解压(js)

输入&#xff1a;2dff 输出 !error 两个d不需要压缩&#xff0c;故输入不合法 输入:4eA 输出:!error 全部由小写英文字母组成&#xff0c;压缩后不会出现&#xff0c;故输出不合法 function solution(str) {const error "!error";// 只能包含小写字母和数字 [^a-z0…

无需公网IP实现公网远程访问本地WebDAV服务

windows搭建WebDAV服务&#xff0c;并内网穿透公网访问【无公网IP】 文章目录 windows搭建WebDAV服务&#xff0c;并内网穿透公网访问【无公网IP】1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访…

踩坑记录:SpringBoot集成Dubbo和Nacos版本问题

一、概述 最近在整理依赖&#xff0c;原本用的springcloud提供的nacos&#xff0c;看到老早都不更新了&#xff0c;而且有些包冲突&#xff0c;就换了ali的&#xff0c;用的spring-boot版本是2.3.9.RELEASE&#xff0c;对应spring-cloud版本是Hoxton.SR12&#xff0c;dubbo用的…

[足式机器人]Part2 Dr. CAN学习笔记-数学基础Ch0-5Laplace Transform of Convolution卷积的拉普拉斯变换

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-数学基础Ch0-5Laplace Transform of Convolution卷积的拉普拉斯变换 Laplace Transform : X ( s ) L [ x ( t ) ] ∫ 0 ∞ x ( t ) e − s t d t X\left( s \right) \mathcal{L} \left[ x\lef…

现货黄金会面临哪些风险?

进行现货黄金投资&#xff0c;我们除了要了解怎么找到交易机会以外&#xff0c;也要知道我们交易会面临哪些风险&#xff0c;了解风险就是做到知己知彼&#xff0c;了解风险才能控制风险。控制住风险&#xff0c;才能为我们稳定盈利打好基础&#xff0c;那么下面我们就来看看在…

Linux入门笔记

1 Linux概述 Linux 是一套免费使用和自由传播的类 Unix 操作系统&#xff0c;是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心…

5.数据通信模型

主要内容 1.数据通信模型 2.C/S模型 3.B/S模型 4.P2P模型 数据通信模型 概念&#xff1a; 在早期的计算机网络中&#xff0c;为了有效的利用计算机&#xff0c;一般将数据通信模型分为 分散式&#xff08;Decentralized&#xff09; 集中式&#xff08;Centralized&am…

8个Python高效数据分析的技巧!

一行代码定义List 定义某种列表时&#xff0c;写For 循环过于麻烦&#xff0c;幸运的是&#xff0c;Python有一种内置的方法可以在一行代码中解决这个问题。下面是使用For循环创建列表和用一行代码创建列表的对比。 x [1,2,3,4] out [] for item in x:out.append(item**2) …

好用的音乐制作工具 Studio One 6中文 for mac

Studio One 6是一款专业的音乐制作软件&#xff0c;提供了全面而强大的功能&#xff0c;帮助音乐制作人、录音工程师和创作者实现他们的创意。 它的主要特点包括&#xff1a;直观的用户界面&#xff0c;使得操作变得简单易懂&#xff1b;支持多轨录音&#xff0c;允许用户进行…

PieCloudDB Database 自研全新向量化执行器,带来性能的数量级提升

数据分析和应用的重要性日益增长&#xff0c;对于数据平台和数据计算系统来说&#xff0c;极致的性能是关键需求之一。为实现更高效的数据并行计算&#xff0c;一款优秀的执行器需要能够充分利用硬件资源&#xff0c;如 CPU 的并行计算能力和 SIMD 指令集。此外&#xff0c;优化…

【电商API接口接入】国内最受欢迎的7大API供应平台对比和介绍

免费实用的API接口 第一部分 1、电商数据API接口&#xff08;国内外电商API接口接入&#xff09; 2、百度API Store(API集市_APIStore) 3、webxml&#xff08;确实不错&#xff09;WebXml | WEB服务 第二部分 1、地图接口 阿里云根据经纬度获取地区名接口&#xff1a; http://g…

将文件夹中所有文件名取出

dir C:\Users\是啊\Desktop\实验五/b>C:\Users\是啊\Desktop\1111.xls C:\Users\是啊\Desktop\实验五&#xff08;这个是文件夹路径&#xff09; /b &#xff08;参数&#xff09; C:\Users\是啊\Desktop\1111.xls&#xff08;文件名输出的文件路径&#xff09;

电脑版便签软件怎么设置在桌面上显示?

对于不少上班族来说&#xff0c;如果想要在使用电脑办公的时候&#xff0c;随手记录一些常用的工作资料、工作注意事项等内容&#xff0c;直接在电脑上使用便签软件记录是比较方便的。电脑桌面便签工具不仅方便我们随时记录各类工作事项&#xff0c;而且支持我们快速便捷使用这…

【动态规划】LeetCode2111:使数组 K 递增的最少操作次数

作者推荐 [二分查找]LeetCode2040:两个有序数组的第 K 小乘积 本文涉及的基础知识点 二分查找算法合集 分组 动态规划 题目 给你一个下标从 0 开始包含 n 个正整数的数组 arr &#xff0c;和一个正整数 k 。 如果对于每个满足 k < i < n-1 的下标 i &#xff0c;都有…

ReactJS和VueJS的简介以及它们之间的区别

本文主要介绍ReactJS和VueJS的简介以及它们之间的区别。 目录 ReactJS简介ReactJS的优缺点ReactJS的应用场景VueJS简介VueJS的优缺点VueJS的应用场景ReactJS和VueJS的区别 ReactJS简介 ReactJS是一个由Facebook开发的基于JavaScript的前端框架。它是一个用于构建用户界面的库&…

windows建立软链 报 无法将“mklink”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

当我执行网上提供的mklink 的时候&#xff0c;出现 mklink : 无法将“mklink”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。怎么回事&#xff0c;原来&#xff0c;要在执行的签名加 cmd /c 当我执行建立软链接时&#xff0c;提示 没有足够的权限&#xff0c;要用管理…

pytest使用allure测试报告

最近通过群友了解到了allure这个报告&#xff0c;开始还不以为然&#xff0c;但还是逃不过真香定律。 经过试用之后&#xff0c;发现这个报告真的很好&#xff0c;很适合自动化测试结果的展示。下面说说我的探索历程吧。 选用的项目为Selenium自动化测试Pytest框架实战&#…

物料做出库的时候提交,提示 【即时成本为0】

【财务会计】——【出库核算】——【材料出库核算】

HarmonyOS学习--TypeScript语言学习(二)

本章目录如下&#xff1a; 一、基础类型 二、运算符 三、变量声明 四、类型断言 五、类型推断 TypeScript支持一些基础的数据类型&#xff0c;如布尔型、数组、字符串等&#xff0c;下文举例几个较为常用的数据类型&#xff0c;我们来了解下他们的基本使用。 关于let 我们…

MYSQL数据库中运行SQL文件报错

报错显示 当使用mysql数据库运行SQL文件报错时 [Err] 1273 - Unknown collation: utf8mb4_0900_ai_ci 报错原因 版本高低问题&#xff0c;一个是5.7版本&#xff0c;一个是8.0版本生成转储文件的数据库版本为8.0,要导入sql文件的数据库版本为5.7,因为是高版本导入到低版本&a…