首页 上一页 1 2 下一页 尾页

求助:VB程序下的电脑死机问题 点击:3462 | 回复:23



FanRan630

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:9帖 | 72回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2003年6月18日
发表于:2007-11-06 11:55:00
楼主
我用VB编了一个数据采集程序,在运行过程中,发现有时出现电脑假死机现象:VB编制的程序停止进程,查看Windows任务管理器,发现其中的“系统空闲进程”占用CPU达到90%以上,其它进程全部停止,直到该进程占用CPU低于90%后,VB的程序开始正常运行,是我的程序有问题还是电脑系统的设置有问题?请高手指点一二



ranranplay

  • 精华:1帖
  • 求助:0帖
  • 帖子:18帖 | 382回
  • 年度积分:0
  • 历史总积分:773
  • 注册:2005年9月27日
发表于:2007-11-06 14:13:00
1楼
程序问题,贴个图上来看看

FanRan630

  • 精华:0帖
  • 求助:1帖
  • 帖子:9帖 | 72回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2003年6月18日
发表于:2007-11-06 15:01:00
2楼
先谢谢您了,请问贴哪一部分的图?

FanRan630

  • 精华:0帖
  • 求助:1帖
  • 帖子:9帖 | 72回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2003年6月18日
发表于:2007-11-06 15:07:00
3楼
对了,占用系统资源的进程是System Idle Process
这套在别的机器上运行时程序非常稳定,但安装在工控机(联想产品)上后就出现这个问题,到底是为什么?

昆仑摩勒

  • 精华:1帖
  • 求助:1帖
  • 帖子:32帖 | 446回
  • 年度积分:0
  • 历史总积分:1058
  • 注册:2004年11月22日
发表于:2007-11-07 08:53:00
4楼
估计是系统问题啦 重装一个试试看

名笔

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 190回
  • 年度积分:0
  • 历史总积分:270
  • 注册:2004年11月24日
发表于:2007-11-07 09:06:00
5楼
System Idle Process,是Windows管理进程的,他的占有率总是很高的,而且不会在任务管理其中反映出来。你可以找个CPU占用很低的机器看看,改进程占用不会低于90%。

FanRan630

  • 精华:0帖
  • 求助:1帖
  • 帖子:9帖 | 72回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2003年6月18日
发表于:2007-11-07 11:52:00
6楼
谢谢各位的帮助! 按照各位的指导,我查找了一下出错的地方,发现是在发送串口数据的时候,该段的代码如下
我的数据采集间隔是200ms,在别的机子上工作完全正常,就是在工控机上出现“死机”现象,是硬件问题还是WindowsXP系统的问题呢? 注:工控机是天工工控全长P4 CPU主板,845GV芯片组,512M内存,操作系统为WindowsXP+SP2(番茄花园版本)

FanRan630

  • 精华:0帖
  • 求助:1帖
  • 帖子:9帖 | 72回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2003年6月18日
发表于:2007-11-07 12:00:00
7楼
对不起,图片贴不上去,复制代码段如下:
'==========================================================
'              SERIAL PORT SETTING & DATA SEND
'==========================================================Private Sub SendStrData(strData As String)

   With MSComm1
      If .PortOpen Then .PortOpen = False                   'Close Port
      .CommPort = 1                                         'Select Serial Port
      .OutBufferCount = 0                                   'Empty Out buffer
      .InBufferCount = 0                                    'Empty Input buffer
      .Settings = "9600,n,8,1"                              'Port Setting
      .RThreshold = 0                                       'stop receive data rspounding
      .RTSEnable = False                                    'RTS check enabled
      .DTREnable = False                                    'DTR check enabled
      .Handshaking = comNone                                'Forbid Hand shaking
      .InputLen = 0                                         'Receive all data in input buffer
      .InputMode = comInputModeText                         'Receive Mode: Text
      .PortOpen = True
      .Output = strData
   End With

End Sub

'========================================================
'========================================================

FanRan630

  • 精华:0帖
  • 求助:1帖
  • 帖子:9帖 | 72回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2003年6月18日
