qinchenglim
級(jí)別: 論壇先鋒
|
現(xiàn)在用到一款溫控器,用RS-232通訊讀取當(dāng)前溫度值。用PLC發(fā)送讀取指令的時(shí)候要發(fā)送FCS效驗(yàn)碼,以前沒有用過這樣的效驗(yàn)方式,不知道怎么計(jì)算,請用過的朋友分享一下計(jì)算方法。先謝謝了! 比如發(fā)送數(shù)據(jù) H4030 H3030 H3131 ,它的FCS效驗(yàn)碼是多少?怎么算的?再次感謝大家。 |
---|---|
|
yamqq
雅馬哈,愛普生,電裝機(jī)器人。
級(jí)別: 網(wǎng)絡(luò)英雄
|
#include "stdafx.h" char *fnFCS(const char *pstr,int iCount,char *pFCS) //定義FCS校驗(yàn)函數(shù) { if(pstr==NULL||pFCS==NULL) //如果指針為null return NULL; //返回NULL char ch=*pstr; //定義字符變量并賦初值 for(int i=1;i<iCount;i++) //循環(huán)iCount次 { ch^=*(pstr+i); //異或運(yùn)算 } char ct=ch>>4; //取異或結(jié)果的高四位 if(ct>9) //轉(zhuǎn)為ASCII碼 ct+='A'-10; else ct+='0'; *pFCS=ct; ct=ch&0x0F; //取異或結(jié)果的低四位 if(ct>9) //轉(zhuǎn)為ASCII碼 ct+='A'-10; else ct+='0'; *(pFCS+1)=ct; return pFCS; //返回校驗(yàn)值 } int main(int argc, char* argv[]) //定義主函數(shù) { char c,str[100]=""; //定義變量 int i=0; //定義變量 char jyTemp[2]; //定義變量 printf("請輸入要校驗(yàn)的字符串:\n"); //要求輸入字符串 while((str=getchar())!='\n') //輸入字符串,直到遇到回車符 { i+=1; fnFCS(str,i,&jyTemp[0]); //調(diào)用FCS計(jì)算函數(shù) } printf("以上字符串的FCS校驗(yàn)是:'%c%c'。\n",jyTemp[0],jyTemp[1]); //輸出結(jié)果 return 0; } |
|
---|---|---|
本帖最近評(píng)分記錄:
|
qinchenglim
級(jí)別: 論壇先鋒
|
一樓的朋友能具體解釋一下FCS的計(jì)算原理嗎?這么多高級(jí)語言看著有點(diǎn)眼暈了 |
---|---|
|