線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4583
推到 Plurk!
推到 Facebook!

請問關於使用RS232 做PLC 通訊的問題

尚未結案
JK53
一般會員


發表:5
回覆:8
積分:2
註冊:2003-12-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-10 17:33:12 IP:140.124.xxx.xxx 未訂閱
我所使用的是NAIS 的PLC ,RS232程式是參考文魁出的「C Builder 與RS232 串列通訊控制」這本書。 依照書中的範例,我已經在自己的電腦上做過RS232 的連線測試,也將一些通訊參數設定跟PLC 一樣,但是還是沒辦法做好跟PLC 的溝通。以下是目前我所能想到的可能問題。 一、通訊設定不完全:PLC 的通訊設定上有提到:開始碼設定為「無」,終端碼設定為「CR」。請問所謂的開始碼跟終端碼是指「XonChar」跟「XoffChar」兩者嗎。另外,程式碼應該是怎麼下呢,開始碼設為「無」是:dcb.XonChar=NULL; 嗎,那終端碼設為「CR」又應該怎麼做呢。 二、通訊指令錯誤: (1) 在PLC 的通訊指令中提到指令字串的檢查碼使用horizontal parity 及exclusive OR 的方式,有人能告訴我哪裡可以找到這部份的相關說明嗎。 (2) 在PLC 的通訊字串中再度提到開頭符號「Header character」跟終止符號「Terminator character」,我不曉得這跟前項所提到的開始碼跟終端碼是不是有關係,因為他的終止符號「Terminator character」的說明中竟然就寫著「CR」。但如果是有關係的,他的開頭符號「Header character」竟然是「 % or < 」而不是「無」,這又讓我有點搞混了。 各位先進請麻煩幫幫我解決這個大問題吧!! 發表人 - JK53 於 2005/01/10 18:15:58
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-10 21:27:02 IP:220.130.xxx.xxx 未訂閱
JK53: 1.如果沒錯的話他所表示的開始碼跟結束碼並不是你所想的這樣.應該是資料協定的定義.舉例來說 [a][b][c]..[d][e]([]代表1各byte) a->起始 b->Command c->Data d->Check e->結束碼 一個完整的命令如果包含上述六各部份.那開始碼為"無"表示不需要起始(就是a不用)終端碼為"CR"表示你需要將最後一碼輸入10或是13我忘了要查一下(就是 >.
JK53
一般會員


發表:5
回覆:8
積分:2
註冊:2003-12-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-11 11:59:05 IP:140.124.xxx.xxx 未訂閱
感謝您的回應,但有些問題我還是不懂‧‧‧ (1) 首先,開始碼跟結束碼應該是在我的命令字串中加入嗎,還是應該在通訊協定中作設定呢,其所指的是XonChar 跟XoffChar 兩者嗎。如果是這樣的話,程式應該怎麼寫呢。dcb.XonChar=? dcb.XoffChar=? (2) 在PLC 通訊方法的說明文件中提到,命令字串中的終止碼(Terminator),其字元(character)是「CR」,ASCII碼是0DH,如果我要把這個字元加進命令字串中的話;在VB 的做法好像是用Chr$(0D) 的方式,那麼,在C 中應該怎麼做呢。 (抱歉對於終止碼這部份我還是無法理解,因為他在通訊協定跟命令字串中都有提到,而且都是「CR」,所以我只能都試試了)。 (3) 文件在檢查碼這部份是這樣說的: *Two- digit hexadecimal 00 to FF (ASCII codes) *These are codes (horizontal parity) that are used to detect errors in the transmitted data. *The BCC (Block Check Code) is a code that carries out an error check using horizontal parity, to improve the reliability of the data being sent. *The BCC uses an exclusive OR from the header (%) to the final character of the text, and converts the 8- bit data into a 2-caracter ASCII code. 以下列字串為例(前面12 個字元是命令字串) % 0 1 # R C S X 0 0 0 0 1D cr ← 1D 是檢查碼 cr 是結束碼 25H 30H 31H 23H 52H 43H 53H 58H 30H 30H 30H 30H 然後,(一)、Takes exclusive OR,(二)、Converts to ASCII format,就產生了檢查碼是「1D」,可我怎麼看還是看不懂是怎麼出來的。 發表人 - JK53 於 2005/01/11 19:58:18
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-12 00:27:42 IP:220.130.xxx.xxx 未訂閱
JK53你好: 1.不用理會XnChar跟XoffChar,開始碼就是%結束碼就是CR. 2.在BCB中你加上"0x"就表示為16進制 3.
byte buf[14];
buf[0] = 0x25;
buf[1] = 0x30;
buf[2] = 0x31;
buf[3] = 0x23;
buf[4] = 0x52;
buf[5] = 0x43;
buf[6] = 0x53;
buf[7] = 0x58;
buf[8] = 0x30;
buf[9] = 0x30;
buf[10] = 0x30;
buf[11] = 0x30;
buf[12] = buf[0] ^ buf[1] ^  buf[2] ^  buf[3] ^  buf[4] ^  buf[5] ^  buf[6] ^  buf[7] ^  buf[8] ^  buf[9] ^  buf[10] ^  buf[11] ;
buf[13] = 0xD;
檢查碼就是0x1D; 4.你試試看把buf傳過去.看看有沒有回應.
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-12 00:28:04 IP:220.130.xxx.xxx 未訂閱
JK53你好: 1.不用理會XnChar跟XoffChar,開始碼就是%結束碼就是CR. 2.在BCB中你加上"0x"就表示為16進制 3.
byte buf[14];
buf[0] = 0x25;
buf[1] = 0x30;
buf[2] = 0x31;
buf[3] = 0x23;
buf[4] = 0x52;
buf[5] = 0x43;
buf[6] = 0x53;
buf[7] = 0x58;
buf[8] = 0x30;
buf[9] = 0x30;
buf[10] = 0x30;
buf[11] = 0x30;
buf[12] = buf[0] ^ buf[1] ^  buf[2] ^  buf[3] ^  buf[4] ^  buf[5] ^  buf[6] ^  buf[7] ^  buf[8] ^  buf[9] ^  buf[10] ^  buf[11] ;
buf[13] = 0xD;
檢查碼就是0x1D; 4.你試試看把buf傳過去.看看有沒有回應.
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-01-12 00:28:28 IP:220.130.xxx.xxx 未訂閱
JK53你好: 1.不用理會XnChar跟XoffChar,開始碼就是%結束碼就是CR. 2.在BCB中你加上"0x"就表示為16進制 3.
byte buf[14];
buf[0] = 0x25;
buf[1] = 0x30;
buf[2] = 0x31;
buf[3] = 0x23;
buf[4] = 0x52;
buf[5] = 0x43;
buf[6] = 0x53;
buf[7] = 0x58;
buf[8] = 0x30;
buf[9] = 0x30;
buf[10] = 0x30;
buf[11] = 0x30;
buf[12] = buf[0] ^ buf[1] ^  buf[2] ^  buf[3] ^  buf[4] ^  buf[5] ^  buf[6] ^  buf[7] ^  buf[8] ^  buf[9] ^  buf[10] ^  buf[11] ;
buf[13] = 0xD;
檢查碼就是0x1D; 4.你試試看把buf傳過去.看看有沒有回應.
JK53
一般會員


發表:5
回覆:8
積分:2
註冊:2003-12-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-01-12 14:07:37 IP:140.124.xxx.xxx 未訂閱
感謝您的說明,我將命令字串後面加上了char(13),PLC 終於就有回應了。 至於exclusive or ,原來就是使用^ 而已,我都不知道說。
系統時間:2024-04-30 0:29:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!