USB總線(xiàn)在遠程抄表系統中的應用
在主程序中完成對系統、PDIUSBD12的初始化,以及完成對d12的枚舉,將數據的發(fā)送接收都放在中斷程序中。PDIUSBD12有3組端點(diǎn),使用默認端點(diǎn)0和端點(diǎn)2。將端點(diǎn)2作為數據傳輸的通道,當PDIUSBD12從USB收到一個(gè)數據包時(shí),就對CPU產(chǎn)生一個(gè)外部中斷請求,CPU立即相應中斷,在中斷服務(wù)子程序中,將數據包從PDIUSBD12內部緩沖區移到循環(huán)數據緩沖區中,隨后清零PDIUSBD12的內部緩沖區,對數據校驗,如果接收得數據正確,直接調用RS485數據發(fā)送子程序,將數據發(fā)送到RS485網(wǎng)絡(luò )。
3.3 計算機軟件設計:
計算機軟件主要包括,驅動(dòng)的設計,動(dòng)態(tài)連接庫的設計。驅動(dòng)程序采用飛利浦提供的驅動(dòng),上位機程序使用api函數并封裝RS485總線(xiàn)的上層協(xié)議,提供給用戶(hù)使用的接口。本例采用VC編寫(xiě)用戶(hù)程序和動(dòng)態(tài)連接庫。從驅動(dòng)中讀數據的程序如下,
void readdata(unsigned char *rec)
{ unsigned char outbuf[105];
HANDLE hFile, hDevice=0;
BOOL bResult;
ULONG nBytes = 25;
hFile = open_file(PIPE02);
if(hFile == INVALID_HANDLE_VALUE)
{return;}
hDevice = open_dev();
bResult = ReadFile(hFile,outbuf,10,nBytes,NULL);
if(bResult==FALSE)
{ DeviceIoControl(hFile,IOCTL_D12_RESET_PIPE,0,0,0,0,nBytes,NULL); }
CloseHandle(hFile);
CloseHandle(hDevice);
}
在使用這個(gè)函數的時(shí)候,只需要添加如下說(shuō)明。
extern C DllImport void readdata ( unsigned char * );
4 結 論
由于采用了USB總線(xiàn),克服了原來(lái)使用RS232接口速度慢的瓶頸,提高了遠程抄表系統的數據傳輸速率,該方案已經(jīng)成功的得到應用,穩定可靠,有廣闊的應用前景。
評論