java整合DL645-2007与Dl645-1997

注意事项:

  • 前导字节-一般在传输帧信息前,都要有0~4个FE不等,所以这里要注意,对于主站来说,直接发送4个FE作为前导字节即可。而从站回复,就不一定了,根据厂家不同而不同,有些没有FE的,也有4个FE的,所以对于接受程序,一定要慎重
  • 传输次序-所有的数据项都是先传低字节,再传高字节,这里的数据项,主要涉及到地址域和数据域,因为其他都是1个字节
  • 差错控制-通信偶校验
  • 数据与传输运算方式:主站加0x33,从站减0x33(为嘛这么定义,可能是考虑BCD码吧)

DL645-2007的地址域发送命令是AAAAAAAAAAAA,DL645-1997的地址域发送命令是999999999999

在这里插入图片描述

1:DL645计算校验和的方法(字符串)

package com.example.modbusrtu.config;public class DL645ChecksumCalculator {public static void main(String[] args) {// 示例数据//String data1 = "68 99 99 99 99 99 99 68 11 04 33 33 34 33";//48String data2 = "68 AA AA AA AA AA AA 68 11 04 33 33 34 33";//AE// 计算并输出校验码//System.out.println("Checksum for data1: " + calculateChecksum(data1));System.out.println("Checksum for data2: " + calculateChecksum(data2));}// 计算校验码的方法是不要报文的最后两位,即使结束和校验和去掉public static String calculateChecksum(String hexData) {// 去掉起始和结束的 '68' 和 '16'String[] hexArray = hexData.split(" ");int[] data = new int[hexArray.length];for (int i = 0; i < hexArray.length; i++) {data[i] = Integer.parseInt(hexArray[i], 16);}// 计算模 256 校验码int sum = 0;for (int b : data) {sum += b;}// 校验码int checksum = sum % 256;return String.format("%02X", checksum);}
}

1:DL645计算校验和的方法(byte数组)

package com.example.modbusrtu.config;public class Dl645Checksum {public static void main(String[] args) {byte[] request = new byte[] {(byte) 0x68, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA, (byte) 0x68, (byte) 0x11, (byte) 0x04, (byte) 0x33, (byte) 0x33,(byte) 0x34, (byte) 0x33};// 计算校验和int checksum = calculateChecksum(request);System.out.println( (byte)(checksum & 0xFF));}// 计算校验码的方法public static int calculateChecksum(byte[] data) {// 去掉起始和结束的 '68' 和 '16'int sum = 0;for (int i = 0; i < data.length; i++) {int count = Integer.parseInt(String.valueOf(data[i]& 0xFF));System.out.println(Integer.valueOf(data[i]& 0xFF));sum 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙HarmonyOS实战:IPC与RPC设备内进程通信

基本 IPC&#xff08;Inter-Process Communication&#xff09;与RPC&#xff08;Remote Procedure Call&#xff09;用于实现跨进程通信&#xff0c;不同的是前者使用Binder驱动&#xff0c;用于设备内的跨进程通信&#xff0c;后者使用软总线驱动&#xff0c;用于跨设备跨进…

嵌入式八股-C++面试35题(20240824)

1. 进程和线程的基本概念是什么&#xff1f; 进程&#xff1a;进程是操作系统分配资源的基本单位&#xff0c;是一个正在运行的程序实例。每个进程都有自己的内存空间、文件句柄和其他资源。线程&#xff1a;线程是进程的一个执行单元&#xff0c;是CPU调度和分派的基本单位。…

K8S部署MySQL5.7的主从服务

mysql-slave-0是master mysql-slave-1是备份 当mysql写的时候&#xff0c;找headless service中的 mysql-slave-0.mysql57-slave-headless&#xff1b;当mysql读的时候&#xff0c;找clusterip service中的mysql57-slave-read读&#xff0c;实现读写分离。 statefulset维护两个…

linux文本分析工具grep、sed和awk打印输出文本的单双奇偶行(grep也可以打印奇偶行)以及熟悉的ssh命令却有你不知道的一些用法

一、linux文本分析工具grep、sed和awk打印输出文本的单双奇偶行&#xff08;grep也可以打印奇偶行&#xff09; 其实sed和awk要打印输出奇偶行是很容易的事情&#xff0c;不过只能使用grep来输出奇偶行的话怎么实现呢&#xff1f;今天我就想了一下&#xff0c;如果真的只能使用…

【Leetcode 1897 】重新分配字符使所有字符串都相等 —— 数组模拟哈希表

给你一个字符串数组 words&#xff08;下标 从 0 开始 计数&#xff09;。 在一步操作中&#xff0c;需先选出两个 不同 下标 i 和 j&#xff0c;其中 words[i] 是一个非空字符串&#xff0c;接着将 words[i] 中的 任一 字符移动到 words[j] 中的 任一 位置上。 如果执行任意…

Latex 插入图片或表格导致页面空白过多

如图所示&#xff1a; Latex 插入图片或表格导致页面空白过多 我们可以采用这个方式来减少空白。 \documentclass{article} \usepackage{graphicx} % 包含图形支持 \usepackage{caption} % 提供更多对caption的控制% 设置标题上方和下方的间距 \setlength{\abovecaptionskip}{…

学习记录:js算法(十二):柱状图中最大的矩形

文章目录 柱状图中最大的矩形我的思路网上思路 总结 柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1:上图 输入&#xff1a;…

mac 安装Arthas

mac安装有两种方式 1.第一步安装Arthas 第一种&#xff1a; curl -L https://arthas.aliyun.com/install.sh | sh 第二种jar包形式 curl -O https://arthas.aliyun.com/arthas-boot.jar个人比较推荐第一种因为运行测试成功了 第一种安装后可能会出现一些命令不符合 需…

网安新声 | 从微软“狂躁许可”漏洞事件看安全新挑战与应对策略

网安加社区【网安新声】栏目&#xff0c;汇聚网络安全领域的权威专家与资深学者&#xff0c;紧跟当下热点安全事件、剖析前沿技术动态及政策导向&#xff0c;以专业视野和前瞻洞察&#xff0c;引领行业共同探讨并应对新挑战的策略与可行路径。 近期&#xff0c;微软披露了一个最…

CyberScraper-2077+simple-one-api:使用大模型爬虫

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 swift与Internvl下的多模态大模型分布式微调指南&#xff08;附代码和数据&#xff…

C语言典型例题50

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 例题4.2 使用do……while语句循环求1234……100&#xff1b; 代码&#xff1a; //《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //例题4.2 使用do……while语句循环求1234……100&#xff1b;#incl…

web后端(javaEE)开发——servlet

目录 一、web后端开发概述 二、web后端开发环境搭建 1.安装服务器软件 2.安装JDK 三、创建web后端项目 1.创建项目 2.修改设置 3.*在IDEA中集成Tomcat* 四、Servlet创建和应用 1.概述 2.Servlet程序创建与配置 3.分析Servlet程序结构 一、web后端开发概述 web开发&a…

Flutter ListView 实现不同样式 item

我们在实际开发中会创建显示不同类型内容的列表。以下是使用 Flutter 创建此类结构的方法&#xff1a; 1. 创建包含不同类型项目的数据源。 2. 将数据源转换为小部件列表。 创建包含不同类型项目的数据源 项目类型 要表示列表中不同类型的项目&#xff0c;请为每种类型的项目…

基于STM32开发的智能水箱液位控制系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化液位监测与控制水泵控制与状态显示Wi-Fi通信与远程监控应用场景 家庭用水系统的液位控制工业水箱的液位管理常见问题及解决方案 常见问题解决方案结论 1. 引言 智能水箱液位控制系…

Python----爬虫

开发一个比价系统来监控和分析电商平台的商品价格&#xff0c;可以帮助商家了解市场动态&#xff0c;避免不必要的价格战。这样的系统通常包括以下几个关键组件&#xff1a; 1. 数据抓取&#xff08;Web Scraping&#xff09;&#xff1a; - 使用爬虫技术从各大电商平台抓取…

最近最少使用数据结构(LRU)

抛开算法刷题的角度&#xff0c;LRU数据结构可根据访问时间远近自动排序&#xff0c;在有些场景下还是很有用的&#xff0c;如统计用户活跃度&#xff0c;API调用热力图分析&#xff0c;缓存块管理等。下面基于c模板提供一个通用的LRU类&#xff0c;以供参考。 #include <f…

初学Python如何快速入门(内附详细攻略),一文讲清

目前python可以说是一门非常火爆的编程语言&#xff0c;应用范围也非常的广泛&#xff0c;工资也挺高&#xff0c;未来发展也极好。 Python究竟应该怎么学呢&#xff0c;我自己最初也是从零基础开始学习Python的&#xff0c;给大家分享Python的学习思路和方法。一味的买书看书…

docker私有仓库创建与推送

仓库创建 1、拉取私有仓库镜像 docker pull registry 2.创建私有仓库容器 docker run -di --name registry -p 5000:5000 -v /data/docker_registry:/var/lib/registry registry-d&#xff1a;后台运行容器&#xff1b;–name&#xff1a;为创建的容器命名&#xff1b;-p&a…

Windows 上设置 MySQL 的主从复制

Windows 上设置 MySQL 的主从复制 一、前言1. 环境准备2. 主服务器配置3. 从服务器配置6. 测试复制7. 注意事项 一、前言 MySQL 主从复制可以在程序中通过以下方式应用&#xff1a; 读写分离&#xff1a;将写操作&#xff08;如插入、更新、删除&#xff09;发送到主服务器&am…

C语言基础(十二)

指针的用法&#xff1a; 测试代码1&#xff1a; #include "date.h" #include <stdio.h> // 函数声明&#xff0c;用于交换两个整数的值&#xff0c;通过指针传递 void swap(int *a, int *b); int main() { int time getTime();int nums[3] {3, 1, 4};…