当前位置: 首页 > news >正文

初出茅庐的小李博客之Modbus称重传感器调试记录

Modbus称重传感器调试记录

最近需要调试一个称重模块其接口是RS485接口,采用的是Modbus协议,今天就来记录一下调试的过程。

模块介绍

LJW-M01 数字模块是将电阻应变式称重传感器输出的模拟信号转换成数字信号的一种 AD 装换模块。内部集成了标定、滤波、置零、去皮等称重仪表的功能,可以直接连接电脑、PLC、组态屏等设备。它有两种数字通讯接口:RS232(LJW-M01A)和 RS485(LJWM01B)。LJW-M01 具有“高精度”、“小化”、“集成化”、“规模化”、“智化”、“低成本”、“高可靠性”、“强适应性”等特点,适用于工业控制、快递物流、仓储管理、新零售、垃圾回收等应用领域。以上内容来自传感器厂家的说明。

技术参数
在这里插入图片描述

我手上的型号是LJW-M01B也就是RS485接口,可以看到该模块在485通信模式下理论传输距离可以达到1000m,没有实际测试,这个距离还是很远的。

配套上位机

在这里插入图片描述

模块提供了丰富的标定调试功能、各种通讯模式和参数供用户使用。这些功能都可以通过 MODBUS 通讯来实现,但是编程较为复杂。为了方便使用,我们提供了《LJW-M01 用户配置工具》软件,来标定和配置这些参数。这个上位机是厂家提供的集成了常见的控制指令以及参数配置功能,对开发调试人员来说非常有帮助。当然要想利用好这个软件一定要先了解Modbus协议,也要对相应的寄存器比较熟悉。

软件界面

在这里插入图片描述

串口配置区

串口配置区用于配置电脑和数字模块使用的通讯参数。本软件使用的是 MODBUS-RTU 协议,需要配置的通讯参数有:“端口号”、“波特率”、“校验”和“通讯地址”。其中“端口号”需要根据实际连接电脑哪个串口来配置,其他参数则需要根据模块内部的参数来配置,要和模块设置的一致。上面截图可以看到我的USB转485工具占用的是COM5接口,波特率采用的就是默认的波特率38400bps,校验采用偶校验,通信地址这里是1可以连接通信,这应该是没有被修改过的地址,当然也可以在上位机进行修改设置,因为Modbus协议可以一个主机对多个从机进行通信,这个地址也就是从机的地址,由于我也仅仅连接1个设备用来获取它的重量,所以这里就采用默认值不对其进行任何修改。

如果不知道模块的通讯参数,则需要使用“自适应”功能。操作方是:勾选“自适应”选项后打开串口,然后再给模块上电。模块就会使用默认通讯参数(38400 波特率,偶校验,通讯地址为 1)和软件通讯。此时就可以在系统参数页面查看和配置模块的通讯参数。这个自适应功能还是很不错的,因为有很多时候我们对一个485传感器进行了设置我们并没有记住它的参数情况下我们就无法在跟其通信了。

标定参数

在这里插入图片描述

传感器在生产时,由传感器生产厂设置了默认的标定参数,用户可以修改这些参数来满足应用的需求。如果需要改回默认参数,点击单个参数中间的“《”即可恢复这个参数的默认值,点击“默认”按钮可以恢复全部参数。恢复参数后,需点击“保存参数”按钮保存。这里我仅仅是查看一下标定参数在没有搞清楚其参数是什么含义之前选择默认参数一般是比较稳妥的方式。这里也可以大概看出一点信息,比如分度值是1,小数点位数是2位,满量程是300g,重力加速度的值是9.8采用的滤波强度是2。

满量程含义以及作用

决定了毛重的最大值,当重量大于满量程 + 9×分度值时状态字中的超载标志就置为 1,此时用户系统应做出相应的报警提示,避免压坏秤体。

重力加速度含义以及作用

重力加速度为用户当地的重力加速度,此数值在使用重力加速度修正功能时才被存储,平时不能修改,也不参与重量数值的计算。

滤波模式含义以及作用

现在固定为滑动滤波。

将来会陆续增加动物秤、动态模式等别的滤波模式

