請問關於使用RS232 做PLC 通訊的問題 |
尚未結案
|
JK53
一般會員 發表:5 回覆:8 積分:2 註冊:2003-12-27 發送簡訊給我 |
我所使用的是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 發送簡訊給我 |
|
JK53
一般會員 發表:5 回覆:8 積分:2 註冊:2003-12-27 發送簡訊給我 |
感謝您的回應,但有些問題我還是不懂‧‧‧ (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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |