MyException - 我的异常网
当前位置:我的异常网» VB » MSCOMM控件怎样设定两次停止位解决办法

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

www.MyException.Cn  网友分享于:2013-03-01  浏览:24次
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通讯。但我觉得最大的可能还是参数问题。我不知道你的设备是否是双串口工作,如果是,强烈建议上位机也采用双串口与之对应,你真的无法确定何时需要何种参数进行通讯的。在输出缓冲区的数据输出完成时,下位机就收到了指令,并且有响应,此时它已经组织数据并发送了,从接收指令到发送数据之间的时间可能很短,你无法确定这个时差,并在这个时差内对参数作出调整并等待接收。如果你的电脑只有一个串口,考虑一下加一个串口卡吧。这是最保险的做法,也是最合理的做法。因为我们谁都无法保证通讯过程中会出现什么问题。

文章评论

写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
那些争议最大的编程观点
那些争议最大的编程观点
程序员和编码员之间的区别
程序员和编码员之间的区别
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
老程序员的下场
老程序员的下场
总结2014中国互联网十大段子
总结2014中国互联网十大段子
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
一个程序员的时间管理
一个程序员的时间管理
每天工作4小时的程序员
每天工作4小时的程序员
程序员必看的十大电影
程序员必看的十大电影
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
漫画:程序员的工作
漫画:程序员的工作
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
10个调试和排错的小建议
10个调试和排错的小建议
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
我是如何打败拖延症的
我是如何打败拖延症的
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
代码女神横空出世
代码女神横空出世
我的丈夫是个程序员
我的丈夫是个程序员
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
程序员都该阅读的书
程序员都该阅读的书
旅行,写作,编程
旅行,写作,编程
如何成为一名黑客
如何成为一名黑客
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
鲜为人知的编程真相
鲜为人知的编程真相
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员的鄙视链
程序员的鄙视链
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
为什么程序员都是夜猫子
为什么程序员都是夜猫子
 程序员的样子
程序员的样子
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
Java程序员必看电影
Java程序员必看电影
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有