This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430i2040:与 EVM430-i2040S 进行 EMDC I2C 通信

Guru**** 1996275 points
Other Parts Discussed in Thread: MSP430I2040, EVM430-I2040S, MSP430I2041
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/844030/ccs-msp430i2040-emdc-i2c-communication-with-evm430-i2040s

器件型号:MSP430I2040
主题中讨论的其他器件: EVM430-I2040SMSP430I2041

工具/软件:Code Composer Studio

您好!

对于 MSP430i2040 EVM、我已根据我们的应用成功更改了 UART 协议。

在另一个应用中、我希望使用 I2C 协议来获取计量数据。

它将如何与主器件通信?(我将 MSP430视为从器件)

它是基于请求的协议吗? 什么是获取数据的请求命令?

例如、 如果我想获得 Vrms、主器件应该向 MSp430i2040发送什么命令?

谢谢、

Anuradha。

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Anuradha、您好!

    感谢您的详细博文。 您是否将电能测量设计中心(EMDC)与 EVM430-i2040S 配合使用? EMDC 默认使用250k 波特的 UART 通信、但您可以更改通信协议以满足您的设计要求。 要在 MSP430i2041从器件上使用 I2C 和 EMDC 生成的代码、您可以参考以下线程。 请记住、当您从 UART 更改为 I2C 时、您将无法与 EMDC GUI 进行通信。 但是、您可以使用由 EMDC 生成的两个不同项目:一个没有用于校准的更改、另一个具有通信更改和第一个项目的校准因子。

    MSP430I2040:连接 I2C 上的 MSP430i2040S 分项计量 EVM

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    器件型号:MSP430I2040

    您好!

    对于先前查询中与 MSP430i2040 EVM 的 I2C 通信、为什么用户发送以下字符串、因为此字符串用于 波特率为9600的 UART? 我们需要 I2C 协议详细信息。

    字节 COMMAND_FRAME[]={0x68、0x99、0x99、0x99、0x99、 0x99、0x99、0x68、0x23、0x03、 0x52、0x00、0x00、0xDE、0x16};

     

    请分享介绍 MSP430i2040 I2C 协议的链接。

     

    谢谢、

    Anuradha。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 James、

    感谢您的回复。

    在上面提到的线程中、为什么用户使用字节 COMMAND_FRAME[]={0x68、0x99、0x99、0x99、0x99、0x99、 0x99、0x99、0x68、0x23、0x03、 0x52、0x00、0x00、0xDE、0x16};   这个字符串用于波特率为9600?的 UART 通信。

    我没有收到任何关于 MSP430i2040 EVM 通信的 I2C 协议的详细文档。

    请分享。

    当用户遇到 I2C 通信问题时、上面的线程已关闭、但未得到解决。 我对 MSP430i2040 EVM 的 I2C 测试协议有疑问?

     

    谢谢、

    Anuradha。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Anuradha、您好!

    您使用的是什么代码库? EVM 用户指南或更新的电能测量设计中心(EMDC)和库中介绍的基于 IAR 的旧能源库? 两者都使用 UART 作为默认通信协议。 我上面链接的线程与建议的 EMDC 库以及如何从默认 UART 通信更改为 I2C 通信相关。 在该主题中、Luis 和我都测试并确认基本 I2C 通信能够应对这些变化。 如果您需要其他更改、则可以利用我们的 I2C 代码示例和其他资源自行进行这些更改。 我们的 EVM 软件旨在展示功能、而不是用于支持所有难以满足的客户要求。 特别是对于 EMDC、我们的目标是提供可扩展、可配置的计量代码、使您能够专注于实现设计的非计量方面、例如通信。

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    器件型号:MSP430I2040

    您好!

    在此主题中,

    字节 COMMAND_FRAME[]={0x55、0xAA、0x06、0x04、0x01、 0x01、0x01、0x07、0x00};

    发送此字符串是为了从目标获取响应。

    您能解释一下这个字符串是如何形成的?

    谢谢、

    Anuradha。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    器件型号:MSP430I2040

    工具/软件:Code Composer Studio

    您好!

    https://e2e.ti.com/support/microcontrollers/msp430/f/166/p/809952/2998095#2998095

    在 螺纹上方、

    字节 COMMAND_FRAME[]={0x55、0xAA、0x06、0x04、0x01、 0x01、0x01、0x07、0x00}; 该字符串用于通过 I2C 协议从 MSP430i2040 EVM 获取响应。

    您能解释一下这个字符串是如何形成的?

    谢谢、

    Anuradha。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Anuradha、您好!

    有关此主题的相关问题、请回复此主题。 在过去几天里、我已经将来自您的几个新主题合并到了这个主题中、因为它与同一主题相关。 将来、请单击此主题中的"回复"按钮在此处回复。 如果您每天发布有关同一主题的新主题、我会假设我们的社区成员不太可能听到蜂鸣声、因为他们知道您将在第二天转到另一个主题。 虽然我们非常感谢您使用 E2E、但请记住这些指南。

    [引用用户="Anuradha Bulakh ]

    在 螺纹上方、

    字节 COMMAND_FRAME[]={0x55、0xAA、0x06、0x04、0x01、 0x01、0x01、0x07、0x00}; 该字符串用于通过 I2C 协议从 MSP430i2040 EVM 获取响应。

    您能解释一下这个字符串是如何形成的?

    [/报价]

    有关 EMDC 协议的更多信息、请参阅 EMDC 技术指南(v1.30)的通信协议规范部分。 为您提供快速概览:

    • 0x55 =同步字节
    • 0xAA =空字节
    • 0x06 =长度字节
    • 0x04 = ID 字节
    • 0x01 =命令字节
    • 0x01 =读取/写入字节
    • 0x01 =有效载荷字节
    • 0x07 =校验和 LSB
    • 0x00 =校验和 MSB

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    在 EMDC 技术指南(v1.30)的通信协议规范部分中。 本文档在协议下的任何地方都未提及。

    • 0x55 =同步字节
    • 0xAA =空字节
    • 0x06 =长度字节
    • 0x04 = ID 字节
    • 0x01 =命令字节
    • 0x01 =读取/写入字节
    • 0x01 =有效载荷字节
    • 0x07 =校验和 LSB
    • 0x00 =校验和 MSB  

    它的解释如下-

    MSP EM 设计中心通用数据包结构

    [0]

    [1]

    [2]

    [3]

    [4]

    [5]

    [6]

    (笑声)

    [n +1]

    [N+2]

    [N+3]

    MSP 设计中心 ID 字节

    命令 ID 字节

    读取/写入命令字节

    有效载荷字节0

    有效载荷字节1

    有效载荷字节2.

    有效载荷字节3.

    (笑声)

    有效载荷字节 N

    校验和(LSB)

    校验和(MSB)

    这非常令人困惑。

    我尝试了您建议的字符串、但没有收到任何 响应。

    I2C 的速度应该是多少? --我已经设置了1000000。

    在上面的字符串0x01 =读/写字节中,0x01用于写您是如何接收响应的? 如果命令为0x00、那么我们将仅接收响应字节、对吧?

    读取 Vrms 应采用何种协议? 请详细解释(包括 I2C 的启动和停止条件)。 以便我可以针对其余的计量 参数实施它。

    请回复所有4个要点的详细信息,以便我不需要创建单独的主题。

    谢谢、

    Anuradha。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Anuradha 您好、  

    [引用用户="Anuradha Bulakh 的说法]这非常令人困惑。[/引用]

    我们感谢您的反馈。 我同意、我们将在未来的 EMDC 版本中对此进行更新。 我认为这是错过的、因为 EMDC 协议基于 CapTIvate 协议 (不要在此处尝试增加混淆)、但新用户不会知道这一点。 默认情况下、EMDC 使用以250kbaud 的速率运行的 UART。 但是、必须注意的是、EMDC GUI 会以该波特率发送数据包、但会将其留出1ms 的时间、以便 i20xx 目标时间解析命令。 我认为从目标到主机的数据包之间不需要1ms 的延迟。

    [引用 user="Anuradha Bulakh ]2.I2C 的速度是多少? --我已设置1000000。[/quot]

    它应该是400kHz。

    [引用 user="Anuradha Bulakh 命令]3.上述 字符串0x01 =读/写字节,0x01表示写入您是如何收到响应的? 如果命令为0x00、那么我们将仅接收响应字节、对吧?

    当发送具有空有效载荷的命令时、将使用读取位、该命令将返回具有有效有效有效载荷的相同命令。 在 EMDC 技术指南中的图128中、当 EMDC GUI 发送设置了读取位的应用程序版本(0x02)命令、然后 EMDC 目标在设置了写入位的情况下发回相同的命令时、您可以看到这种情况的示例。

    [引用 user="Anuradha Bulakh ]4..要读取 Vrms,应使用什么协议? 请详细解释(包括 I2C 的启动和停止条件)。 以便我可以将其用于其他计量 参数。

    在前面链接的主题中、请参阅2019年8月2日( 此主题的第2页)的 Luis 说明。 它们详细说明了如何使用回调函数来监听您为请求 VRMS 而添加的命令。 他还提供了一个示例交换、包括命令发送和命令回复。 希望这会有所帮助。

    [引用 user="Anuradha Bulakh 的信息]\n 请详细回复所有4个要点,以便我不需要创建单独的线程。

    感谢您不创建新主题:)

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 James、

    感谢您的回复。

    我仍然不清楚、

    0x04是从器件 ID 吗? 如果是 ,那么为什么我们 在 EMDC 代码中设置0x0A (参考:-https://e2e.ti.com/support/microcontrollers/msp430/f/166/p/809952/2998095#2998095 )

    2.在 https://e2e.ti.com/support/microcontrollers/msp430/f/166/p/809952/2998095#pi320995=2 线程55 AA 07 04 80 00 00 00 84 00是从主器件到从器件(MSP430)和 0A) 4 80 01 9A B51E 00 F3 01是 从器件到主器件的响应,对 吧?

    3.我已按照建议对代码进行了更改,并发送了上述字符串,但未接收任何数据。

    4.我正在使用主器件作为 ST 控制器、并将 SDA 和 SCL 线(只有两条)连接到 MSP430、并且 接地端接地端接在一起、我是否错过了任何东西?

    代码如下所示、

     I2C_GenerateSTART (ENABLE);
      while (!I2C_CheckEvent (I2C_EVENT_MASTER_MODE_SELECT));
      I2C_SendData (0x55);
     while (!I2C_CheckEvent (I2C_EVENT_MASTER_BYTE_transmitted));
      I2C_SendData (0xAA);
      while (!I2C_CheckEvent (I2C_EVENT_MASTER_BYTE_transmitted));
       I2C_SendData (0x07);
     while (!I2C_CheckEvent (I2C_EVENT_MASTER_BYTE_transmitted));
      I2C_SendData (0x04);
      while (!I2C_CheckEvent (I2C_EVENT_MASTER_BYTE_transmitted));
      I2C_SendData (0x80);
      while (!I2C_CheckEvent (I2C_EVENT_MASTER_BYTE_transmitted));
      I2C_SendData (0x00);
      while (!I2C_CheckEvent (I2C_EVENT_MASTER_BYTE_transmitted));
      I2C_SendData (0x00);
      while (!I2C_CheckEvent (I2C_EVENT_MASTER_BYTE_transmitted));
      I2C_SendData (0x00);
      while (!I2C_CheckEvent (I2C_EVENT_MASTER_BYTE_transmitted));
      I2C_SendData (0x84);
      while (!I2C_CheckEvent (I2C_EVENT_MASTER_BYTE_transmitted));
       I2C_SendData (0x00);
      while (!I2C_CheckEvent (I2C_EVENT_MASTER_BYTE_transmitted));
     
     
     
     while (num_of_Bytes)  //num_of_Bytes=11
      {
           

    if (I2C_CheckEvent (I2C_EVENT_MASTER_BYTE_received)) 
          {   


               if (num_for_bytes = 0)
               {
                    I2C_致谢 Config (I2C_ACK_NONE);
                    I2C_GenerateSTOP (ENABLE);   
                }
     
               bytes[(num_for_bytes - 1)]= I2C_ReceiveData ();
               num_for_bytes--;
         
            }
      }   
     
     UART1_SendData8 (bytes[11]);延迟(0xFFFF);
     UART1_SendData8 (bytes[10]);延迟(0xFFFF);
     UART1_SendData8 (bytes[9]);延迟(0xFFFF);
     UART1_SendData8 (bytes[8]);延迟(0xFFFF);
     UART1_SendData8 (bytes[7]);延迟(0xFFFF);
     UART1_SendData8 (bytes[6]);延迟(0xFFFF);
     UART1_SendData8 (bytes[5]);延迟(0xFFFF);
     UART1_SendData8 (字节[4]);延迟(0xFFFF);
     UART1_SendData8 (bytes[3]);延迟(0xFFFF);
     UART1_SendData8 (bytes[2]);延迟(0xFFFF);
     UART1_SendData8 (bytes[1]);延迟(0xFFFF);
     UART1_SendData8 (bytes[0]);延迟(0xFFFF);

    正在接收0000000000000。

    正在等待您的回复。

    谢谢、

    Anuradha。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Anuradha Bulakh ]1. 0x04是从器件 ID 吗? 如果是 ,那么为什么我们在 EMDC 代码中设置0x0A (参考:-https://e2e.ti.com/support/microcontrollers/msp430/f/166/p/809952/2998095#2998095 )

    否、0x04是命令 ID 字节。 对于 EMDC、该值等于0x04。 我们还有其他与 CapTIvate 和 USS 器件相关的设计、它们会使用不同的命令 ID 字节、因为它们还具有设计中心 GUI 并使用类似的协议。 默认情况下、I2C 从地址为0x0A、但可以根据需要更改。

    [引用用户="Anuradha Bulakh ]2. 在 https://e2e.ti.com/support/microcontrollers/msp430/f/166/p/809952/2998095#pi320995=2 线程55 AA 07 04 80 00 00 00 84 00是从主器件到从器件的字符串 MSP430和 0A )4 80 01 9A B51E 00 F3 01是 从器件到主器件的响应,右 ?[/引号]

    是的、这是基于 Luis 所做的事情。 请记住、他将虚拟数据用于从器件(MSP430)到主器件的响应。

    [引用用户="Anuradha Bulakh ]

    3.我已按照建议对代码进行了更改,并发送了上述字符串,但未接收任何数据。

    4.我正在使用主器件作为 ST 控制器、并将 SDA 和 SCL 线(只有两条)连接到 MSP430、并且 接地端接地端接在一起、我是否错过了任何东西?

    代码如下所示、

    [/报价]

    I2C 主设备代码可能错误。 此外、MSP430上是否有连接到 VCC 的上拉电阻器? 确保 MSP430和 ST 之间的逻辑电平没有不同。 如果是、则需要使用电压逻辑电平转换器。

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 James、

    如果0x0A 是从器件 ID,那么为什么它不在字符串55 AA 07 04 80 00 00 84 00中? 此协议中不需要从 ID?

    是的、我们在 SCL 和 SDA 线路上有上拉电阻。 和电压电平也相同(3.3V)。

    此致、

    Anuradha。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Anuradha Bulakh 的说法]如果0x0A 是从器件 ID,那么为什么它不在字符串55 AA 07 04 80 00 00 84 00中? 此协议中不需要从机 ID?[/QUERT]

    是的、需要在 EMDC 数据包之前发送从器件 ID 以正确寻址 I2C 从器件、即 MSP430。 我认为这是根据 I2C 总线规格假设的。

    I2C 总线规范

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 James、

    正如我在 I2C 协议方面所做的、它 非常简单、

    从主器件到从器件的命令:-

    启动从机地址 R/W Ack    Data1 Ack  Data1 Ack ........ Datan NACK    停止

    如果要更改方向 R/W,

    启动从机地址 R/W Ack    Data1 Ack  Data1 Ack ........ Datan NACK     RESTART   Slave address R/W Ack    Data1 Ack  Data1 Ack ........ Datan NACK   

    但是、对于 MSP430来说、它不像标准 I2C 协议、这就是用户想要详细解释协议的原因、包括在 不假定任何情况下从开始到停止条件。


    我们已经在 UART 上使用了 MSP430计量解决方案、并根据应用对协议进行了一些修改。

    并且渴望 在 I2C 上为另一个应用使用相同的功能。 由于协议未正确记录、我们发现了一些困难(我知道 EMDC 生成的代码主要用于 UART、因为您激励用户修改 I2C 的代码、协议应详细说明)。

    请向我发送协议字符串以读取 Vrms、包括起始地址、从地址、R/W、数据包、停止 ( 我在上次答复中已经询问过)。

     


    提前感谢。

    此致、

    Anuradha。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此外、我观察到、我每天只在 E2E 上收到一次回复、因此对于我的查询、我需要等待另一天。

    询问后的2到3到4小时内、速度是否快?

    如果由于时间的原因、查询无法处理给印度办事处成员?

    此致、

    Anuradha。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Anuradha、您好!

    [引用 user="Anuradha Bulakh 的说法]I2C 协议非常 简单、如

    我很高兴听到这个消息。

    [引用用户="Anuradha Bulakh ]

    我们已经在 UART 上使用了 MSP430计量解决方案、并根据应用对协议进行了一些修改。

    并且渴望 在 I2C 上为另一个应用使用相同的功能。 由于协议未正确记录、我们发现了一些困难(我知道 EMDC 生成的代码主要用于 UART、因为您激励用户修改 I2C 的代码、协议应详细说明)。

    [/报价]

    我们与 EMDC 的目标是消除用户开发计量代码背后的复杂性。 它不是支持所有通信协议、而是允许没有计量经验的用户更多地专注于配置和调整通信协议。 我同意这可能具有挑战性、但我向您保证、这比开发计量代码容易得多。 更重要的是、我们倾听并感谢您使用我们的工具提供的反馈。 EMDC 似乎经常需要 I2C 通信、因此我们在即将推出的版本中添加了这一潜在功能。

    [引述 user="Anuradha Bulakh 的信息"]请向我发送协议字符串,以读取 Vrms,包括起始地址、从地址、R/W、数据包、停止 (我 在上次答复中已经询问过)。

    按照上面链接的线程对代码进行更改后、我能够捕获与逻辑分析仪的以下通信。 我使用了 Ardvark I2C 工具作为 I2C 主机。

    在逻辑分析仪 GUI 的分析仪设置下、我必须将地址显示更改为"7位、仅地址位"、以便正确显示从器件地址。 如您所见、正如我们先前所讨论的、具有 Write 位集的从地址(0x0A)将首先发送。 然后是同步字节(0x55)。 然后是空字节(0xAA)。 然后、长度字节(0x07)-请记住长度是有效载荷字节+ 2字节校验和的大小。 然后、EMDC ID 字节(0x04)。 然后是命令字节(0x80)。 然后、两个字节(0x00、0x00)作为有效载荷。 最后两个字节(0x84、0x00)是校验和。 这是来自主机的命令。

    现在、从器件的响应由'emDCCommandHandlers.c'中的函数定义。

    void CommandHandler_transmitVRMS (Packet_t *数据包,
    uint8_t 相位 ID、
    uint8_t * Vrms)
    {
    packet->length = 8;
    packet->payload[0]= COMMAND_ERTER_EM_GUI_ID_byte;
    packet->payload[1]= COMMAND_ERTER_VRMS_ID;
    packet->PAYLOAD[2]= COMMAND_ERTER_WRITE_CMD;
    packet->payload[3]= phaseID;
    packet->payload[4]= Vrm[0];
    packet->payload[5]= Vrm[1];
    packet->payload[6]= Vrm[2];
    packet->payload[7]= Vrm[3];
    
    Com_writePacket (packet);
    } 

    这是从设备到主机的通信。 首先、在读取位被置位的情况下、从器件地址(0x0A)被发送。 接下来、发送长度字节(0x0A)。 然后、EMDC GUI ID 字节(0x04)。 然后是命令字节(0x80)。 然后、写入命令(0x01)。 然后是相位 ID (0x01)、这对于多相系统很重要。 然后、VRMS 的四个有效载荷字节(0x00、0x00、0x00、0x00)为零、因为我的板未连接到交流电。 最后两个字节是校验和字节(0x86、0x00)。 如您所见、这与我的函数在代码中的此命令字节相匹配。 您可以随意修改此函数、因为它只是一个有关如何接收 VRMS 值的示例。 这也可应用于所有其他支持的结果。

    这里是其他结果的其他示例函数。

    void CommandHandler_transmitIRMS (Packet_t *数据包,
    uint8_t 相位 ID、
    uint8_t * IRMS)
    {
    packet->length = 8;
    packet->payload[0]= COMMAND_ERTER_EM_GUI_ID_byte;
    packet->payload[1]= COMMAND_ERTER_IRMS_ID;
    packet->PAYLOAD[2]= COMMAND_ERTER_WRITE_CMD;
    packet->payload[3]= phaseID;
    packet->payload[4]= IRMS[0];
    packet->payload[5]= IRMS[1];
    packet->payload[6]= IRMS[2];
    packet->payload[7]= IRMS[3];
    
    Com_writePacket (packet);
    }
    
    void CommandHandler_transmitVPeak (Packet_t *数据包,
    uint8_t 相位 ID、
    uint8_t *峰值电压)
    {
    packet->length = 8;
    packet->payload[0]= COMMAND_ERTER_EM_GUI_ID_byte;
    packet->payload[1]= COMMAND_ERTER_Vpeak_ID;
    packet->PAYLOAD[2]= COMMAND_ERTER_WRITE_CMD;
    packet->payload[3]= phaseID;
    packet->payload[4]= Vpeak[0];
    packet->payload[5]= Vpeak[1];
    packet->payload[6]= Vpeak[2];
    packet->payload[7]= Vpeak[3];
    
    Com_writePacket (packet);
    }
    
    void CommandHandler_transmitIPeak (Packet_t *数据包,
    uint8_t 相位 ID、
    uint8_t * IPEAK)
    {
    packet->length = 8;
    packet->payload[0]= COMMAND_ERTER_EM_GUI_ID_byte;
    packet->PAYLOAD[1]= COMMAND_ERTER_IPEAK_ID;
    packet->PAYLOAD[2]= COMMAND_ERTER_WRITE_CMD;
    packet->payload[3]= phaseID;
    packet->PAYLOAD[4]= IPEAAK[0];
    packet->PAYLOAD[5]= IPEAAK[1];
    packet->PAYLOAD[6]= IPEAAK[2];
    packet->PAYLOAD[7]= IPEAAK[3];
    
    Com_writePacket (packet);
    }
    
    void CommandHandler_transmitPowerFactor (Package_t *数据包,
    uint8_t 相位 ID、
    uint8_t *pFactor)
    {
    packet->length = 8;
    packet->payload[0]= COMMAND_ERTER_EM_GUI_ID_byte;
    packet->payload[1]= COMMAND_POWER_FACTOR;
    packet->PAYLOAD[2]= COMMAND_ERTER_WRITE_CMD;
    packet->payload[3]= phaseID;
    packet->payload[4]= pFactor[0];
    packet->payload[5]= pFactor[1];
    packet->payload[6]= pFactor[2];
    packet->payload[7]= pFactor[3];
    
    Com_writePacket (packet);
    }
    
    void CommandHandler_transmitFrequency (Packet_t * packet、
    uint8_t 相位 ID、
    uint8_t *频率)
    {
    packet->length = 6;
    packet->payload[0]= COMMAND_ERTER_EM_GUI_ID_byte;
    packet->payload[1]= COMMAND_ERTER_FREQUENCY;
    packet->PAYLOAD[2]= COMMAND_ERTER_WRITE_CMD;
    packet->payload[3]= phaseID;
    packet->payload[4]= frequency [0];
    packet->payload[5]= frequency [1];
    
    Com_writePacket (packet);
    }
    
    void CommandHandler_transmitActivePower (Packag_t *数据包,
    uint8_t 相位 ID、
    uint8_t *actPower)
    {
    packet->length = 12;
    packet->payload[0]= COMMAND_ERTER_EM_GUI_ID_byte;
    packet->payload[1]= COMMAND_ERTER_ACTIVE_POWER_ID;
    packet->PAYLOAD[2]= COMMAND_ERTER_WRITE_CMD;
    packet->payload[3]= phaseID;
    packet->payload[4]= actPower[0];
    packet->payload[5]= actPower[1];
    packet->payload[6]= actPower[2];
    packet->payload[7]= actPower[3];
    packet->payload[8]= actPower[4];
    packet->payload[9]= actPower[5];
    packet->payload[10]= actPower[6];
    packet->payload[11]= actPower[7];
    
    Com_writePacket (packet);
    }
    
    void CommandHandler_transmitReactivePower (Packet_t *数据包,
    uint8_t 相位 ID、
    uint8_t * reactPower)
    {
    packet->length = 12;
    packet->payload[0]= COMMAND_ERTER_EM_GUI_ID_byte;
    packet->payload[1]= COMMAND_ERTER_REACLITY_POWER_ID;
    packet->PAYLOAD[2]= COMMAND_ERTER_WRITE_CMD;
    packet->payload[3]= phaseID;
    packet->payload[4]= reactPower[0];
    packet->payload[5]= reactPower[1];
    packet->payload[6]= reactPower[2];
    packet->payload[7]= reactPower[3];
    packet->payload[8]= reactPower[4];
    packet->payload[9]= reactPower[5];
    packet->payload[10]= reactPower[6];
    packet->payload[11]= reactPower[7];
    
    COMM_writePacket (packet);
    }
    
    void CommandHandler_transmitApparentPower (Packet_t *数据包,
    uint8_t 相位 ID、
    uint8_t * appPower)
    {
    packet->length = 12;
    packet->payload[0]= COMMAND_ERTER_EM_GUI_ID_byte;
    packet->payload[1]= COMMAND_ERTER_ANITY_POWER_ID;
    packet->PAYLOAD[2]= COMMAND_ERTER_WRITE_CMD;
    packet->payload[3]= phaseID;
    packet->payload[4]= appPower[0];
    packet->payload[5]= appPower[1];
    packet->payload[6]= appPower[2];
    packet->payload[7]= appPower[3];
    packet->payload[8]= appPower[4];
    packet->payload[9]= appPower[5];
    packet->payload[10]= appPower[6];
    packet->payload[11]= appPower[7];
    
    Com_writePacket (packet);
    }
    
    void CommandHandler_transmitActiveEnergy (Package_t *数据包,
    uint8_t 相位 ID、
    uint8_t * actEnergy)
    {
    packet->length = 12;
    packet->payload[0]= COMMAND_ERTER_EM_GUI_ID_byte;
    packet->payload[1]= COMMAND_ERTER_ACTIVE_ENSE_ID;
    packet->PAYLOAD[2]= COMMAND_ERTER_WRITE_CMD;
    packet->payload[3]= phaseID;
    packet->payload[4]= actEnergy [0];
    packet->payload[5]= actEnergy [1];
    packet->payload[6]= actEnergy [2];
    packet->payload[7]= actEnergy [3];
    packet->payload[8]= actEnergy [4];
    packet->payload[9]= actEnergy [5];
    packet->payload[10]= actEnergy [6];
    packet->payload[11]= actEnergy [7];
    
    COMM_writePacket (packet);
    }
    
    void CommandHandler_transmitReactiveEnergy (Packet_t *数据包,
    uint8_t 相位 ID、
    uint8_t * reactEnergy)
    {
    packet->length = 12;
    packet->payload[0]= COMMAND_ERTER_EM_GUI_ID_byte;
    packet->payload[1]= COMMAND_ERTER_REACLITY_energy_ID;
    packet->PAYLOAD[2]= COMMAND_ERTER_WRITE_CMD;
    packet->payload[3]= phaseID;
    packet->payload[4]= reactEnergy [0];
    packet->payload[5]= reactEnergy [1];
    packet->payload[6]= reactEnergy [2];
    packet->payload[7]= reactEnergy [3];
    packet->payload[8]= reactEnergy [4];
    packet->payload[9]= reactEnergy [5];
    packet->payload[10]= reactEnergy [6];
    packet->payload[11]=乳能量[7];
    
    COMM_writePacket (packet);
    }
    
    void CommandHandler_transmitApparentEnergy (Packet_t *数据包,
    uint8_t 相位 ID、
    uint8_t * appEnergy)
    {
    packet->length = 12;
    packet->payload[0]= COMMAND_ERTER_EM_GUI_ID_byte;
    packet->payload[1]= COMMAND_handler;INAD_energy_ID;
    packet->PAYLOAD[2]= COMMAND_ERTER_WRITE_CMD;
    packet->payload[3]= phaseID;
    packet->payload[4]= appEnergy [0];
    packet->payload[5]= appEnergy [1];
    packet->payload[6]= appEnergy [2];
    packet->payload[7]= appEnergy [3];
    packet->payload[8]= appEnergy [4];
    packet->payload[9]= appEnergy [5];
    packet->payload[10]= appEnergy [6];
    packet->payload[11]= appEnergy [7];
    
    Com_writePacket (packet);
    } 

    我希望这对您有所帮助。

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Anuradha 您好、  

    我的最后一个帖子是否有用? 您是否能够使通信正常工作?

    此致、

    James