2014年9月25日 星期四

串列通訊模組 QJ71C24

串列通訊模組  C24

G.INPUT 指令說明(讀入接收的資料)
G.OPUT 指令說明(傳出暫存器的資料)
ZP.CSET 指令說明  清除接收區的BUFFER旗標(不建議使用)



接頭型式(RS232 or RS422/485)

     型號
接頭
QJ71C24
QJ71C24N
QJ71C24N-R2
QJ71C24-R2
QJ71C24N-R4
CH1
RS-232
RS-232
RS-422/485
CH2
RS-422/485
RS-232
RS-422/485
1.傳輸速度C24N最快可達230400bps(只有ch1)
2.CH1+CH2傳輸速率最大230400例:ch1=230400時,ch2只能=0
3.monitoning模式,最快只有115200(ch1+ch2)













RS232 長度MAX 15
RS422/485長度MAX 1200

RS422 & RS485的差別:

在本質上RS422是屬於4線式,RS4852線式
RS422SDA接到RDASDB接到RDB。由SDA&SDB接外部裝置~也是2線式~
PS:如果RS422接用此接法時,當傳送資料時,模組本身會收到自已發出的資料。





RS232 PIN1 CD接腳說明:

CD=Carrier detect 傳送檢查功能,當有資料要接收時,CD要收到ON的信號。
CD功能可以在ADDRESS 151/311中去設定關閉/開啟。
接法:






模組輸入輸出點 (X/Y)


X0
CH1傳送正常
Y0
CH1傳送要求
X1
CH1傳送發生異常
Y1
CH1接收要求
X2
CH1傳送中
Y2
CH1模式切換
X3
CH1接收正常完成
Y3
禁止使用
X4
CH1接收異常
Y4
X5
FOR SYSTEM
Y5
X6
模式切換(NO USE)
Y6
X7
CH2傳送正常
Y7
CH1傳送要求
X8
CH2傳送發生異常
Y8
CH1接收要求
X9
CH2傳送中
Y9
CH1模式切換
XA
CH2接收正常完成
YA
禁止使用
XB
CH2接收異常
YB
XC
FOR SYSTEM
YC
XD
模式切換(NO USE)
YD
XE
CH1異常發生
YE
CH1 異常清除
XF
CH2異常發生
YF
CH2 異常清除
X1E
READY~
Y1E


PS:當使用G.input & G.output指令時,就不需要使用傳送/接收要求的Y接點。






Switch設定

1.      如果是對應其他三菱系列的產品,無所調整switch,即可連線~
CH1=switch 1,CH2=switch 3
b7
b6
b5
b4
b3
b2
b1
b0









CH1 SIDE








CH2 SIDE
bit
功能說明
OFF(0)
ON(1)
註解
b0
operation setting
獨立
LINK
CH1 always off
b1
data bit
7
8

b2
parity bit
no
yes

b3
even/odd parity
odd
even

b4
stop bit
1
2

b5
sum check code
no
yes

b6
write duning RUN
prohibited
allowed

b7
模式切換
prohibited
allowed
always off











b5=sum check用於MC Protocol & Bidirectional Protocol

Communication rate
(Unit:bps)
Bit position
Communication rate
(Unit:bps)
Bit position
b15~b8
b15~b8
50
0FH
14400
06H
300
00H
19200
07H
600
01H
28800
08H
1200
02H
38400
09H
2400
03H
57600
0AH
4800
04H
115200
0BH
9600
05H
230400
0CH











建議使用9600,雜訊較少~

SWITCH 2 & 4 設定
set number
說明
0H

1H
MC protocol
2H
Format 2
3H
Format 3
4H
Format 4
5H
Format 5
6H
Non procedure protocol
7H
Bidirectional protocol
8H
For linked operation

switch5 設定站號。MAX=1FH



MC protocol & Non procedure protocol & bidirectional protocol

MC protocol 屬於三菱本身的通訊協定~
可參照Communication Protocol Reference Manual 手冊,3-13頁開始有格式
如果跟個人電腦連絡,也可使用此格式。

