VB-怎样解决串口通迅时CPU占用高的问题

  2007-07-12  字体:[

我是用VB写的一个监控系统,需要和PLC串口通迅.用的是MSComm控件通迅,可在通迅的时候CPU的占用的很多, 请问有没有高手知道怎么样解决? 谢谢

字串1

网友解答:

用台好点的机子

字串3

网友解答:

双核,1G内存,差不多了吧,用这样的占用的也是不低,是不是程序的问题, 字串9

网友解答:

估计是程序设计的问题。如果不是非常必要,通讯不要太频繁。另外发送、接收的数据处理的代码也要好好设计。

字串4

网友解答:

多线程如何? 字串7

网友解答:

尽量使用事件驱动模式,避免死循环等待 字串6

网友解答:

一直都用MSComm,应该不是MSComm连接的问题,还是着重看其他的地方吧。

字串5

网友解答:

我现在是用的,传送后延时,延时代码如下:'*************************************Public Sub MyDelay(WaitTime As Single)'************************************* Dim Wait As Single Wait = Timer + WaitTime Do DoEvents Loop Until (Timer > Wait) DoEventsEnd Sub不知道是不是上面程序的问题,我试着用ONCOMM事件,代码如下,Private Sub MSC1_OnComm() If MSComm1.CommEvent = comEvReceive Then ........... End IfEnd Sub我在"Private Sub MSC1_OnComm()"设置了断点,可是在接收到串口信息时没有触发这个事件请各位高手帮忙

字串7

网友解答:

应该是你的延时程序造成的,用事件触发方式就可以了. 没有触发通讯事件,可能是Rthreshold 属性=0了,它是触发接收事件的字节数,将其改为1或者你希望的字节数即可.

字串7

网友解答:

缓冲区设大些,不要每收到一个字符就触发事件 字串2

网友解答:

谢谢,楼上各位的帮助,CPU的问题解决了,不过还有别的问题,如果我想每10个字节触发一次OnComm事件,Rthreshold就要设为10才对的,刚开始的时候如果Rthreshold设为小于10的数字,会触发多次ONCOMM事件,可是后来也不知道怎么的,只要设Rthreshold为1到10的数字都只是触发一次OnComm事件,而不是多次.我一直不能理解这是什么原因,请高手帮忙. 字串8

网友解答:

估计你代码有问题,贴上来看看吧 字串1

网友解答:

Private Sub Form_Load() MSComm1.SThreshold = 0 MSComm1.RThreshold = 1 MSComm1.Settings = "19200,e,7,1" MSComm1.CommPort = 1 MSComm1.PortOpen = True Timer1.Interval = 5000 Timer1.Enabled = TrueEnd SubPrivate Sub Timer1_Timer() Timer1.Enabled = False str = "04" + "51" + Hex(&H1C00 + 510 * 2) + "0A" + Chr(3) ChkSum = 0 For i = 1 To Len(str) ChkSum = ChkSum + Asc(Mid$(str, i, 1)) Next i str = Chr(2) + str + Right(Hex(ChkSum), 2) MSComm1.Output = strend sub上面是根据发送格式,整理数据,Private Sub MSComm1_OnComm() If MSComm1.CommEvent = comEvReceive Then Timer1.Interval = 5000 Timer1.Enabled = True Text2.Text = 0 Text2.Text = MSC1.Input end if End Sub我试过了,如果接收到的数据长度小玩45个字节RThreshold=1 时,Text2.Text中显示的结果都是是对的,大于45时,就是错的,

字串5

网友解答:

1 如果你想每隔5秒发送一次数据的话,在通讯事件里重新启动定时器不是个好办法,你现在的做法导致在接收到第一个字节后5秒重发数据(不明白你的意图).另外Text2.Text = MSC1.Input这一句和控件名称不匹配(MSComm1).你可以先用以下方法试试能否正常接收所有数据:Private Sub MSComm1_OnComm()If MSComm1.CommEvent = comEvReceive Then Text2.Text = Text2.Text & MSComm1.Inputend if End Sub2 另外还要注意反馈的数据格式是文本或者是二进制数据,这要和MSComm1的InputMode属性匹配,当包含二进制数据时,text控件有可能不能正常显示出来3 适当设置InBufferSize 和InputLen 属性,或用缺省值. 字串1

网友解答:

MSC1.Input这个是我写错了,接收的数据是十六进制的数据,我的意思是数据接收是正常的,并且我也用过msgbox 来监看接收的数据,虽然RThreshold设为了1,但是事实上,接收完十个数据后,才触发OnComm事件,并且只触发一次.这是我不明白的地方,按理说应该是每接收一个字节就会触发一次的.虽然,设RThreshold=1和程序上是有点不合理,以后我也不会这样用.但是我想知道,发生上面的情况是为什么. 字串8

网友解答:

还有,是不是设备断线,就只能触发发送事件,不能触发ONCOMM别的事件,包括错误事件.如果断线,还想触发ONCOMM,应该怎么办.谢谢 字串4

网友解答:

断线,能不能触发ONCOMM事件,如果能对应的是什么?

字串2

网友解答:

通讯模式是字符串还是2进制的??

字串1

网友解答:

ONCOMM事件也包括一些错误事件,但断线不一定能触发ONCOMM事件.通常检测断线的方法是对设备发送一个简单指令,若及时返回则说明线路正常. 字串5

网友解答:

TO:ZOU_SEAFARER(国际海员^_^) 用的通讯模式是十六进制的字符串TO:akunkeji() 我现在用的就是你说的方法,不过处理起来有点麻烦,因为我要用一个串口实现多种和读写,和这些过程中,有可能设备就断线了,如果断线不能触发ONCOMM事件,我还要用一个定时器和一个BOOLEN变量,过些时间看设备有没有返回值来触发ONCOMM事件,并且还要对不同的读写来设定处理的方法,如果断线能触发ONCOMM事件,这样就简单多了


共2页: 上一页 1 [2] 下一页

上一篇:公务员申论的迷茫
下一篇:帮妈妈打听中央电视台播出的降糖新药是什么,谢谢帮忙
  •    网站首页 -  网站导航 -  联系方法 -  网站地图 -  客户服务 -  相关法律 - 问答网 -  广告服务 -  帮助中心