大家好,头一次发帖.
客套话不多说,直入主题吧:)
我购买的是micro2440a70套装,板子上有三个串口,而现在遇到一个COM3不稳定的问题,具体如下:
系统环境:
光盘自带的WINCE6
软件环境:
使用VB.NET2008编写的串口数据采集与控制软件,主要功能:
一,从COM1,COM2采集485总线数据.
COM口的2与3脚是交错的,并且4脚与7脚电压不足,导致串口窃电的232转485模块无法工作,通过自制一条带USB取电的串口交连线解决.
二,从COM3与一块串口IO卡通讯. <------目前卡在这里.
问题现象:
每次WINCE6启动后,COM1与COM2可以马上工作,即打开端口没有问题.COM3有时能打开,有时不能打开.
然而WINCE6自带的串口调试工具却可以成功打开COM3并与IO卡正确通讯,任何时候都可以.
我做过的尝试:
在PC上联调时,单步到OPEN端口后,然后查看错误描述,如下:
在 System.IO.IOException 中第一次偶然出现的“System.dll”类型的异常
在 System.IO.IOException 中第一次偶然出现的“System.dll”类型的异常
由于不清楚原因,能做的尝试极为有限....
不知道系统自带的那个工具为何能正确打开COM3?能否提供其实现机制?最好能有代码!
另外,打开三个COM口的代码均为同一份代码的复制,相关代码如下:
Imports System
Imports System.IO.Ports
Imports System.Windows.Forms
Public Class cIoCard
'IO卡操作类
'
'IO卡使用COM3,参数=9600,n,8,1
'
'思路:
'
'本类内部保存IO口状态.
'用一个定时器不断从IO卡取得输入状态,每秒10次(100ms一次),如果与内部保存的状态不同,则产生IOChanged事件.
'提供方法可设置输出口状态,同时会触发IOChanged事件.
'提供方法可取得当前输入口状态.
Public Event IChanged(ByVal bNum() As Byte) 'Input有改变事件.有改变的口被置1
Public Event OChanged(ByVal bNum() As Byte) 'Output有改变事件.有改变的口被置1
Public Enum IOSTATUE
R_BIT_ON = &H1
R_BIT_OFF = &H2
R_ALL_ON = &H3
R_ALL_OFF = &H4
R_GROUP_ON = &H5
R_GROUP_OFF = &H6
READ_STATUS = &H7
STATUS_FROM_BOARD = &H20
End Enum
Dim WithEvents oComm As SerialPort
Dim WithEvents oTimerR As Timer, oTimerW As Timer
Dim bIs(7) As Byte, bOs(7) As Byte, OutByte(8) As Byte
Public Sub New(ByVal T1 As Timer, ByVal T2 As Timer)
If (T1 Is Nothing) Or (T2 Is Nothing) Then
Throw New ArgumentException("control不能为空!", "control")
Else
oTimerR = T1
oTimerW = T2
End If
End Sub
Public Function OpenComm() As Integer
'初始化串口
oComm = New SerialPort
With oComm
.ReadTimeout = 100
.WriteTimeout = 100
.BaudRate = 9600
.DataBits = 8
.StopBits = IO.Ports.StopBits.One
.Parity = IO.Ports.Parity.None
Try
.PortName = "COM3"
.Open()
Catch ex As Exception
Return -1
'MsgBox("打开串口错误!")
End Try
End With
oTimerR.Interval = 25
'oTimerW.Interval = 100
oTimerR.Enabled = True
'oTimerW.Enabled = True
Return 1
End Function
请求大家的帮助:)