Non procedure protocol 沒有任何定義。
適合MODBUS使用~與一般外部裝置連結~

bidirectional protocol 屬於2向溝通的協定~



data bit  7 or 8的差異~

資料內容的差異:
Data bit = 7時,只能表現出0-127(00H-7FH)的數值。
Data bit = 8時,就可以表現在0-255(00H-FFH)的數值。

傳輸速度的差異:
當資料大的時候,Data bit=8,明顯會比7的慢。

如果是以ASCII碼在使送時,建議使用7位元就好~
因為ASCII數值到127就夠用了~





模組參數位址設定

CH1
CH2
功能說明
150(96H)
310(136H)
傳送資料,以0=WORD / 1=BYTE為單位
151(96H)
311(137H)
CD檢測功能。預設=1關。  0=開。 for Rs-232
162(A2H)
322(142H)
傳出BUFFER區起始位址。預設CH1=400H/CH2=800H
163(A3H)
323(143H)
傳出BUFFER區的大小。預設200H
164(A4H)
324(144H)
接收長度。
165(A5H)
325(145H)
結束碼。預設0D0AH 設定範圍00H~FFH
FFFFH=NO USE
166(A6H)
326(146H)
接收BUFFER區起始位址。預設CH1=600H/CH2=A00H
167(A7H)
327(147H)
接收BUFFER區的大小。預設200H
168(A8H)
328(148H)
接收BUFFER區旗標。
***直接清除此參數,可達到CSET的功能。


*下面表示的位址為預設值,可以上表中去修改~
CH1
CH2
功能說明
1024(400H)
2048(800H)
傳送資料數量
1025~1535
(401H~5FFH)
2049~2559
(801H~9FFH)
傳送資料暫存區
1536(600H)
2560(A00H)
接收資料數量
1537~2047
(601H~7FFH)
2561~3071
(A01H~BFFH)
接收資料暫存區





LINK功能說明


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

示意圖:
CH1有信號進來時,LINK功能會自動轉由CH2出去~C24模組本身還是可以取到信號







接收數量&結束碼


C24模組遇到接收數量到達或收到結束碼時,都會將接收完成信號觸發~
CH1=X03CH2=X0A,表示已經接收完成,同時會把BUFFER旗標歸0

一般正常環境下來說,可以藉由接收數量來判斷是否已經接收完成~
但如果在雜訊進來的情形下,可以會導致多收一個字元進來~
所以如果利用接收數量來判斷是否完成時,最好每次都做BUFFER旗標清除的動作~

BUFFER旗標  CH1=A8HCH2=148H
指示目前接收到的資料要放到那個位置上~

例:
正常情況下,只有收到10BYTE(沒結束碼),所以以10BYTE為接收數量~
當雜訊產生,進來11BYTE
C24收到10BYTE,把接收信號(X03/X0A)觸發~
但第11個信號會被放第一個位置上~
如果下次接收開始前沒做旗標清除的動作,第二次的第一個BYTE就會被擺到第二個BYTE的位置上,而導致所有資料偏移。

相同情形如果發生在結束碼時,
因為是利用結束碼來當信號,
所以不管10BYTE or 11BYTE進來,都是以收到結束碼為觸發X03/X0A的信號。所以只有在收到11BYTE的當次,會有錯誤。
下一次不需清除旗標也會正常。

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





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)暫存器,可存2ASCII碼,會送出2~
8位元先送出:
例:D120=3031H èASCIIè先送1(31H),再送0(30H)
========
發送數量的單位,可以在96H(CH1)/136H(CH2)中來選擇~
96H=0CH1,以WORD來算發送數量。
136H=1CH2,以BYTE來算發送數量。

相同情形下,要發送D120的值=3031H  ASCII=10
WORD來算,要設定1
BYTE來算,要設定2
範例程式:






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

範例程式:






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 清除動作中有異常~


範例程式:


D116=清除完成次數
D117=清除有異常

PS:不建議使用
如需使用清除接收buffer區旗標,可以直接去清除位址~
CH1=168(A8H)CH2=328(148H)


