合肥市巢湖水源廠低壓配電房安裝了7臺(tái)型號(hào)為CD194E-2S4型電力儀表,通過RS485口,用雙屏蔽通訊線將它們與上位機(jī)連接起來,上位機(jī)選用的是研華工控機(jī)。上位機(jī)的通信軟件采用VB6.0的開發(fā)環(huán)境。一般用VB開發(fā)串行通信程序有兩種方法:一是利用Windows的通信API函數(shù);另一種是采用VB標(biāo)準(zhǔn)控件Mscomm來實(shí)現(xiàn)。利用API編寫串口通信程序較為復(fù)雜,需要掌握大量通信知識(shí),其優(yōu)點(diǎn)是可實(shí)現(xiàn)的功能更豐富、應(yīng)用面更廣泛,更適合于編寫較為復(fù)雜的低層次通信程序。VB通信控件Mscomm提供了功能完善的串口數(shù)據(jù)的發(fā)送和接收功能,Mscomm控件具有兩種處理方式:
1、事件驅(qū)動(dòng)方式:由Mscomm控件的OnComm事件捕獲并處理通信錯(cuò)誤及事件;
2、查詢方式:通過檢查CommEvent屬性的值來判斷事件和錯(cuò)誤。Mscomm控件的通信功能實(shí)現(xiàn),實(shí)際上是調(diào)用了API函數(shù),而API函數(shù)是由Comm.drv解釋并傳給設(shè)備驅(qū)動(dòng)程序執(zhí)行的,對(duì)于VB程序開發(fā)者只需知道Mscomm控件的屬性和事件的用法即可以實(shí)現(xiàn)串口的操作。不論采用哪種方法編寫的串行端口通信程序,一般都可分為以下幾個(gè)過程:
一、初始化串行端口
在初始化程序中,需要設(shè)定好整個(gè)幀結(jié)構(gòu)的命令數(shù)組、傳輸波特率、奇偶校驗(yàn)、停止位,開辟數(shù)據(jù)緩沖區(qū),完成一些必須的串口初始化設(shè)定。
二、數(shù)據(jù)傳輸
讀寫串行端口可分四種方式:查詢方式、同步I/O、異步(后臺(tái))I/O和事件驅(qū)動(dòng)I/O。命令字的發(fā)送應(yīng)該嚴(yán)格按照Modbus規(guī)約所設(shè)計(jì)的幀格式和上下位機(jī)在該規(guī)約基礎(chǔ)上所定義的通信協(xié)議來編程。
三、超時(shí)控制
為了防止意外情況使串口讀寫無休止地等待,必須在程序中設(shè)置超時(shí)控制。
四、CRC校驗(yàn)的實(shí)現(xiàn)
目前儀表類比較普遍采用的是CRC16校驗(yàn)碼。其生成多項(xiàng)式為X16+X15+X2+1。在算法實(shí)現(xiàn)上,可以先預(yù)置一個(gè)16位的寄存器FFFF(全1),然后把8位的2進(jìn)制數(shù)據(jù)(一個(gè)字節(jié))與16位的CRC寄存器低8位異或,并把結(jié)果放回CRC寄存器同時(shí)寄存器內(nèi)容右移,MSB補(bǔ)0,并檢查移出的LSB。如果LSB為0則繼續(xù)右移動(dòng),為1則CRC寄存器與多項(xiàng)式異或。重復(fù)上面操作到一個(gè)8bit字節(jié)完成,再繼續(xù)對(duì)下一個(gè)數(shù)據(jù)進(jìn)行相同處理,直到所有數(shù)據(jù)結(jié)束。這個(gè)時(shí)候CRC寄存器中的數(shù)據(jù)就是我們所要的CRC碼了。
下位機(jī)一般是使用固化好通信協(xié)議及工作指令的單片機(jī)。因?yàn)闇y(cè)控系統(tǒng)多采用的是單發(fā)多收的通信機(jī)制[4],所以在下位機(jī)要允許用戶預(yù)先設(shè)定本機(jī)的地址碼,并且保證不能重復(fù)。此外,要注意通信波特率必須與上位機(jī)的波特率相匹配。在下位機(jī)軟件開發(fā)中,要遵循Modbus規(guī)約的通信幀結(jié)構(gòu)對(duì)上位機(jī)傳輸?shù)拿钸M(jìn)行解析:非呼叫對(duì)象應(yīng)能及時(shí)重新恢復(fù)等待接受狀態(tài);響應(yīng)呼叫的下位機(jī)要解析命令代碼并進(jìn)行相應(yīng)的功能處理,對(duì)非法的命令操作要能回送報(bào)錯(cuò)信息。在具體的工程開發(fā)中,下位機(jī)多是采用各個(gè)廠家出產(chǎn)的基于Modbus規(guī)約的智能儀表。這樣雖然簡化了我們開發(fā)的工作量,但是下位機(jī)的合理安排與設(shè)計(jì)能降低系統(tǒng)誤碼率、提高可靠性。因此是每個(gè)工業(yè)系統(tǒng)設(shè)計(jì)人員所不應(yīng)該忽略的重要部分。在工業(yè)控制中,因?yàn)楦鞣N干擾源的存在且一般下位機(jī)數(shù)量較大,要對(duì)RS-485芯片選型有很認(rèn)真的考慮。條件許可的話盡量選用抗電擊和有較大級(jí)連驅(qū)動(dòng)能力的芯片。理論上485芯片的級(jí)連能力至少32門,目前很多芯片廠家都能使工業(yè)級(jí)的級(jí)連數(shù)達(dá)到128以上。在實(shí)際應(yīng)用中應(yīng)該讓系統(tǒng)具有一定的富余度,一般級(jí)連數(shù)不能超過該器件滿載的70%。在選配RS232到RS485轉(zhuǎn)換頭的時(shí)候也應(yīng)該盡量選用有源的轉(zhuǎn)換器,以提高驅(qū)動(dòng)能力和穩(wěn)定性。此外,工業(yè)現(xiàn)場(chǎng)的降噪、隔離、布線、屏蔽等等措施的合理<