modbus通訊..有時可以有時不可以 |
尚未結案
|
arty0117
一般會員 發表:1 回覆:1 積分:0 註冊:2009-03-27 發送簡訊給我 |
各位大大: 我用modbus跟伺服器做通訊 ,可是我寫出來的程式有時候按可以通,有時候按又不能通。 麻煩大大指教。 [code cpp] void __fastcall TForm1::BUF_SV_OFFClick(TObject *Sender) { DynamicArray Form1->ByteSend.Length=13; Form1->ByteSend[0]=StrToInt("0x01");//局號 Form1->ByteSend[1]=StrToInt("0x10");//寫入 Form1->ByteSend[2]=StrToInt("0x00");//位址 Form1->ByteSend[3]=StrToInt("0x00"); Form1->ByteSend[4]=StrToInt("0x00");//記錄數 Form1->ByteSend[5]=StrToInt("0x02"); Form1->ByteSend[6]=StrToInt("0x04");//資料位元組數 Form1->ByteSend[7]=StrToInt("0x00");//數據 Form1->ByteSend[8]=StrToInt("0x00"); Form1->ByteSend[9]=StrToInt("0x00"); Form1->ByteSend[10]=StrToInt("0x01");//伺服器_on //CRC檢查碼 int CRC=0xFFFF; int Poly=0xA001; int sft; for(int dtn=0;dtn<(Form1->ByteSend.Length-2) ;dtn ) { sft=0; CRC=CRC^Form1->ByteSend[dtn]; while(sft < 8) { if(CRC%2 == 1) { CRC = CRC >> 1; CRC=CRC^Poly; sft ; }else if(CRC%2 == 0) { CRC = CRC >> 1; sft ; } } } Form1->ByteSend[11] =StrToInt("0x" IntToHex(CRC%6,2));//CRC檢查碼 Form1->ByteSend[12] =StrToInt("0x" IntToHex(CRC/256,2));//CRC檢查碼 bool T_EN=false; T_EN=Form1->OutputByte(Form1->ByteSend); if(T_EN==true){ Form1->BUF_SV_OFF->Visible=false; Form1->BUF_SV_ON->Visible=true; T_EN=false; } } [/code] | |
foreman
高階會員 發表:3 回覆:124 積分:190 註冊:2004-09-10 發送簡訊給我 |
大大:
您的CRC運算不對 [code cpp] int CRC=0xFFFF; int Poly=0xA001; int sft,j; Byte c; for(int dtn=0;dtn<(Form1->ByteSend.Length-2) ;dtn ) { sft=0; c=Form1->ByteSend[dtn]; while(sft < 8) { j=(CRC^c)&1; c>>=1; CRC>>=1; if (j) CRC=CRC^Poly; sft ; } } Form1->ByteSend[11] =CRC&0xff;//CRC檢查碼 Form1->ByteSend[12] =CRC>>8;//CRC檢查碼 [/code]
編輯記錄
foreman 重新編輯於 2009-03-30 05:45:22, 註解 無‧
|
|
arty0117
一般會員 發表:1 回覆:1 積分:0 註冊:2009-03-27 發送簡訊給我 |
|
|
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
會不會是com port在設定Baud Rate / Parity / Start bits / Stop bits上面的問題。在Serial Port通訊中,如果兩端的設定不一置,會產生無法預期的錯誤。
===================引 用 arty0117 文 章===================
|
|
hulihunter
一般會員 發表:0 回覆:1 積分:0 註冊:2002-11-25 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |