PrivateSub cmdSend_Click()Sub cmdSend_Click() '定义文件读写属性结构 Dim sa As SECURITY_ATTRIBUTES '定义串口状态结构 Dim typCommStat As COMSTAT '定义串口状态错误 Dim lngError AsLong '********打开串口******** Dim hCF AsLong hCF = CreateFile("COM4", _ GENERIC_READ Or GENERIC_WRITE, 0, sa, _ OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL Or FILE_FLAG_OVERLAPPED, 0) Debug.Print "打开串口:"& hCF '********获取出错信息******** Dim errNum AsLong errNum = GetLastError() Debug.Print "出错信息:"& errNum '定义标志值 Dim flag AsLong '定义设备控制块 Dim typDCB As DCB '********获取设备控制块******** flag = GetCommState(hCF, typDCB) Debug.Print "获取串口DCB:"& flag typDCB.BaudRate =2500'定义波特率 typDCB.Parity = NOPARITY '无校验位 typDCB.ByteSize =8'数据位 typDCB.StopBits =0'停止位 0/1/2 = 1/1.5/2 '********设置串口参数******** flag = SetCommState(hCF, typDCB) Debug.Print "设置串口参数:"& flag '********设置缓冲区大小******** flag = SetupComm(hCF, 1024, 1024) 'Debug.Print "设置缓冲区:" & flag '********清空读写缓冲区******** flag = PurgeComm(hCF, PURGE_RXABORT Or PURGE_RXCLEAR Or PURGE_TXABORT Or PURGE_TXCLEAR) 'Debug.Print "强制清空缓冲区:" & flag '定义超时结构体 Dim typCommTimeouts As COMMTIMEOUTS typCommTimeouts.ReadIntervalTimeout =0'相邻两字节读取最大时间间隔(为0表示不使用该超时间隔) typCommTimeouts.ReadTotalTimeoutMultiplier =0'一个读操作的时间常数 typCommTimeouts.ReadTotalTimeoutConstant =0'读超时常数 typCommTimeouts.WriteTotalTimeoutMultiplier =
需要和客户的产品通讯,但波特率是非常规的,MScomm无法实现,原有的软件框架和条件又不能转用VC开发底层,于是用VB6调用API实现了这个通讯功能,虽然在VB6下这个程序还是单进程的,但实现了异步非阻塞的通信,性能相当稳定,下面是测试程序代码 Private Sub cmdSend_Click()Sub cmdSend_Click() 定义文件读写属性结构 Di