11 則留言:

  1. 請問你規劃的PLC暫存器 D120、D200、D210 這些暫存是在哪邊進行規畫的?

    回覆刪除
    回覆
    1. 自行定義的,你想定義在那邊都可以。沒有一定要在 D120、D200、D210
      重點是G.INPUT G.OUTPUT的使用

      刪除
  2. 嗯..大大你好,我可能文章看得有問題...
    你這是直接用ASCII碼做溝通的嗎???

    那如果我要用BarCode Reader來讀取條碼的話,我是直接用G.INPUT 來控制?
    目前用的條碼機 cino FM480 通訊是RS232

    回覆刪除
    回覆
    1. 範例是ASCII沒錯。
      但這些指令,跟ASCII還有RTU無關丫!

      G.INPUT是其實是把模組暫存區(600H)的資料,搬回到PLC。
      如果有資料就會抓得到,沒資料就抓不到。

      BarCode Reader應該是主動丟給模組C24,C24放在暫存區,
      然後PLC再來抓資料。

      建議您用modbus的模組跟BarCode Reader會比較簡單。

      刪除
  3. 您好,請問
    如果是溫溼度計 (rs485 RTU)與c24 連線,通訊格式如下

    發送命令(16進位):
    站號01 命令03 參數位置00 00 讀取長度00 02 CRC檢查碼C4 0B
    回傳命令(16進位):
    站號01 命令03 回傳長度04 回傳數值010F 01EF

    如果是這樣,PLC要如何讀取呢?用甚麼指令呢?

    回覆刪除
    回覆
    1. 1.發送用G.OUTPUT
      接收用G.INPUT

      我之前是用C24(沒有MODBUS)的,所以才用這些指令,
      如果用有支援MODBUS的會比較簡單。

      刪除
    2. 謝謝您的回覆
      再請問
      1.如果以上面的通訊格式用G.OUTPUT 及G.INPUT該如何寫
      看了您的範例還是試不出來
      2."如果用有支援MODBUS的會比較簡單。"這句話是指用qj71mb91模組嗎?

      刪除
    3. 如果有2站溫度計,那G.OUTPUT 與G.INPUT該如何寫?看範例似乎也沒有站號寫法

      刪除
    4. https://vkinngworld.blogspot.com/2016/04/dvp-plc-modbus.html#more

      其實G.OUTPUT 與G.INPUT是要自已把資料組合好,所以站號是包在資料裡。
      可以看上面那篇rs指令的用法. 是要自已組好的,

      非常不建議這樣用,非常不好用。

      刪除
  4. 1. X/Y I/O為何與手冊查的有不同?
    2. 當G.INPUT讀取完成時X03/X0A,會馬上OFF。
    這時候跟G.INPUT的完成信號(D2)有點時間差~
    所以利用X03/X0A來呼叫副程式接受資料時,
    記得下降緣也再呼叫一次接收副程式。
    否則因為X03/X0A OFF之後,D2會無法在副程式看到ON。=>這句話不是很懂
    3. 查收手冊還有結束碼?這範例結束碼是否要有,X0A才會ON導通接收資料?

    回覆刪除
    回覆
    1. 1.X/Y 我也是查手冊的,難道你的手冊跟我的不同?可以提供分享一下。
      而且在寫這篇文章時,也是應用在設備上,應該不太可能有錯。

      2.如果是用「X03/X0A來呼叫副程式接受資料」,
      就表示X03/X0A OFF後,就不會進副程式了。
      而D2(D2=接收完成(成功/失敗)(bit))是在 X03/X0A OFF後,才會有資料。

      以時序圖來說,是X03/X0A OFF的時間點,D2才ON。
      這邊只是提醒自已曾遇到的問題。

      3.文章裡有提到,是用「結束碼」或「資料數量」,都會觸發X03/X0A ON。

      X03/X0A ON ,只是個信號,告訴PLC可以來收資料了。
      真正收資料的動作,是G.INPUT

      這篇是應用在非MODBUS的設備上的應用,
      如果是MODBUS的設備,有其他更好的用的指令,不用這麼麻煩。

      刪除