滤波强度

滤波强度越大重量数值越稳定,但是加载反应越慢

开机置零范围含义

单位为 FULL%,例如满量程为 500kg,开机置零范围为 20,那么开机置零的范围值就是±100kg,模块重新上电后,如果毛重小于±100kg,模块就把该重量作为零点,输出毛重为 0。

手动置零范围含义

单位为 FULL%,它影响着置零命令能否成功。如果当前毛重(相对于开机零点)小于手动置零范围值时,置零命令有效,模块把当前毛重作为零点,输出毛重为 0

这些参数脑子有个印象即可,需要用到的时候再来阅读即可。

上位机读取测试

打开上位机进行连接后,先手动点击去皮,其实就是把当前测量的结果清零,这个去皮指令能否生效取决于手动置零范围,由上面的描述可以知道手动清零的范围是4单位是g也就是说4给范围以内都可以手动去皮操作,而且手动去皮操作是可以执行成功的。

在这里插入图片描述

这是用手按下的测试结果,可能这个结果在没有进行标定前结果是有误差的,我们重点放在这个值是如何拿到的。

这里就需要先了解一下它的Modbus手册了。

在这里插入图片描述

通过阅读手册我们可以得到一些信息,就是重量信息应该在保持寄存器中获取。继续查阅手册来看读取寄存器用什么功能码。

功能码表

在这里插入图片描述

涉及到读的操作有读离散量,这里我们首先关心的是读取重量,那我们重点关注的功能码应该是0x04 或者是0x03,再或者是0x23,至于究竟是哪个我们现在还不得而知仍需要查阅手册。
在这里插入图片描述

继续查阅手册可以看到手册中对保持寄存器的描述通过读取输入寄存器可以获得模块的重量数据和状态。

如何理解毛重皮重和净重

毛重,皮重和净重为模块当前的对应“重量数值”。“重量数值”为对应重量不包括小数点的数值(小数点位数需要从状态标志 1 获取)。例如毛重为 21kg,小数点为 2 位,那么毛重的重量数据值就是 2100;净重为 123kg,小数

点为 3 位,那么净重的重量数值就是 123000。

其实就是都不同地址得到不同的重量数据,数据是带0的,至于带几个零要取决于传感器的设定,我们最开始的标定参数设置里面有个2位小数点,就意味着你都回来的数据按照单位来说后面有两位小数,比如读回来的是12345其实对应的克数应该是123.45克。

“重量数值”为 32bit 补码占两个字,高字在前。这句话的含金量非常高,这里说明读回来的数据是按照补码的形式存储的,补码也是计算机中使用的存储方式,这里我就不在解释了,如果大家想了解补码的细节大家可以查看我之前的文章我应该详细的讲述过补码的存储。

其他命令比较多这里不一一列举 重点看一下上位机如何获取重量信息这里我使用串口监视工具来查看一下上位机发送了什么命令。

第一步先打开置零命令

在这里插入图片描述

此时上位机显示的值就是0.00克,小数值是2位。
在这里插入图片描述

抓包分析来看,ID是01,功能码是04,读18个寄存器,每个寄存器是2个字节,也就是读取了36个字节数据

寄存器0:0000

寄存器1:0000

寄存器2:0000

寄存器3:0000

寄存器4:0000

寄存器5:0000

寄存器6:1203 十六进制0x1203 状态寄存器1

在这里插入图片描述

在这里插入图片描述

寄存器7:9000 十六进制0x9000 状态寄存器2

在这里插入图片描述

寄存器8:0000

寄存器9:0000

寄存器10:0000

寄存器11:0000

寄存器12:0000

寄存器13:0000

寄存器14:0000

寄存器15:0000

寄存器16:0000

寄存器17:0000

置零指令抓包分析

在这里插入图片描述
在这里插入图片描述

ID:01 功能码05 地址0x0009 数据是 0xFF00 校验和是0x5C 38

在这里插入图片描述

获取重量

在这里插入图片描述

如图所示上位机读取到稳定的重量是2.24g,

在这里插入图片描述

寄存器0-1:0x000000E0 对应十进制是 224 也就是224 对应的重量值是2.24g 毛重

