串口有时接收不到数据是怎么回事?

eacho 2005-12-03 10:05:28
大家好,我用COM1接收数据,平常都没问题,就是偶尔会突然没有数据发送过来,用串口精灵也接收不到任何数据,这时我只要把COM1停用然后再启用就又可以正常接收数据了。

小弟对串口了解很浅,问题又很急,向大家求救。

另,操作系统是XP.
...全文
2574 19 打赏 收藏 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
eacho 2005-12-04
  • 打赏
  • 举报
回复
mqy80(mqy):
你看我上面贴的代码,有catch(Exception err),在IF之前有个try的,只不过我拷的时候没拷全,
谢谢你的关注!
mqy80 2005-12-04
  • 打赏
  • 举报
回复
会不会此时已经出错了,但是由于没有try语句,被系统忽略了?如果不用if语句,直接msgbox一下portOpen的值,结果会怎样?
eacho 2005-12-04
  • 打赏
  • 举报
回复
if( _AxMSComm.PortOpen)//AAAA
{
_AxMSComm.PortOpen = false;
}
我不明白的是,明明串口已被其他程序打开,为什么上面那个判断进不去?_AxMSComm.PortOpen返回的是false

eacho 2005-12-03
  • 打赏
  • 举报
回复
C#中打开和关闭串口应该怎么写啊?
mqy80 2005-12-03
  • 打赏
  • 举报
回复
PortOpen是只读吧?如果判断PortOpen为True,可以先调用Close()关闭端口,然后调用Open()打开端口试试
eacho 2005-12-03
  • 打赏
  • 举报
回复
波特率、数据位等参数都没错,我在绝大多数时间里接收是正常的,但运行个几天就会有出现一次什么数据也接收不到的情况,这时把COM1停用再启用又正常了。
eacho 2005-12-03
  • 打赏
  • 举报
回复
if( _AxMSComm.PortOpen)//AAAA
{
_AxMSComm.PortOpen = false;
}

_AxMSComm.InBufferSize=40;

_AxMSComm.InputLen=25;

_AxMSComm.RThreshold=1;

_AxMSComm.DTREnable=true;

_AxMSComm.EOFEnable=false;

_AxMSComm.OutBufferSize=512;

_AxMSComm.NullDiscard=false;

_AxMSComm.RTSEnable=false;

_AxMSComm.Settings=sSettings;

_AxMSComm.PortOpen = true; BBBB
catch(Exception err)
{
MessageWindow.Show(err.Message,StaticVariable.MessageBoxTitle,MessageBoxButtons.OK, MessageBoxIcon.Error);
}

以上是初始化代码,我先用串口工具打开串口,然后执行我的程序,跟到AAAA的时候,没有进到IF块里,而直接往下走了,然后到BBBB的时候就出错了。

我判断串口是否已打开的方法不对吗?
hunter_32 2005-12-03
  • 打赏
  • 举报
回复
傳輸速率,檢查位,數據位,停止位,xon/xoff 等信息 還有 cts dsr dsr dtr rts 等信息是否還跟你的匹配
hunter_32 2005-12-03
  • 打赏
  • 举报
回复
看看串口的參數是否改變了用mode就可以查看了
mqy80 2005-12-03
  • 打赏
  • 举报
回复
是否在检查PortOpen前关闭了串口?
mqy80 2005-12-03
  • 打赏
  • 举报
回复
如果正常操作,自己打开端口,再查询portOpen返回什么?
eacho 2005-12-03
  • 打赏
  • 举报
回复
我现在怀疑是我的程序打开时串口已被别人打开,我刚才跟了一下程序,发现我写的判断串口是否已打开的代码不起作用,明明我用别的工具占用了COM1,程序判断PortOpen时却返回False,不知何故。
mqy80 2005-12-03
  • 打赏
  • 举报
回复
是不是数据发送源的问题?系统给出的触发指令不正确导致没有数据传送?或者使用中断读取数据,由于数据接收处理延时,造成数据拥塞,可以考虑使用查询方式以匹配处理速度
eacho 2005-12-03
  • 打赏
  • 举报
回复
mqy80 2005-12-03
  • 打赏
  • 举报
回复
应该是用createFile(),具体语法可以查help,MSDN里面有一个串口应用实例针对C#,以前用VB6.0,有个Mscomm很好用的,很多函数和参数都集成好了
flowercity 2005-12-03
  • 打赏
  • 举报
回复
一、是否有硬件流的问题?如果有硬件握手信号要求,用3根线来通信是不稳定的
二、串口是否关闭了?如果不能接受的情况下,请查看串口状态如何
eacho 2005-12-03
  • 打赏
  • 举报
回复
to: yangyzqo(欺世盗名来灌水)
我觉得不是程序的问题,我的程序接收不到数据的时候用串品精灵一类的工具也接收不到,
调试的时候根本就不触发,没有任何数据传过来。
yangyzqo 2005-12-03
  • 打赏
  • 举报
回复
一步一步调试一下看看了,
很可能是程序的问题
eacho 2005-12-03
  • 打赏
  • 举报
回复
up

27,522

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