首页 > 其他分享 >Modbus-Ascii注意事项

Modbus-Ascii注意事项

时间:2024-08-13 17:23:14浏览次数:13  
标签:iResult LRC 字符 Ssend data Modbus ASCII 注意事项 Ascii

1:消息以冒号 : 字符开头(ASCII表示为 0x3A),以回车换行对 \r\n (ASCII表示为 0x0D和 0x0A)结尾;所有其他字段传输的数据所允许的十六进制表示字符为的 0-9A-F,所以除了头和尾其他数据都是10进制的表现形式。

2:数据每个8位的字节被拆分为两个ASCII字符进行发送,所以收到数据后两个字符组成一个16机制字符串,这个字符串转10进制后就是实际收到的数值

3:同样因8位的字节被拆分为两个ASCII字符,在计算LRC时候数据去两个字符组成16进制数据,进行叠加,之后取反加1

4:举例子:消息“:010420C1000218<CRLF>”应该用ascii码的形式发送出去,收到数据后进行解码LRC计算为:

function LJK_LRC(data:string):string;
var
  iLoop:Integer;
  iLen:Integer;
  iResult:Byte;
begin
  iResult:=0;
  iLen:=Length(data) div 2;
  for iLoop:=0 to iLen - 1 do
  begin
   iResult:=iResult+StrToInt( '0X'+data[iLoop*2+1]+data[iLoop*2+2] );
  end;
  iResult := not(iResult)+1;
  Result:=':'+data+IntToHex(iResult,2)+Chr(13)+Chr(10);
end;

procedure TForm1.Button3Click(Sender: TObject);
var Ssend:string;
begin
   Ssend:='010420C10002';
   Ssend:=LJK_LRC(Ssend);
   self.Memo1.Lines.Add(Ssend);
   self.Comm1.WriteCommData( PChar(Ssend),Length(Ssend) );
end;

标签:iResult,LRC,字符,Ssend,data,Modbus,ASCII,注意事项,Ascii
From: https://blog.csdn.net/ljklxlj/article/details/141163803

相关文章

  • Modbus Tcp数据通讯实测
    ModbusTCP数据帧ModbusTCP的数据帧可分为两部分:MBAP+PDU。报文头MBAPMBAP为报文头,长度为7字节,组成如下:  帧结构PDUPDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。功能码Modbus的操作对象有四种:线圈、离散输入、保持寄存器、输入寄存器。 ......
  • Oracle数据库US7ASCII字符集中文乱码
    最近遇到一家客户的Oracle数据库,版本是11g,字符集是US7ASCII,当使用PL/SQLDeveloper工具插入和查询中文时都没问题,但是Java程序使用JDBC插入和查询中文时,中文乱码。比如'a中文b'通过JDBC查询出来的乱码是这样的'aᅱ￐ᅫᅣb'查询了一些资料,看到有网友通过这种方式解决了(只列出关键代码)。......
  • Vue自定义指令——函数式与对象式以及注意事项
    作者:CSDN-PleaSure乐事欢迎大家阅读我的博客希望大家喜欢使用环境:vscodeChrome浏览器目录1.什么是自定义指令1.1定义2.函数式自定义指令2.1定义2.2书写格式与效果3.对象式自定义指令3.1定义3.2书写格式与效果4.需要注意的坑4.1命名4.1.1问题4.1.2原因4.1.3......
  • Profibus DP主站转Modbus RTU协议网关(通讯配置详解)
    作者的许多朋友均对如何实现ProfibusDP网络和ModbusRTU网络的连接互通感到十分困扰,现在为大家统一作出解释。事实上,远创智控YC-DPM-RTU此款设备能够完美地解决这一问题。接下来,作者将会给各位全面且详尽地阐述该设备的功能、参数以及配置的方法。一,产品主要功能远创智控YC-......
  • Modbus_RTU
    本文主要记录串口通信,主要记录modbus的默认通信协议modbus_RTU,当然modbus还包含modbus_TCP(网口)和modbus_ASCII(串口)。一、基础知识串口和网口串口:串口是一种物理接口,通常用于连接计算机和外部设备,如打印机、鼠标等。它使用一根线缆进行数据传输,常见的接口有RS-232、RS-485......
  • 在Modbus协议中,传输一个float类型的数值
    假设你想传输的浮点数是123.456,其在内存中的二进制表示为CDABEF12(这是假设为大端序的情况,即最高有效字节先出现)。为了将其发送给Modbus设备,你需要将这32位拆分为两个16位的寄存器值CDAB和EF12。#include<stdint.h>voidfloat_to_modbus_regs(floatf,uint16_t*reg_high......
  • UnicodeEncodeError:“ascii”编解码器无法对位置 20 中的字符 u'\xa0' 进行编码:序号
    我在处理从不同网页(在不同站点上)获取的文本中的unicode字符时遇到问题。我正在使用BeautifulSoup。问题是错误并不总是可重现的;它有时适用于某些页面,有时,它会因抛出UnicodeEncodeError而呕吐。我已经尝试了几乎所有我能想到的方法,但我还没有找到任何可以一致工作......
  • ModbusRtuOverTcp读写操作
     .NET免费开源工业物联网网关-小码编匠-博客园(cnblogs.com)IoTClient:IoTClient是一个物联网设备通讯协议实现客户端,将包括主流PLC通信读取、ModBus协议、Bacnet协议等常用工业通讯协议。本组件终身开源免费,采用最宽松MIT协议,您也可以随意修改和商业使用(商业使用请做......
  • 集合通过Collectors.toMap转map的注意事项
    注意事项Collectors.toMapkey:不能有两个相同的key,可以为null(多个值对应一个key)value:可以有相同的value,但value不能为nullimportorg.junit.jupiter.api.Test;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.stream.Collectors......
  • python joblib.load 发生错误:协议 0 中的持久 ID 必须是 ASCII 字符串 在 GCP 云运行
    总体而言:我尝试使用Cloudbuild和Cloudrun构建BERT模型。我将模型(参数)和元数据(标签)保存在GCPCloudStorage中。但是,我遇到了通过joblib.load()加载metadata.bin文件的错误。我的metadata.bin文件包含UTF-8字符,但joblib.load需要ASCII字符。在......