文/周政尹
(無錫市第五人民醫(yī)院 江蘇省無錫市 214001)
TRMD 是一款成熟的電阻測量模塊,上位機(jī)可通過RS232 接口實(shí)時(shí)讀取電阻測量值。在一種實(shí)際工業(yè)應(yīng)用中,需要快速測量12 路被測體,要求在探針接觸被測體的200 毫秒時(shí)間內(nèi)至少讀取4次電阻值。串口通信在速率和并行處理方面都有一定局限性,本文對多路串口的并行處理進(jìn)行了研究,并設(shè)計(jì)開發(fā)了相應(yīng)的上位機(jī)軟件進(jìn)行試驗(yàn),達(dá)到了預(yù)期的測量效果。
本系統(tǒng)硬件部分采用12 個(gè)TRMD 電阻測量模塊,上位機(jī)采WINFORM 程序讀取測量值。在電阻測量過程中,被測體在流水線上定時(shí)滾動,測量探針通過機(jī)械裝置同頻率按壓被測體,測量模塊即在按壓過程中檢測到相應(yīng)的電阻值。由于電阻值會受探針和被測體接觸面的影響,因此在按壓過程中監(jiān)測到的電阻值是波動的。顯然,在探針剛接觸被測體的時(shí)候接觸面比較小,測到的電阻值會偏大,同理,在探針離開被測體的時(shí)候存在同樣的問題,理論上在探針穩(wěn)定按壓在被測體上的時(shí)候,測量值是最準(zhǔn)確的。因此在一次按壓過程中,要求電阻測量模塊快速讀取到多次電阻值,經(jīng)測算,從探針按壓被測體的200 毫秒時(shí)間內(nèi),假如能讀取4 次以上的值,我們認(rèn)為可以測量到相對準(zhǔn)確的值,我們?nèi)∑渲凶钚〉闹底鳛樽罴褱y量值。
一次測量過程如圖1 所示。
基于上述測原理。我們利用12 個(gè)TRMD 模塊來分別測量12路被測體,多路串口并發(fā)處理一般考慮用RS232 轉(zhuǎn)485 接口后接到上位機(jī),然后通過WINFORM 程序讀取。由于485 接口是串行處理的,在讀取12 路電阻值的時(shí)候,程序必須通過排隊(duì)的方式依次讀取。TRMD 模塊的理論讀取速度是40 次/秒,亦即每次耗時(shí)25ms,12 路的讀取時(shí)間為300ms,加上數(shù)據(jù)處理時(shí)間,則一次耗時(shí)在300ms 以上,顯然滿足不了實(shí)際應(yīng)用的速度。為此,考慮采用多路串口獨(dú)立連接上位機(jī)進(jìn)行并行處理的模式。
如圖2 所示,每個(gè)TRMD 模塊通過RS232 轉(zhuǎn)USB 轉(zhuǎn)接線獨(dú)立連接上位機(jī)的USB 集線器,這樣上位機(jī)(多核處理器)可以并行讀取每一路的電阻值。
圖1:一次測量過程
圖2:物理架構(gòu)圖
圖3:快速讀取過程
如上所述,在一次測量中探針從接觸被測體到離開被測體,由于接觸面積的變化,測量到的電阻值會變化,在這個(gè)過程中我們要求盡可能快速讀取多次電阻值,并取其中的最小值,這樣的測量結(jié)果就更精確。因此通信過程的設(shè)計(jì)目標(biāo)是在200ms 左右的探針接觸被測體時(shí)間內(nèi)既能保證通信質(zhì)量,有要提高讀取速度。這里我們采用“即到即發(fā)”的原則,即一旦接收到上一次數(shù)據(jù)則立即發(fā)送指令讀取下一個(gè)數(shù)據(jù)。
如圖3 所示,首次發(fā)送讀取指令后,DataReceive 事件監(jiān)測數(shù)據(jù)接收情況,一旦接收到數(shù)據(jù)則立即發(fā)送讀取指令。為防止通信中斷或異常,在數(shù)據(jù)接收超時(shí)的情況下通過計(jì)時(shí)器進(jìn)行補(bǔ)發(fā)指令。經(jīng)實(shí)驗(yàn)測試,每一路每秒可接收25 個(gè)左右數(shù)據(jù)包,且數(shù)據(jù)包未出現(xiàn)質(zhì)量異常(長度符合協(xié)議規(guī)定長度,CRC 校驗(yàn)正常)。
基于上述物理設(shè)計(jì)和通信設(shè)計(jì),我們設(shè)計(jì)了相應(yīng)的軟件模塊。針對多路獨(dú)立的測量通道,我們用獨(dú)立的軟件讀取模塊負(fù)責(zé)收發(fā)數(shù)據(jù),然后傳遞給主程序進(jìn)行數(shù)據(jù)處理。
如圖4 所示,各個(gè)子程序獨(dú)立連接相應(yīng)的TRMD 數(shù)據(jù)通道,快速讀取被測體電阻值后發(fā)送給主程序。主程序負(fù)責(zé)異步接收來自各個(gè)子程序的測量數(shù)據(jù),主程序的核心任務(wù)就是解析并處理這些數(shù)據(jù),主要分兩個(gè)環(huán)節(jié):計(jì)算最小值和判斷測量間隔。在程序中,我們定義兩個(gè)數(shù)組CURRENT[12]和LOWEST[12],分別用于保存當(dāng)前電阻值和最小電阻值。定義電阻無效值為IVAL,保存標(biāo)志位SAVED,以下偽代碼描述了這兩個(gè)環(huán)節(jié)的處理過程:
接收到來自第N 路數(shù)據(jù);
在實(shí)際開發(fā)過程中,我們將基于Windows 句柄的消息傳遞作為主程序和子程序之間的橋梁,兩者通過消息傳遞測量數(shù)據(jù),主程序通過消息控制子程序的通信情況。
按照上述設(shè)計(jì)開發(fā)了相應(yīng)的WINFORM 程序,并且對12 路的測量數(shù)據(jù)進(jìn)行了1 小時(shí)的數(shù)據(jù)監(jiān)測,分別接收到如圖5 所示的數(shù)據(jù)包數(shù)量,平均值超過88200 個(gè),即每秒讀取電阻值>24.5 次,在探針接觸被測體的200 毫秒內(nèi)理論測量次數(shù)為4.9 次,顯然滿足測量速度要求。
進(jìn)而我們對20 組被測樣品進(jìn)行試驗(yàn),分別測得測量值,后用標(biāo)準(zhǔn)萬用表經(jīng)手工測得相應(yīng)的標(biāo)準(zhǔn)值,經(jīng)對比,兩者之間誤差在10 毫歐以內(nèi),誤差率<5%,符合測量要求。如圖6 所示。
圖4:軟件程序架構(gòu)
圖5:一小時(shí)內(nèi)各路接收到的數(shù)據(jù)包
圖6:測量誤差對比
串口作為一種常用的串行通訊接口,由于其標(biāo)準(zhǔn)發(fā)布時(shí)間早、使用簡單,使其在工控和測量設(shè)備以及部分通信設(shè)備中有著廣泛的應(yīng)用。但是串口的低速率和串行處理的特性給一些應(yīng)用帶來了局限性,研究表明,只要合理制定通信機(jī)制和軟件處理流程,借助現(xiàn)今多核CPU 上位機(jī)的并行處理性能,仍可發(fā)揮串行通信設(shè)備的優(yōu)勢。