社区
控件
帖子详情
请教多串口卡通讯问题
sunxinyu
2010-01-29 08:13:52
最近买了个HUTONE的PCI扩的双串口卡(NJP)。VB做个界面,放置两个 MSCOMM控件, 连接两台设备。现在发现每运行一段时间后,就不能正常收发数据,只能重新启动PC或者注销重登陆后,才能恢复正常。
不知道有没有大侠用过类似的串口卡,或者遇到类似的问题,是如何解决的?? 希望大侠不吝赐教!!!
...全文
216
14
打赏
收藏
请教多串口卡通讯问题
最近买了个HUTONE的PCI扩的双串口卡(NJP)。VB做个界面,放置两个 MSCOMM控件, 连接两台设备。现在发现每运行一段时间后,就不能正常收发数据,只能重新启动PC或者注销重登陆后,才能恢复正常。 不知道有没有大侠用过类似的串口卡,或者遇到类似的问题,是如何解决的?? 希望大侠不吝赐教!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dasdsdfdfd
2011-05-28
打赏
举报
回复
学习下
sunxinyu
2010-01-31
打赏
举报
回复
感谢楼上各位
@cmb666 ,我程序里用的是MSComm1_OnComm 和MSComm2_OnComm事件。
sunxinyu
2010-01-31
打赏
举报
回复
多谢cbm666及各位热心的朋友
cbm6666
2010-01-31
打赏
举报
回复
sTemp = MSComm1.Input '这行拿到上面
没有先取得 sTemp的值
你下面这行的sTemp要从那里来?
If InStr(1, sTemp, "rr") = 0 Then 'Or InStr(sTemp, ".") > InStr(sTemp, "N") then
cbm6666
2010-01-31
打赏
举报
回复
sTemp = MSComm1.Input '这行拿到上面
If InStr(1, sTemp, "rr") = 0 Then 'Or InStr(sTemp, ".") > InStr(sTemp, "N") then
sunxinyu
2010-01-31
打赏
举报
回复
Private Sub MSComm1_OnComm()
If SmartProperty.SmartItems.Item("UpLimit").Value = "" Then Exit Sub
Dim sTemp As String
Dim sReceive As String
Dim iPos As Integer
Dim strPart1_Sign As String
Dim strPart2_Wgt As String
Dim strPart3_Unit As String
Dim ddd As Long
On Error GoTo errHandler
sReceive = ""
MSComm1.InputLen = 22
Select Case MSComm1.CommEvent
Case comEvReceive '接收到22个数据
If InStr(1, sTemp, "rr") = 0 Then 'Or InStr(sTemp, ".") > InStr(sTemp, "N") Then
sTemp = MSComm1.Input
If VBA.Mid(sTemp, 1, 1) = " " And InStr(1, sTemp, "g") <> 0 Then GoTo errHandler
strPart1_Sign = VBA.Trim(VBA.Mid(sTemp, 7, 1))
strPart2_Wgt = VBA.Trim(VBA.Mid(sTemp, 9, 8))
strPart3_Unit = VBA.Trim(VBA.Mid(sTemp, 18, 3))
'sReceive = strPart1_Sign & strPart2_Wgt & strPart3_Unit
If intWeighingStep = 1 Then
txtTare.Text = strPart2_Wgt 'sReceive
dblTare = txtTare.Text
SmartTabStrip_Click SmartTabStrip.SmartItems.Item("皮重称量")
SmartTabStrip.SmartItems.Item("皮重称量").Visibility = viVisible
SmartTabStrip.SmartItems.Item("皮重称量").Selected = True
intWeighingStep = 2
If bAudio = True Then
ddd = SmartRead_Speak("当前皮重是" & txtTare.Text & "千克 请放入净重,并在稳定后按打印键!", 11, 0, -1, -1, 1, "http://www.smartread.net/cn/index.html")
End If
ElseIf intWeighingStep = 2 Then
txtNET.Text = strPart2_Wgt 'sReceive
txtNET.Text = Format(txtNET.Text, "0.000")
dblNet = txtNET.Text
SmartTabStrip_Click SmartTabStrip.SmartItems.Item("净重称量")
SmartTabStrip.SmartItems.Item("净重称量").Visibility = viVisible
SmartTabStrip.SmartItems.Item("净重称量").Selected = True
intWeighingStep = 3
txtNetTare.Text = Format(Val(txtNET.Text) + Val(txtTare.Text), "0.000")
If bAudio = True Then
ddd = SmartRead_Speak("当前净重是" & txtNET.Text & "千克 请将装完物质的容器放入复核秤,并在稳定后按打印键!", 11, 0, -1, -1, 1, "http://www.smartread.net/cn/index.html")
End If
End If
End If
Case comRxParity '接收错误
MsgBox "提示: 通 信 格 式 错 ! "
End Select
MSComm1.InBufferCount = 0 '接收缓冲区清零
Exit Sub
errHandler:
Me.MSComm1.PortOpen = False
Me.MSComm1.InBufferCount = 0
Me.MSComm1.PortOpen = True
End Sub
qiangshou2301
2010-01-31
打赏
举报
回复
这种串口卡一般不好使 还是用屁股后面的硬串口
fouthu
2010-01-31
打赏
举报
回复
我是进来学习的。
cbm6666
2010-01-31
打赏
举报
回复
你把 MSComm1_OnComm 的代码贴出来看看 我经常在接4台-8台的电子秤 也不觉得卡....
贝隆
2010-01-30
打赏
举报
回复
既然你的PC是被动接受数据,那么你就最好使用OnComm事件方式来处理,楼主参考一下这个:
http://download.csdn.net/source/1262066
这是一个串口调试器的源代码,你可以借鉴,只需要把接收到的数据分段即可。
cbm6666
2010-01-29
打赏
举报
回复
你接收是使用 MSComm1_OnComm 事件吗?
sunxinyu
2010-01-29
打赏
举报
回复
多谢两位高人的指引。 有些信息我再补充一下:
PC被动接收数据。所以用轮询是不是不太合适?
询问过他们的技术支持, 他们说我用的NJP那款,板子上没有复位芯片。是不是没有复位芯片造成的呢?哎,真愁人,无奈了~~~~~~~~~~~
cbm6666
2010-01-29
打赏
举报
回复
只要 Mscomm1与Mscomm2都能 Open 成功 那就不是你双口卡的问题了,因为 ComPort并没问题.
应该是你的代码处理问题.
zdingyun
2010-01-29
打赏
举报
回复
将MSCOMM控件放独立窗体,由主窗体来定时关闭和打开窗体.
采用485通信协议,C#端采用SerialPort类实现数据收发C#与多设备通过485
通讯
的
问题
最近做一个项目,下位机是单片机,上位机程序采用c#Winform窗体应用程序。采用485通信协议,C#端采用SerialPort类实现数据收发。协议都没有
问题
,现在有一个情况我不能确定,想
请教
各位大神帮忙处理一下。 这是一个刷卡放水设备。终端有32台设备,每台设备供用户刷卡,然后进行扣费放水。由于当初采购有
问题
,购买的射频卡有
问题
,无法实现直接保存用户金额。所以采用了一个不得已的办法,就...
c# wifi串口通信_C# 串口通信总结
我们知道对于标准DLL,可以采用DllImport进行调用。例如:[DllImport("KMY350X.dll")]privatestaticexternintOpenPort(intPortNum,intBaudRate);如果一些厂家比较懒的话,没有提供相应的dll,我们只能对它进行串口通信编程了。以前从没接触过串口编程,最近在一个项目中有几个地方都需要采用串口通信,跟公司一个...
C#串口通信初始化校验位设置Mark,收码多一位0x3f解决方案
C#串口通信初始化校验位设置为Mark,回码第一位多了个数据0x3f,如果回码分多条,则每一条前都会固定多一位0x3f。但是使用ComMonitor.exe、UartAssist.exe等串口软件发送同样数据时,不会出现这个
问题
。
C#串口通信总结
我们知道对于 标准DLL,可以采用DllImport进行调用。例如: [DllImport("KMY350X.dll")] private static extern int OpenPort(int PortNum, int BaudRate); 如果一些厂家比较懒的话,没有提供相应的dll,我们只能对它进行串口通信编程了。以
C# 串口通信总结
C# 串口通信总结 我们知道对于 标准DLL,可以采用DllImport进行调用。例如: [DllImport("KMY350X.dll")] private static extern int OpenPort(int PortNum, int BaudRate); 如果一些厂家比较懒的话,没有提供相应的dll,我们只能对它...
控件
1,453
社区成员
41,354
社区内容
发帖
与我相关
我的任务
控件
VB 控件
复制链接
扫一扫
分享
社区描述
VB 控件
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章