寄存器2-3:0x00000000 对应十进制是0 也就是皮重是0

寄存器4-5:0x000000E0 对应十进制是224 也就是对应净重是2.24克。

在这里插入图片描述
在这里插入图片描述

同理锁定毛重,跟锁定净重都是224,也就是2.24g
在这里插入图片描述

毛重内码,皮重内码、以及净重内码同理。

抓包分析完毕实际测试:

这里我采用普通的串口调试助手来对其进行设置,01 是ID 04都输入寄存器 00 00 是开始地址 00 12意味着读取18个字节0x12是十六机制数据 结尾加上Modbus的CRC16 校验和 70 07 这里跟抓包工具也一致证明我们组包没有问题。
在这里插入图片描述

01 04 00 00 00 12 70 07

在这里插入图片描述

返回的数据是 01 是ID 04是功能码 数据长度是24也就是 十进制的36个字节 一个寄存器是2个字节 读取是18个寄存器返回的是36个字节,最后是CRC校验,这里由于我没有进行置零操作看到重量不一致。

01 04 24 00 00 00 6D 00 00 00 00 00 00 00 6D 12 02 80 00 00 00 00 6D 00 00 00 6D 00 00 08 85 00 00 00 00 00 00 08 85 B3 31

不太理解04功能码的可以参考下面这个表格

在这里插入图片描述

发送一个05指令先进行清零操作

05指令的格式如下

在这里插入图片描述

在这里插入图片描述

写单个线圈指令

01 05 00 09 FF 00 5C 38
在这里插入图片描述

之后再来读重量

在这里插入图片描述

00 98 十六进制对应十进制152 对应克重是1.52克 00 97 应该是误差1.51克

在这里插入图片描述

再用实际上位机来测试看结果

在这里插入图片描述

1.35克 可以认为测试结果是正确

调试完毕。

调试注意事项:

1、波特率选对

2、默认偶校验不选不能通信 尤其是打开关闭过串口助手后

3、去皮跟毛重净重的操作要注意先后顺序否则相同物体测试出来结果不同

00 97 应该是误差1.51克

[外链图片转存中…(img-wRuErIJB-1741532994369)]

再用实际上位机来测试看结果

[外链图片转存中…(img-QZzxwbZP-1741532994369)]

1.35克 可以认为测试结果是正确

调试完毕。

调试注意事项:

1、波特率选对

2、默认偶校验不选不能通信 尤其是打开关闭过串口助手后

3、去皮跟毛重净重的操作要注意先后顺序否则相同物体测试出来结果不同

接下里就是要用STM32来编写主机代码给其进行通信 把重量实时显示在屏幕上,感兴趣的小伙伴可以关注我哦。本次文章写的比较混乱可能对于不了解Modbus的小伙伴不太友好,大家如果想要学习Modbus相关协议可以点在看关注后后台找我要资料哦

相关文章:

  • JU TPS研究笔记
  • MySQL基本建表操作
  • 工业单板电脑在电商物流中心的应用案例
  • TOEFL WRITING NOTE
  • c++_二叉树的介绍
  • idea技巧
  • C++中,内存管理和内存泄漏总结
  • AIP-162 资源修订
  • 如何解决python安装scipy时报错
  • Unity 通用UI界面逻辑总结
  • 导轨式ARM工业控制器:组态软件平台的“神经中枢”
  • Windows本地部署OpenManus并接入Mistral模型的实践记录
  • Etcd的安装与使用
  • vulkanscenegraph显示倾斜模型(5.2)-交换链
  • ViT-Small与Vit-Base区别
  • CI/CD—GitLab部署
  • 【redis】数据类型之geo
  • 【GPT入门】第12课 FunctionCall 生成数据库sql代码
  • 虚拟机的xml格式
  • 市场动态变化中的策略运用
  • 招商网站大全五金电器/广州seo工程师
  • java 做网站/独立站怎么建站
  • 网站的建设服务/seozou是什么意思
  • 电子商务网站开发形式有/重庆seo排名
  • 杭州制作公司网站/山东seo网络推广
  • 哪个网站有天天做股市直播的/搜索引擎和浏览器