《電力計量模塊的MODBUS協議的C語言數據解析程序與上位機電力參數監測測試》-------------------lwl

1.該電力模塊是直入式AC測量(互感式的量程更大,安全),包擴電壓、電流、功率因數、頻率、溫度、二氧化碳、有功功率、有功電能等基本的電氣參數。

2.通訊使用的TTL,協議爲MODBUS協議,進行數據的讀取。

3.C語言的讀表程序。

unsigned int calccrc(unsigned char crcbuf,unsigned int crc)
{
unsigned char i;
unsigned char chk;
crc=crc ^ crcbuf;
for(i=0;i<8;i++)
{
chk=(U08)(crc&1);
crc=crc>>1;
crc=crc&0x7fff;
if (chk==1)
crc=crc^0xa001;
crc=crc&0xffff;
}
return crc;
}
unsigned int chkcrc(unsigned char *buf,unsigned char len)
{
unsigned char hi,lo;
unsigned int i;
unsigned int crc;
crc=0xFFFF;
for(i=0;i<len;i++)
{
crc=calccrc(*buf,crc);
buf++;
}
hi=(U08)(crc%256);
lo=(U08)(crc/256);
crc=(((unsigned int)(hi))<<8)|lo;
return crc;
}
void read_data(void)
{
union crcdata
{
unsigned int word16;
unsigned char byte[2];
}crcnow;
if((Clock.Second%2)==1) //2 秒讀一次
{
Tx_Buffer[0]=Read_ID; //抄讀模塊的 ID 號
Tx_Buffer[1]=0x03;
Tx_Buffer[2]=0x00;
Tx_Buffer[3]=0x48;
Tx_Buffer[4]=0x00;
Tx_Buffer[5]=0x06;
crcnow.word16=chkcrc(Tx_Buffer,6);
Tx_Buffer[6]=crcnow.byte[1]; //CRC 效驗低字節在前
Tx_Buffer[7]=crcnow.byte[0];
Send_data(8); //發送 8 個數據

}
}
void Analysis_data(void)
{
unsigned char i;
union crcdata
{
unsigned int word16;
unsigned char byte[2];
}crcnow;
if(Comm[1].Status==2) //接收完成
{
if(RX_Buffer[0]==Read_ID) //確認 ID 正確
{
crcnow.word16=chkcrc(RX_Buffer,Comm[1].nRx-2); //Comm[1].nRx 是接收數據長度
if((crcnow.byte[0]==RX_Buffer[Comm[1].nRx-1])&&(crcnow.byte[1]==RX_Buffer[Comm[1].nRx-2])) //CRC
效驗
{
Voltage_data=(((unsigned int)(RX_Buffer[3]))<<8)|RX_Buffer[4]; //Voltage_data 爲 unsigned int 型
Current_data=(((unsigned int)(RX_Buffer[5]))<<8)|RX_Buffer[6]; //Current_data 爲 unsigned int 型
Power_data=(((unsigned int)(RX_Buffer[7]))<<8)|RX_Buffer[8]; //Power_data 爲 unsigned int 型
Energy_data=(((unsigned long)(RX_Buffer[9]))<<24)|(((unsigned long)(RX_Buffer[10]))<<16)|(((unsigned
long)(RX_Buffer[11]))<<8)|RX_Buffer[12]; ////Energy_data 爲 unsigned long 型
Pf_data=(((unsigned int)(RX_Buffer[13]))<<8)|RX_Buffer[14]; //Pf_data 爲 unsigned int 型
}
}
Comm[1].Status=0;//切換回接收數據狀態
}
}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章