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.
工具/软件: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)的通信协议规范部分。 为您提供快速概览:
此致、
James
您好!
在 EMDC 技术指南(v1.30)的通信协议规范部分中。 本文档在协议下的任何地方都未提及。
它的解释如下-
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 总线规格假设的。
此致、
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