我在Form_load时,加载MSComm控件的基本属性:端口号,setting,缓存区大小等等
在点击Command按钮时,打开端口,发送数据
在CommEvent=2时,接收数据
请教,我不想再用一个command来关闭端口,想在一次通讯完成后,或者通讯故障时关闭端口,并清空缓存区里的数据。我该怎么做?也就是说,什么事件或者什么标志了通讯完成或通讯错误,可以关闭端口、清空缓存取得数据了?请指点,谢谢!
在点击Command按钮时,打开端口,发送数据
在CommEvent=2时,接收数据
请教,我不想再用一个command来关闭端口,想在一次通讯完成后,或者通讯故障时关闭端口,并清空缓存区里的数据。我该怎么做?也就是说,什么事件或者什么标志了通讯完成或通讯错误,可以关闭端口、清空缓存取得数据了?请指点,谢谢!
解决方案 »
- 数据库和日期相关的限制修改问题
- 请问怎么样才能将VB编的软件在启动后不出现在WINDOWS任务管理器的应用程序列表框中?
- 一个关于截取字符串的问题。
- Crystal Report 7 英文版哪里下载
- 请教高手?
- 一个有关DOS的问题,@@来答者有分呀@@@@@@@@@@@@@@@@@@2
- 郁闷!有谁买过《程序员大本营3.0_.NET》和《网络开发》说说看法!
- 如何把长整型的数转化为二进制的字符串?
- 谁能告诉我,如果用VC或VB做一个FLASH播放器。。
- 程序在按下CTRL+ALT+DEL后不可见用RegisterServiceProcess函数,但在win2000下无此函数,怎么办?
- 请教小程序
- OSI process book
上述可在同一按钮click事件中执行.
如果处理错误,则用on error goto 来处理。
当发生通讯错误时,通常是硬件故障,并不能通过软件进行排除,所以程序只需要等待硬件故障的排除。
最多将当前已收到的不完整数据清除,你可以设置 InBufferCount = 0 直接清除接收缓冲区。
必要时用 OutBufferCount = 0 将输出缓冲区也清一下。
设备情况是:计算机通过串口和一台很老式打印机通讯,我按照打印机的命令格式给他发指令和打印内容。打印机接收数据后返回几种不同的数据,有的表示接收成功,有的表示接受失败。
我的vb程序设计是:(发帖子的目的就是不清楚自己什么时候关闭端口,和关闭端口的时候要做点什么)
1、界面:text1作为发送文本框。Command1作为发送按钮。text2作为接收文本框。再加上MSComm控件。2、Form_load事件,加载:
MSComm1.CommPort=4
MSComm1.Setting="9600,e,8,1"
MSComm1.InputMode=0
MSComm1.InBufferSize=1024
MSComm1.InBufferCount=0
MSComm1.RThreshold=1MSComm1.OutBufferSize=512
MSComm1.OutBufferCount=0
MSComm1.Sthreshold=1
End Sub3、Command_click事件:
If MSComm1.PortOPen Then
MSComm1.Output=text1 (假设text1已经做过了数据处理,满足喷印机要求的格式,以及偶校验)
Else
MSComm1.PortOPen=True
MSComm1.Output=text1.text
End Sub4、MSComm1_OnComm事件:问题主要在这里
Select Case MSComm1.CommEvent
Case comEvSend (由于前面MSComm1.Sthreshold=1)
MsgBox"发送数据完毕"
Case comEvReceive(由于前面MSComm1.Rthreshold=1)
MSComm1.InputLen=0
abc=MSComm1.Input
a()=abc
做一些处理,将接收内容放进text2中
MSComm1.PortOPen=False (参考3楼的意见,接收成功或者失败都关闭端口)
MSComm1.InBufferCount=0
MSComm1.OutBufferCount=0 (关闭端口时,是不是要清空缓存区数据,还要做其他事情吗?)
Case 其他错误省略
MsgBox"失败"
MSComm1.PortOPen=False (参考3楼的意见,接收成功或者失败都关闭端口)
MSComm1.InBufferCount=0
MSComm1.OutBufferCount=0 (关闭端口时,是不是要清空缓存区数据,还要做其他事情吗?)
End Select
End Sub这样设计可不可以?请大家指点一下,初次使用这个空间,看了一些资料了但是心里没把握。
1)OnComm事件中不要使用MsgBox消息,会干扰串口通信.
2)设置 PortOpen 属性为 True 打开端口。设置为 False 关闭端口并清除接收和传输缓冲区。当应用程序终止时,MSComm 控件自动关闭串行端口。
如果不是需要切换到其他程序进行打印机操作,不停开关端口并不能特别的任何好处。
你只要管好两个缓冲区就行了:
Sthreshold=1 虽然每发送一个字节都有 OnComm 事件,但是只要检查 OutBufferCount 是否为 0 就能判断是否全部发送。
Rthreshold=1 虽然每接收一个字节都有 OnComm 事件,但是只要检查 InBufferCount 就能判断是否收到了预期长度的回复。