【2022得捷电子创新设计大赛】 树莓派采集电网数据
[复制链接]
【2022得捷电子创新设计大赛】 树莓派采集电网数据
这里我使用了一个电表和一个采集器,用到的协议是《国网376.1-2013规约.doc》协议
协议内容比较多(226页),时间有限,所以我暂时先读取了总的电能值
系统连接图如下:
树莓派建议TCP服务器,集中器采集数据后连接服务器,根据协议读取数据;
帧通信格式如下图:
程序中使用2个线程处理,一个线程用于定时发送查询指令,一个线程用于接收数据解析;
解析
if( recvbytes >0 )
{
Kfifo_Put(&Tcp_recv_fifo,(unsigned char *)revdata,recvbytes);
/* revdata[ret] = 0x00;*/
printf("\n");
printf("客户端:");
printf_hex((unsigned char*)revdata, recvbytes);
GDW1376_1_protocol_parsing((unsigned char *)revdata, sizeof(revdata), &gdw1376_1_data);
printf("\n");
printf("received data : %s\n",buf);
}
发送
if (sendflag == false)
{
/*if (test_DT2 >= 2 )
{
test_DA1 = 0xff;
test_DA2 = 0x00;
test_DA = test_DA1 | (test_DA2 << 8);
}
if (test_cnt >= 8)
{
test_cnt = 0;
test_DT1 = 0x01;
test_DT2 = test_DT2 + 1;
test_DT = test_DT1 | (test_DT2 << 8);
}
else
{
test_DT1 = ( 1 << test_cnt);
test_DT2 = test_DT2;
test_DT = test_DT1 | (test_DT2 << 8);
}*/
sendlength = GDW1376_1_get_terminal_time(g_seq,sendindex, test_DA, test_DT,(unsigned char *)senddata);
printf("服务端:");
printf_hex((unsigned char*)senddata, sendlength);
sendflag = true;
test_cnt++;
}
编译后运行:
对应电表值:
|