VB6使用API实现串口通信.doc
《VB6使用API实现串口通信.doc》由会员分享,可在线阅读,更多相关《VB6使用API实现串口通信.doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、.需要和客户的产品通讯,但波特率是非常规的,MScomm无法实现,原有的软件框架和条件又不能转用VC开发底层,于是用VB6调用API实现了这个通讯功能,虽然在VB6下这个程序还是单进程的,但实现了异步非阻塞的通信,性能相当稳定,下面是测试程序代码 Private Sub cmdSend_Click()Sub cmdSend_Click() 定义文件读写属性结构 Dim sa As SECURITY_ATTRIBUTES 定义串口状态结构 Dim typCommStat As COMSTAT 定义串口状态错误 Dim lngError As Long *打开串口* Dim hCF As Long
2、 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 As Long errNum = GetLastError() Debug.Print 出错信息: & errNum 定义标志值 Dim flag As Long 定义设备控制块 Dim typDCB As DCB *获取设备控制块* flag =
3、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.Prin
4、t 设置缓冲区: & 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
5、 一个读操作的时间常数 typCommTimeouts.ReadTotalTimeoutConstant = 0 读超时常数 typCommTimeouts.WriteTotalTimeoutMultiplier = 0 一个写操作的时间常数(为0表示不使用该超时间隔) typCommTimeouts.WriteTotalTimeoutConstant = 0 写超时常数(为0表示不使用该超时间隔) *超时设置* flag = SetCommTimeouts(hCF, typCommTimeouts) Debug.Print 超时设置: & flag *发送数据* 定义要发送字节数 Dim l
6、ngNumberofBytesToWrite As Long 定义实际发送字节数 Dim lngNumberofBytesToWritten As Long 定义重叠结构体 Dim typOverLapped As OVERLAPPED 定义发送数据 Dim arrbytTest(0 To 23) As Byte 载波收发器同步头 arrbytTest(0) = CByte(&H53) arrbytTest(1) = CByte(&H4E) arrbytTest(2) = CByte(&H44) 后续数据包长度 arrbytTest(3) = CByte(&H14) 载波表预同步头 arrby
7、tTest(4) = CByte(&HFF) arrbytTest(5) = CByte(&HFF) arrbytTest(6) = CByte(&HFF) arrbytTest(7) = CByte(&HFF) arrbytTest(8) = CByte(&HFF) arrbytTest(9) = CByte(&HFF) 载波表帧同步头 arrbytTest(10) = CByte(&H9) arrbytTest(11) = CByte(&HAF) 载波表地址 arrbytTest(12) = CByte(&H59) arrbytTest(13) = CByte(&H20) arrbytTe
8、st(14) = CByte(&H0) 控制码 arrbytTest(15) = CByte(&H1) 数据长度 arrbytTest(16) = CByte(&H5) 功能码 arrbytTest(17) = CByte(&H10) arrbytTest(18) = CByte(&H90) 集中器地址 arrbytTest(19) = CByte(&HBB) arrbytTest(20) = CByte(&HBB) arrbytTest(21) = CByte(&HBB) 校验和 arrbytTest(22) = CByte(&H50) arrbytTest(23) = CByte(&H3)
9、获取要发送字节数 lngNumberofBytesToWrite = UBound(arrbytTest) + 1 声明等待开始时间、结束时间值 Dim writeStarTime, writeEndTime As Long writeStarTime = GetTickCount() Debug.Print 发送开始时间: & writeStarTime 定义发送循环步长值 Dim i As Integer 定义累计发送字节数 Dim intTotalNumberOfBytesToWritten As Integer 定义发送间隔时间(毫秒) Dim intIntervalTime As I
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vb6 使用 api 实现 串口 通信 通讯
限制150内