串列通訊模組 C24
接頭型式(RS232 or RS422/485)
型號
接頭
|
QJ
QJ
|
QJ
QJ
|
QJ
|
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線式,RS485是2線式
而RS422將SDA接到RDA、SDB接到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)
|
|
162(A2H)
|
322(142H)
|
傳出BUFFER區起始位址。預設CH1=400H/CH2=800H
|
163(A3H)
|
323(143H)
|
|
164(A4H)
|
324(144H)
|
接收長度。
|
165(A5H)
|
325(145H)
|
結束碼。預設0D
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=X03,CH2=X0A ,表示已經接收完成,同時會把BUFFER旗標歸0。
一般正常環境下來說,可以藉由接收數量來判斷是否已經接收完成~
但如果在雜訊進來的情形下,可以會導致多收一個字元進來~
所以如果利用接收數量來判斷是否完成時,最好每次都做BUFFER旗標清除的動作~
BUFFER旗標 CH1=A8H、CH2=148H
指示目前接收到的資料要放到那個位置上~
例:
正常情況下,只有收到10個BYTE(沒結束碼),所以以10BYTE為接收數量~
當雜訊產生,進來11個BYTE時:
C24收到10個BYTE,把接收信號(X03/X0A )觸發~
但第11個信號會被放第一個位置上~
如果下次接收開始前沒做旗標清除的動作,第二次的第一個BYTE就會被擺到第二個BYTE的位置上,而導致所有資料偏移。
相同情形如果發生在結束碼時,
因為是利用結束碼來當信號,
所以不管10個BYTE or 11個BYTE進來,都是以收到結束碼為觸發X03/X0A 的信號。所以只有在收到11個BYTE的當次,會有錯誤。
下一次不需清除旗標也會正常。
所以:
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)暫存器,可存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.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)
請問你規劃的PLC暫存器 D120、D200、D210 這些暫存是在哪邊進行規畫的?
回覆刪除自行定義的,你想定義在那邊都可以。沒有一定要在 D120、D200、D210
刪除重點是G.INPUT G.OUTPUT的使用
嗯..大大你好,我可能文章看得有問題...
回覆刪除你這是直接用ASCII碼做溝通的嗎???
那如果我要用BarCode Reader來讀取條碼的話,我是直接用G.INPUT 來控制?
目前用的條碼機 cino FM480 通訊是RS232
範例是ASCII沒錯。
刪除但這些指令,跟ASCII還有RTU無關丫!
G.INPUT是其實是把模組暫存區(600H)的資料,搬回到PLC。
如果有資料就會抓得到,沒資料就抓不到。
BarCode Reader應該是主動丟給模組C24,C24放在暫存區,
然後PLC再來抓資料。
建議您用modbus的模組跟BarCode Reader會比較簡單。
您好,請問
回覆刪除如果是溫溼度計 (rs485 RTU)與c24 連線,通訊格式如下
發送命令(16進位):
站號01 命令03 參數位置00 00 讀取長度00 02 CRC檢查碼C4 0B
回傳命令(16進位):
站號01 命令03 回傳長度04 回傳數值010F 01EF
如果是這樣,PLC要如何讀取呢?用甚麼指令呢?
1.發送用G.OUTPUT
刪除接收用G.INPUT
我之前是用C24(沒有MODBUS)的,所以才用這些指令,
如果用有支援MODBUS的會比較簡單。
謝謝您的回覆
刪除再請問
1.如果以上面的通訊格式用G.OUTPUT 及G.INPUT該如何寫
看了您的範例還是試不出來
2."如果用有支援MODBUS的會比較簡單。"這句話是指用qj71mb91模組嗎?
如果有2站溫度計,那G.OUTPUT 與G.INPUT該如何寫?看範例似乎也沒有站號寫法
刪除https://vkinngworld.blogspot.com/2016/04/dvp-plc-modbus.html#more
刪除其實G.OUTPUT 與G.INPUT是要自已把資料組合好,所以站號是包在資料裡。
可以看上面那篇rs指令的用法. 是要自已組好的,
非常不建議這樣用,非常不好用。
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.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的設備,有其他更好的用的指令,不用這麼麻煩。