发表于:2007-11-07 12:08:00
8楼
天呐,修改不了,代码中,“Private........"等的后面一段实际是另起一行的,

ranranplay

  • 精华:1帖
  • 求助:0帖
  • 帖子:18帖 | 382回
  • 年度积分:0
  • 历史总积分:773
  • 注册:2005年9月27日
发表于:2007-11-07 12:31:00
9楼
这部分程序没有问题。不是这块的出错。

FanRan630

  • 精华:0帖
  • 求助:1帖
  • 帖子:9帖 | 72回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2003年6月18日
发表于:2007-11-07 12:44:00
10楼
程序是没错,我每隔200ms发送一次,然后等待数据接收,限时200ms,超时放弃,然后发送下一组数据。
    不是每次都出错的,只是偶尔出错的,是不是发送频率比较高造成的呢?

剑心33

  • 精华:0帖
  • 求助:0帖
  • 帖子:43帖 | 210回
  • 年度积分:0
  • 历史总积分:1008
  • 注册:2005年7月14日
发表于:2007-11-07 12:54:00
11楼
间隔时间长一点试试

FanRan630

  • 精华:0帖
  • 求助:1帖
  • 帖子:9帖 | 72回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2003年6月18日
发表于:2007-11-08 11:50:00
12楼
剑心33:
间隔时间加长到800ms,系统正常了,但运行速度实在太慢了,简直受不了。
我查看了一下工控机的配置,内存只有256M,这样的系统配置运行WindowsXP是不是勉强了点儿?对我的程序运行有影响吗?

FanRan630

  • 精华:0帖
  • 求助:1帖
  • 帖子:9帖 | 72回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2003年6月18日
发表于:2007-11-08 14:30:00
13楼
多谢各位了,问题已经解决!
“死机”的原因是串口数据冲突:现场仪表在异常状态下发送不规则字符串,占用串口,而上位机在一定的延时后重新发送数据造成串口冲突,所以死机了!
上位机的内存可能也有一定的影响,不过为了降低工程费用,唉,忍了吧!!!

-274度冷酷

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 169回
  • 年度积分:0
  • 历史总积分:375
  • 注册:2005年1月07日
发表于:2007-12-03 21:41:00
14楼
你的程序写的就不合理

-274度冷酷

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 169回
  • 年度积分:0
  • 历史总积分:375
  • 注册:2005年1月07日
发表于:2007-12-03 21:42:00
15楼
干吗要定时间去读取啊?用事件消息去处理

-274度冷酷

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 169回
  • 年度积分:0
  • 历史总积分:375
  • 注册:2005年1月07日
发表于:2007-12-03 21:44:00
16楼
还有就是你不用每次在发送数据的时候再给端口重新初始化如果没有必要的话

tigermu

  • 精华:6帖
  • 求助:0帖
  • 帖子:175帖 | 5410回
  • 年度积分:0
  • 历史总积分:19807
  • 注册:2003年1月19日
发表于:2007-12-04 05:51:00
17楼
256M装XP是小点。

wenjun

  • 精华:0帖
  • 求助:0帖
  • 帖子:27帖 | 629回
  • 年度积分:0
  • 历史总积分:733
  • 注册:2005年2月21日
发表于:2007-12-04 08:35:00
18楼
定时间去读取也是可以的呀!

-274度冷酷

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 169回
  • 年度积分:0
  • 历史总积分:375
  • 注册:2005年1月07日
发表于:2007-12-04 11:11:00
19楼
定时去读效率比较低,而且输入缓冲区里的内容不一定完整,还要对缓冲区里的内容加很多分析处理处理!

昆仑摩勒

  • 精华:1帖
  • 求助:1帖
  • 帖子:32帖 | 446回
  • 年度积分:0
  • 历史总积分:1058
  • 注册:2004年11月22日
发表于:2007-12-20 09:53:00
20楼
像这种数据采集最好用vb.net多线程来实现,否则很容易导致界面无法响应

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页