📄 fmian.frm
字号:
End Sub
Private Sub M_SAVE_Click()
If is_cominuse = True Then
COMSAVE
Else
End If
End Sub
Private Sub M_NCON_Click()
Dim a As Integer
If is_cominuse = True Then
a = MsgBox("连接" & COMNAME & "正在被使用是否关闭此连接?", vbInformation + vbYesNo, "提示")
If a = 6 Then
Fmain.MSComm.PortOpen = False
is_cominuse = False
Fmain.StatusBar.Panels(1).Text = TCOM.COMPORT & "断开连接"
Fmain.Caption = "网络通讯实验程序(BY:c0der)"
Else
Exit Sub
End If
Else
End If
CHO.Show
End Sub
Private Sub M_SET_Click()
SETT2.Show
End Sub
Private Sub MSComm_OnComm()
Dim charc As String * 1
Dim data As Variant
Dim num As Double
'Dim t1 As Single
'Dim t2 As Single
'Dim t3 As Single
Dim charb As Variant
't1 = Timer
'Debug.Print t1
Select Case MSComm.CommEvent
' Errors
Case comEventBreak ' A Break was received.
Case comEventFrame ' Framing Error
Case comEventOverrun ' Data Lost.
Case comEventRxOver ' Receive buffer overflow.
Case comEventRxParity ' Parity Error.
Case comEventTxFull ' Transmit buffer full.
Case comEventDCB ' Unexpected error retrieving DCB]
' Events
Case comEvCD ' Change in the CD line.
Case comEvCTS ' Change in the CTS line.
Case comEvDSR ' Change in the DSR line.
Case comEvRing ' Change in the Ring Indicator.
Case comEvReceive ' Received RThreshold # of
' chars.
'If firstr = False Then
'NOTE.Text = NOTE.Text & "Data Receive:"
'firstr = True
'Else
'List1.AddItem Counts
'Counts = Counts + 1
Delay 0.02 'delay 过小几乎没作用#24 似乎有点说不过去 为 0。001 的时候 和0。002 结果就不一样
'而这时间差引起的差异似乎不能用下面的观点来解释。。。
'
'DEBUG 0.00195-0.00196 就产生了差距 是处理时间差? 差 0.00001...
'
'
'
'MsgBox "':::L"
'问题也许出在收发的时候 加上时间延迟 就能取走全部数据 不延迟 数据过长时候不过全部获得
'代码执行速度快于从缓冲中获得数据时间#???????
'用延迟的效果和一个弹出对话框被确定后的数据采集
'相当于 产生ONCOMM 事件时候 数据并未稳定在线路上而 这时候数据采集 只采集到部分 程序执行速度过快
'遗漏数据的在后面事件到达时候被采集?调试的错误似乎证明这点。
'另一个问题就是延迟后产生许多 ONCOMM 事件 其实是空的 用 NUM=0 判断是“系统异常”ONCOMM 事件
'。。。。。捆饶好久的问题#75 为什么会产生多的ONCOMM 事件#24。,,》?????
'虽然我没统计出现ONCOMM 事件个数 大概推测下: 是WINDOWS 消息队列 在DELAY 时候 后面的消息未
'被处理 因为来一个字符产生一个ONCOMM 事件 所以 后面字符在相继到来后触发多个ONCOMM 事件
' N=???????? 后面的事件被保存在消息队列中 而字符已经进入缓冲区 所以 第一次读就全部读出来了
'有时间调试下 到底出现多少个ONCOMM 事件 验证下
'以下 CASE 0 情况的新代码本机调试通过 不过 10的时候的代码本机调试也是通过的#8 伤心啊
'上机就不对了 当然我并未发现 数据超长引发的数据丢失问题 这点现在才发现
'但是为什么 CASE 10 情况在不同系统中调试出现的 多个CHR(13)被检测出并显示异常
'SUCH AS REC:AREC:AREC:A。。。。。。
'AND REC:AAAAAAREC:AAAAAAREC:AAAAAA。。。。OR REC:111111111111REC:11111111111REC:11111111。。。
'数据不能正确接收!!!!!!!?????????????
'是计算机处理速度问题#?/?/????/
'debug
Select Case IS_ARQ
Case False
'非 ARQ 模式时候
Select Case Me.MSComm.InputMode
Case 0
num = MSComm.InBufferCount
Do
DoEvents
data = data & MSComm.Input
num = num - Len(data)
Loop Until num = 0
If data <> "" Then
If InStr(data, "ENQ") Then
'MSComm.Tag = 0
Fmain.MSComm.Output = "ACK0"
Tsend.Enabled = False
NOTE.Text = NOTE.Text & "REC:" & data & vbCrLf
'Delay (10)
ElseIf InStr(data, "EOT") Then
NOTE.Text = NOTE.Text & "REC:" & data & vbCrLf
Tsend.Enabled = True
ElseIf InStr(data, "ACK") Then
NOTE.Text = NOTE.Text & "REC:" & data & vbCrLf
ISCON = True
throwmsgs data '主动发送端的处理
Else
throwmsgc data '被动接收端自动处理
End If
End If
NOTE.SetFocus
SendKeys "{PGDN}"
SendKeys "{PGDN}"
'Tsend.SetFocus
SendKeys "{TAB}"
End Select
End Select
Case comEvSend ' There are SThreshold number of
' characters in the transmit
' buffer.
Case comEvEOF ' An EOF charater was found in
' the input stream
End Select
End Sub
Private Sub SENDEVENT_CONREQA(CONREQA As Boolean)
DoEvents
If CONREQ Then CONREQA = True
End Sub
Private Sub SENDEVENT_SENDNEXTA(SENDNEXTA As Boolean)
DoEvents
If SENDNEXT Then SENDNEXTA = True
End Sub
Private Sub Tsend_KeyPress(KeyAscii As Integer)
'ARQMODE CHOICE
If IS_ARQ = False Then
If KeyAscii = 13 Then
If is_cominuse = True Then
'ind = 0
buffer1 = Tsend.Text
If ISCON <> True Then
MSComm.Output = buffer1 & Chr$(13)
EXPID = 0
Else
MSComm.Output = CStr(EXPID) & buffer1 & Chr$(13)
EXPID = (id + 1) Mod 2
End If
NOTE.Text = NOTE.Text & "SND:" & Tsend.Text & vbCrLf
OLDSRE = buffer1
Tsend.Text = ""
KeyAscii = 0
Tsend.Enabled = False
Else
NOTE.Text = NOTE.Text & "当前未连接!数据发送无效!" & vbCrLf
Tsend.Text = ""
End If
Else
'BUFFER(ind) = Chr$(KeyAscii)
'MSComm.OutBufferCount = Len(Tsend.Text)
'ind = ind + 1
End If
Else
'ARQ MODE
End If
End Sub
Public Sub throwmsgc(ByVal msg As String)
id = CInt(Left(msg, 1))
If id = EXPID Then
EXPID = (id + 1) Mod 2
MSComm.Output = "ACK" & CStr(EXPID)
NOTE.Text = NOTE.Text & Right(msg, Len(msg) - 1) & "NEXID:" & Str(EXPID) & vbCrLf
Else
NOTE.Text = NOTE.Text & "数据接收出错. 请求重发!" & vbCrLf
MSComm.Output = "ACK" & CStr(EXPID)
End If
End Sub
Public Sub throwmsgs(ByVal msg As String)
id = CInt(Right(msg, 1))
If id = EXPID Then
'ID=0第一次建立连接
Tsend.Enabled = True
'NOTE.Text = NOTE.Text & "REC:" & data & vbCrLf
'MSComm.Output = "ACK" & CStr(EXPID)
'NOTE.Text = NOTE.Text & msg & vbCrLf
Else
NOTE.Text = NOTE.Text & "客户接收有问题.重发!" & vbCrLf
MSComm.Output = CStr(EXPID) & OLDSTR & Chr$(13)
End If
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -