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