【嵌入式】Modbus实践

前言

  最近接了一个项目,需要使用Modbus协议,虽然之前有所耳闻,但一直没有实操过,但实践之后发现其实还是很简单的,我认为它本质上就是对串口传输进行“二次封装”

建议的入门顺序

  1. 大神带你秒懂Modbus通信协议——理解基本概念
  2. STM32+RS485+Modbus-RTU(主机模式+从机模式)-标准库/HAL库开发——实战演练

相关软件

  为了更加方便调试Modbus,这里推荐几个软件:

  • SSCOM:串口调试助手,但具有自动添加Modbus校验的功能
    【嵌入式】Modbus实践_第1张图片
  • Modbus Poll:模拟Modbus主机,链接为官网下载链接,SN为5A5742575C5D136F5843535610685C49434C1232131164706378
  • Modbus Slave:模拟Modbus从机,链接为官网下载链接,SN为54554154514756666A655A187D545E505C454F

使用实测:这两个软件似乎对于硬件过高的波特率反应不过来,所以建议与硬件通信时不要设置过高的波特率,比如115200.

CRC校验码计算函数

  这个是按照协议设定的方式来按过程实现的代码

void CRC16(unsigned char frame[], unsigned char length)
{
    unsigned int crc16 = 0xffff;
    unsigned char byteIndex, n;
    for (byteIndex = 0; byteIndex < length - 2; byteIndex++)
    {
        crc16 ^= frame[byteIndex];
        for (n = 0; n < 8; n++)
        {
            if (crc16 & 1)
            {
                crc16 >>= 1;
                crc16 ^= 0xA001;
            }
            else
                crc16 >>= 1;
        }
    }
    frame[length - 2] = crc16;  //记住,校验码低位在前,高位在后!
    frame[length - 1] = crc16 >> 8;
}

网上还有的是根据异或的规律列出所有的可能值,然后直接按下标索引,实际跑起来应该会快些,有兴趣的可以找找相关代码,此处不再列举。

你可能感兴趣的:(嵌入式专栏,单片机,stm32,嵌入式硬件,modbus,串口)