首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于嵌入式系统lpcxpresso的Modbus实现

用于嵌入式系统lpcxpresso的Modbus实现
EN

Stack Overflow用户
提问于 2015-01-22 07:42:24
回答 2查看 2.8K关注 0票数 2

我是新的modbus,我必须编程一个lpcxpresso基板作为一个主人,收集读数从一个电能表使用RS485 Modbus协议。

通过阅读modbus.org规范,我熟悉协议(关于PDU框架、功能代码、主从程序)。但是,在用C编写代码时,我在实现上遇到了困难。

所以我的问题是:

  1. 当我开始连接时,我是否必须打开连接,设置波特率等?
  2. 我正在考虑把这个帧作为byte[]发送。这是正确的吗?或者还有其他方法可以做到呢?
  3. 数据发送必须是十六进制,还是二进制或整数?
  4. CRC的生成和校验。

如果问题不是很具体或太基本,我会非常感谢你的帮助和帮助:)对不起

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-22 08:59:02

第一步:暂时忘掉电能表和modbus。最重要的是让硬件正常工作。RS485只是一个串行端口。阅读关于如何初始化您的硬件上的串口的手册,并发送单字节到您的PC和回来。然后将数百个字节发送到PC并返回。

Setp 2:让你的硬件定时器也工作。Modbus协议对定时有一些要求,所以您也需要它。

步骤3:获取modbus规范。它将解释协议格式和校验和。使用modbus库或编写自己的。在你继续使用电能表之前,确保你能让它和PC一起工作。

第四步:如果你有问题,问一些具体的问题。

票数 2
EN

Stack Overflow用户

发布于 2015-01-22 10:18:58

首先: ModBus RTu还是ASCII?

  1. 是的,当然。您需要指定规范描述的所有内容。
  2. 是的,它是一个未签名的char[]。结构由规格描述。
  3. 这个问题没有意义:您总是以“内存转储”的形式发送信息,但是使用RTU时,每个内存字节发送1字节,如果是ASCII,则每个内存字节发送2字节。例如:如果您必须发送一个字节0xAE: RTU=0xAE - ASCII= 0x410x45。在RTU情况下,如果您必须发送一个int (4字节),您将发送这些字节,因为它们存储在内存中,例如: 12345将被发送为0x00 0x00 0x30 0x39 (大endian),0x39 0x30 0x00 0x00 0x00(小endian)。

  1. CRC的计算在规范中作了说明。下面是我以前的CBuilder组件的代码

无符号短TLPsComPort::Calculate_CRC16 ( int Message_Length,char *Message )

{

代码语言:javascript
复制
    char Low_CRC;
    char Bit;
   // Constant of ModBus protocol
   unsigned short CONSTANT     = 0xA001;
   unsigned short CRC_REGISTER = 0xFFFF;

   for (int i=0; i<Message_Length; i++)
   {
      Low_CRC = CRC_REGISTER;
      Low_CRC = *(Message+i) ^ Low_CRC;
      CRC_REGISTER =  ((CRC_REGISTER & 0xFF00) | (Low_CRC & 0x00FF));
      for (int j=0; j<8;j++)
      {                                                                    
         Bit = CRC_REGISTER & 0x0001;
         CRC_REGISTER = (CRC_REGISTER >> 1) & 0x7FFF;
         if (Bit) CRC_REGISTER = CRC_REGISTER ^ CONSTANT;
      }
   }

   return CRC_REGISTER;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28083536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档