首先解析什么是PLC主機(jī)與RS-485總線驅(qū)動(dòng)器之間的通信協(xié)議?
通信是基于常用的ASCII字符集傳輸使用,通過RS-485或RS-422硬件接口的標(biāo)準(zhǔn)UARTs。
我們使用以下設(shè)置來操作uart: 1個(gè)起始位、8個(gè)數(shù)據(jù)位、0 (no)奇偶校驗(yàn)位和1個(gè)停止位。從主機(jī)到驅(qū)動(dòng)器的命令包的基本結(jié)構(gòu)總是一個(gè)文本字符串,后面跟著一個(gè)回車。文本字符串總是由命令本身組成,后面跟著命令使用的任何參數(shù)?;剀嚤硎緜鬏?shù)津?qū)動(dòng)器的結(jié)束。 下面是基本語法。
YXXAB < \ r >
在上面的語法中,“Y”表示驅(qū)動(dòng)器的RS-485地址,這是RS-485網(wǎng)絡(luò)所需要的?!?/span>XX”表示命令本身,它總是由兩個(gè)大寫字母組成?!?/span>A”表示兩個(gè)可能參數(shù)中的第一個(gè),“B”表示第二個(gè)。
參數(shù)1和2的長度不同,可以是字母或數(shù)字,而且通常是可選的?!?/span><\r>”表示終止命令字符串的回車。如何在應(yīng)用程序中生成回車將取決于您的主機(jī)軟件。如果驅(qū)動(dòng)器在一個(gè)命令結(jié)束時(shí)沒有收到回車,它將響應(yīng)' ?1 '顯示接收命令超時(shí)錯(cuò)誤。
一旦驅(qū)動(dòng)器接收到<\r>,它將決定是否理解
將前面的字符作為有效命令。如果它確實(shí)理解該命令,驅(qū)動(dòng)器將執(zhí)行或緩沖該命令。如果打開Ack/Nack(設(shè)置了PR bit2),驅(qū)動(dòng)器還將向主機(jī)發(fā)送一個(gè)確認(rèn)字符(Ack)。執(zhí)行的命令的Ack是%(百分號(hào)),緩沖的命令的Ack是*(星號(hào))。
通常建議用戶程序在發(fā)送后續(xù)命令之前等待ACK/NACK字符。例如,主機(jī)發(fā)送“1CC1”,驅(qū)動(dòng)器(節(jié)點(diǎn)地址為“1”)接收到有效的并返回一個(gè)確認(rèn)字符(Ack)“%”給主機(jī)。主機(jī)需要先確認(rèn)確認(rèn)字符“%”,然后才能發(fā)出下一個(gè)命令。如果主機(jī)沒有收到任何響應(yīng),或接收到未確認(rèn)的字符(Nack) ' ?n ' response (n=1…14),表示發(fā)生了錯(cuò)誤。主機(jī)需要處理異常情況,檢查報(bào)警代碼,狀態(tài)代碼并修復(fù)錯(cuò)誤。如果誤差是固定的,清除后,可以再次傳輸前面的命令,直到主機(jī)從驅(qū)動(dòng)器獲得正確的響應(yīng)。然后主機(jī)可以發(fā)送下一個(gè)命令。
以下是推薦的主機(jī)與RS-485總線驅(qū)動(dòng)器之間的通信機(jī)制例程:
Step1:主機(jī)發(fā)出指令驅(qū)動(dòng)RS-485地址;
Step2:在RS-485網(wǎng)絡(luò)中驅(qū)動(dòng)專用RS-485地址接收命令,響應(yīng)Ack/Nack到主機(jī)。然后立即執(zhí)行或緩沖命令;
Step3:主機(jī)等待來自專用RS-485地址的驅(qū)動(dòng)器響應(yīng);如果主機(jī)在用戶程序定義的超時(shí)期間沒有接收到任何響應(yīng),則可以再次傳輸前面的命令,直到主機(jī)收到響應(yīng)為止。
Step4:主機(jī)接收到響應(yīng)后,用RS-485地址和Ack /納反應(yīng);如果地址不正確,忽略響應(yīng)并等待下一個(gè)響應(yīng)。
Step5:如果RS-485地址正確,收到Ack,經(jīng)過一段適當(dāng)?shù)难訒r(shí)時(shí)間后,主機(jī)可以發(fā)出下一條命令;
Step6:如果RS-485地址正確,但接收到Nack,主機(jī)需要處理異常情況,檢查報(bào)警碼、狀態(tài)碼并修復(fù)錯(cuò)誤。如果錯(cuò)誤已修復(fù)并清除,則可以再次傳輸前面的命令,直到主機(jī)從驅(qū)動(dòng)器獲得正確的響應(yīng)。然后主機(jī)可以發(fā)出下一個(gè)命令;
如果驅(qū)動(dòng)器不理解命令,它將什么也不做。如果Ack/Nack打開,將發(fā)送一個(gè)Nack,它的意思是a ?(問號(hào))。Nack通常是與表示特定錯(cuò)誤的數(shù)字代碼一起。
驅(qū)動(dòng)器的響應(yīng)將以類似的語法發(fā)送到關(guān)聯(lián)的SCL命令。
YXX = < \ r >
在上面的語法中,“Y”表示驅(qū)動(dòng)器的RS-485地址,這是RS-485網(wǎng)絡(luò)所需要的。“XX”表示命令本身,它總是由兩個(gè)大寫字母組成?!?/span>A”表示所請(qǐng)求的數(shù)據(jù),可用十進(jìn)制(IFD)或
十六進(jìn)制格式(IFH)?!?/span><\r>”表示終止響應(yīng)字符串的回車。