首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

MSCOMM控件怎样设定两次停止位解决办法

2012-02-29 
MSCOMM控件怎样设定两次停止位请各位大侠指点:现有一个程序要用串口控制一台设备,要求发送格式为,2400、E、8

MSCOMM控件怎样设定两次停止位
请各位大侠指点:
现有一个程序要用串口控制一台设备,要求发送格式为,2400、E、8、2
接收格式为2400、E、8、1。现在只有一个串口可用了,程序怎样调。

[解决办法]
Private Sub Form_Load()
MSComm1.CommPort = 2 'COM端口
MSComm1.Settings = "2400,E,8,2 "
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.SThreshold = 1 '如果传输缓冲区完全空时产生MSComm事件
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.PortOpen = True '打开端口
End Sub

Private Sub cmdConnect_Click()
Dim bytData(19) As Byte
Dim i As Integer
bytData(0) = 8
For i = 1 To 19
bytData(i) = 0
Next
MSComm1.PortOpen = False
MSComm1.Settings = "2400,E,8,2 " '改变停止位
MSComm1.PortOpen = True
Call SendData(bytData) '发送
MSComm1.PortOpen = False
MSComm1.Settings = "2400,E,8,1 " '改变停止位
MSComm1.PortOpen = True
End Sub

'发送区
Public Function SendData(ByRef bytData() As Byte) As Long
On Error Resume Next
MSComm1.InBufferCount = 0 '清空接收缓冲区
MSComm1.Output = bytData '发送数据
Do
DoEvents
Loop Until MSComm1.OutBufferCount = 0 '等待,直到数据发送完毕
MSComm1.OutBufferCount = 0
End Function
[解决办法]
programart_life(理论派),你好!请看下列网址的讨论:
http://community.csdn.net/Expert/topic/5399/5399307.xml?temp=4.668826E-02
这是我提出的问题.三天我问了好多次
http://community.csdn.net/Expert/topic/5397/5397147.xml?temp=.891247
其实guxing110 ()的问题很简单.我只连了一台机器.我发一条数据给机器.机器返回一个值给我确定收到是否正确数据.可是我发一条数据返回都是3F. 不知道怎么回事.

比如我有一组数据:08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80(一个Bytge数据)

第一次发送将MSComm.settings= "19200,M,8,2 "发送08
以后的数据都以MSComm.settings= "19200,S,8,S "发送

接收我以MSComm.settings= "19200,M,8,2 ",发送的时间没问题,接收的数据都是3F
[解决办法]
如果下位机代码还能改的话,建议一定要修改。否则通讯将非常麻烦,你不能预测何时该使用何种通讯设置。也许你这边发送出去后,在你来得及修改通讯参数之前,那边的数据就已经返回了。这样你将无法获取正确的数据。

另外,返回的全部是3F有几种可能,一是通讯参数的影响,在接收数据之前没来得及更改通讯参数。二是3F可能是下位机错误指令代码的一种,也就是说你发过去的数据指令是错误的。三可能是你的指令没有错,下位机也没有错,参数也及时更改了,3F就是正确的数据。譬如,你读取下位机内的数据,而下位机根本没有数据,或者数据恰好就是全3F,那么就出现了最后的这种情况了。
[解决办法]
那就说明数据通讯的过程中已经产生了奇偶校验错误。产生这种错误的原因很可能是通讯参数或者通讯线路的问题。线路问题如线路信号不好干扰太强,这种情况需要采用有屏蔽的通讯线;还要可能是通讯线路过长,rs232的通讯有效距离只有很短的几米(具体忘记了),这种问题一是考虑缩短通讯距离,二是考虑采用rs485通讯。但我觉得最大的可能还是参数问题。我不知道你的设备是否是双串口工作,如果是,强烈建议上位机也采用双串口与之对应,你真的无法确定何时需要何种参数进行通讯的。在输出缓冲区的数据输出完成时,下位机就收到了指令,并且有响应,此时它已经组织数据并发送了,从接收指令到发送数据之间的时间可能很短,你无法确定这个时差,并在这个时差内对参数作出调整并等待接收。如果你的电脑只有一个串口,考虑一下加一个串口卡吧。这是最保险的做法,也是最合理的做法。因为我们谁都无法保证通讯过程中会出现什么问题。

热点排行