在主程序中完成对系统、PDIUSBD12的初始化,以及完成对d12的枚举,将数据的发送接收都放在中断程序中。PDIUSBD12有3组端点,使用默认端点0和端点2。将端点2作为数据传输的通道,当PDIUSBD12从USB收到一个数据包时,就对CPU产生一个外部中断请求,CPU立即相应中断,在中断服务子程序中,将数据包从PDIUSBD12内部缓冲区移到循环数据缓冲区中,随后清零PDIUSBD12的内部缓冲区,对数据校验,如果接收得数据正确,直接调用RS485数据发送子程序,将数据发送到RS485网络。
3.3 计算机软件设计:
计算机软件主要包括,驱动的设计,动态连接库的设计。驱动程序采用飞利浦提供的驱动,上位机程序使用api函数并封装RS485总线的上层协议,提供给用户使用的接口。本例采用VC编写用户程序和动态连接库。从驱动中读数据的程序如下,
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);
}
在使用这个函数的时候,只需要添加如下说明。
extern "C" DllImport void readdata ( unsigned char * );
4 结 论
由于采用了USB总线,克服了原来使用RS232接口速度慢的瓶颈,提高了远程抄表系统的数据传输速率,该方案已经成功的得到应用,稳定可靠,有广阔的应用前景。