close

三菱PLC RS232的模組是QJ71C24N-R2,當然還有其他的RS422/485(QJ71C24N-R4)

今天主要以RS232為主。

RS232 +-15V,RS422/485 0~5V

模組上的Neu.的燈號是指現在是MC Protocol的模式。

要與QJ71C24N通訊,有三種方式:

1.MC Protocol (Melsec Protocol)

2.Non Procedure Protocol(無通訊協定)

3.Bidirectional(雙向溝通)

 

1.MC Protocol:

通常是PC Base在寫的,透過Melsec定義的Format來連線存取三菱通訊模組的資料。

Format大概長的像下面那樣。

傳送的Format,接收的Format,異常時,Reply的Format。

MC Protocol Format  

至於怎麼知道Format是怎樣呢?

由下圖可知,C24可以使用3C或4C的Frame。

3C/4C的差異主要是4C支援多重CPU,如果沒用到的話,3C就可以了,可以減少資料量的傳遞。

4C的Format5可以支援用Binary Code在傳遞,不過個人還是認為用ASCII在PC Base上寫會比較直覺,不用在做值的運算。

詳細內容請參閱MC Protocol的User's Manual for RS232的部分。

 C24 Frame  

RS232 MC Protocol Format    

2.Non Procedure Protocol(無通訊協定)

通常以結束碼資料長度來設定資料傳遞結束

結束碼可由模組的Buffer Memery 165(CH1)/325(CH2)來設定(ODOAH是預設值,先收到ODH再收到OAH才對)

資料長度可由模組的Buffer Memery 164(CH1)/324(CH2)來設定(預設值是1FFH)

結束碼資料長度條件成立時,Xn3(CH1)/XnA(CH2)會On來表示。

再使用專用指令G.INPUT/G.OUTPUT來存取Buffer的資料。

P.S: 資料透過C24傳到對方的Buffer Memery內,等待存取,對方收到不會回ACK。

3.Bidirectional(雙向溝通)

專用指令G.BIDIN/G.BIDOUT

對方收到會回個ACK,類似TCP的概念。

-----我是分格線-----------------------------------------------------------------------

C24 Module Parameters的設定:

Switch1~2(CH1)

Switch3~4(CH2)

Switch5(CH1 & CH2)

所以只有用CH1的話,Switch3~4空白沒關係。

C24 Switch Setting  

依上圖,Switch1的Bit0~7參考下圖:

Bit05 On是For MC Protocal & Bidirectional Protocol在用的。

Switch1_Bit0~7  

LINK功能,可以把此模組,當成一個中繼站~
當CH1 (RS232) 收到信號時,會自動由CH2 (RS422/485)發出。
當CH2 (RS422/485) 收到信號時,會自動由CH1 (RS232) 發出。
不需另外寫程式~

如下圖:

Link Setting  

Switch1的Bit8~F參考下圖:

Switch1 Bit8~F  

Switch2的參考下圖:

Switch2  

Switch5是不管使用CH1和CH2都要設定,對方要通訊的站號。

OH~1FH

 

Buffer Memery常用的位置:

150(CH1)/310(CH2):傳送時,以Word(0)或Byte(1)為單位,預設是Word(0)

151(CH1)/311(CH2):CD Check是否要關閉,預設是No Check(1)

162(CH1):傳送區的起始位置,預設是400H

163(CH1):傳送區的長度,預設是200H

322(CH2):傳送區的起始位置,預設是800H

323(CH2):傳送區的長度,預設是200H

164(CH1):接收區的多少長度時Xn3會On,預設1FFH

324(CH2):接收區的多少長度時XnA會On,預設1FFH

165(CH1):收到結束碼時,Xn3會On,預設是0D0AH

325(CH2):收到結束碼時,XnA會On,預設是0D0AH

166(CH1):接收區的起始位置,預設是600H

326(CH2):接收區的起始位置,預設是A00H

167(CH1):接收區的長度,預設是200H

327(CH2):接收區的長度,預設是200H

168(CH1):當有Non Produce發生Shift時,可用此功能將每次讀取完後的位置,下次重頭開始讀,這樣就不會Shift了。

1.當用接收數量來判斷接收完成時,每次都要清除BUFFER旗標,不然當雜訊進來,所以資料會偏移。
2.如果是利用結束碼來判斷時,則只要把允許接收數量設定為2倍以上的接收數量,就不會有問題了。(不需去清除BUFFER旗標)

專用指令G.Input/G.Output

G.OUTPUT指令格式:G.OUTPUT Un S1 S2 D1

(不可跟ZP.CSET & G.INPUT 同時執行) S1=設定Channel NUMBER S1+1=Error code(系統回傳)

S1+2=發送數量(WORD(預設)/BYTE) (發送數量的單位,可以在96H(CH1)/136H(CH2)中來選擇~)

S2 發送資料的起始暫存器,發送的資料需連續。

D1 發送完畢信號(BIT)

D1+1=發送有錯誤。

以BYTE為單位,16BIT(2BYTE)暫存器,可存2個ASCII碼,會送出2次~

低8位元先送出:

例:D120=3031H ASCII先送1(31H),再送0(30H)

發送數量的單位,可以在96H(CH1)/136H(CH2)中來選擇~

96H=0,CH1,以WORD來算發送數量。

136H=1,CH2,以BYTE來算發送數量。

相同情形下,要發送D120的值=3031H ASCII=10

以WORD來算,要設定1

以BYTE來算,要設定2

程式範例:

G.OUTPUT  

G.INPUT指令格式:G.INPUT Un S D1 D2

(不可跟ZP.CSET & G.INPUT 同時執行)

S=Channel number。接收通道

S+1=回傳錯誤碼(by system)。

接收結果

S+2=接收到的資料筆數(by system)。

接收數據計數。

S+3=允許接收的資料筆數。

接收數據的允許數目。

D1=接收資料存放區

D2=接收完成(成功/失敗)(bit)

D2+1=接收失敗

X03/X0A=模組有接收到正常資料。

(CH1/CH2) X04/X0B=模組有接收到異常資料。

如果資料沒有被取走,信號會一直ON。 

可以利用這2個信號去觸發G.INPUT。

當G.INPUT讀取完成時X03/X0A,會馬上OFF。

這時候跟G.INPUT的完成信號(D2)有點時間差~

所以利用X03/X0A來呼叫副程式接受資料時,記得下降緣也再呼叫一次接收副程式。

否則因為X03/X0A OFF之後,D2會無法在副程式看到ON。

G.INPUT  

 ZP.CSET指令格式:ZP.CSET “Un” S1 S2 D1 D2

S1=Channel number

S2=0

S2+1=0正常。不等於0就是錯誤碼(by system)

S2+2=4接收資料區buffer旗標清除。(Receive data clear request)

S2+3 ~ S2+111

FOR SYSTEM USE

D1 沒有使用

D2 清除指令完成

D2+1 清除動作中有異常~

ZP.CSET  

D116=清除完成次數

D117=清除有異常 

PS:不建議使用

如需使用清除接收buffer區旗標,可以直接去清除位址~

CH1=168(A8H),CH2=328(148H)

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 蛋酒 的頭像
    蛋酒

    藍色代表憂鬱 那我代表什麼

    蛋酒 發表在 痞客邦 留言(1) 人氣()