我再进行通讯读取操作时,只要超过2个DM字以上都只读出9位数据,比如我读取以DM1000位起始位,想要读出连续的3位DM1000,DM1001,DM1002。在文本框内显示的却是4F2D 2C12 6 这9位数据。PLC内部显示的是 4F2D 2C12 648B。我想要文本框内显示值是这样的,无论我读多少个字都可以显示出来,求哪位高手帮忙。谢谢了。Option Explicit
Dim tim As Integer
Dim fcdd$
Dim Time_out As String
Dim ERROR_COM As Boolean
Dim Instring As String
Dim endcode As String
Dim Lengh As Integer
Dim order1 As String
Dim outstring As String
Dim B As String
Dim C As StringPublic Sub Iput()
Dim A As Integer
MSComm1.InBufferCount = 0
A = Int(C)
C = String(4 - Len(CStr(A)), "0") & A
End SubPublic Sub Oput()
outstring = outstring + fcdd$ + "*" + Chr$(13)
MSComm1.Output = outstring
Time_out = tim
Do
If tim > (Time_out + 1) Then
ERROR_COM = True
Else
ERROR_COM = False
End If
DoEvents
Loop Until ((MSComm1.InBufferCount >= 11 + 4 * Lengh) Or (ERROR_COM = True))
Instring = MSComm1.Input
order1 = Mid(Instring, 6, 2)
Call ErrMessage(order1)
End Sub
Public Sub INIT_comm()
Dim Instring, outstring As String
MSComm1.CommPort = 1
MSComm1.Settings = "9600,e,7,2"
MSComm1.InBufferSize = 0
MSComm1.RThreshold = 1
MSComm1.InBufferCount = 0
MSComm1.InputLen = 0
MSComm1.PortOpen = True
End SubPublic Function ErrMessage(ByVal X As String)
Select Case X
Case "13"
MsgBox "校验错误"
Case "14"
MsgBox "格式错误"
Case "15"
MsgBox "入口码错误"
Case "18"
MsgBox "帧长度错误"
Case "A3"
MsgBox "传送数据时因FCS错误引起终止"
Case "A8"
MsgBox "传送数据时因长度错误引起在终止"
End Select
End FunctionFunction XORR(ByVal STRI As String) As String '校验码的异或处理
Dim I, J, K As Integer
J = Len(STRI)
K = 0
For I = 1 To J
K = Asc(Mid$(STRI, I, 1)) Xor K
Next I
fcdd$ = Hex$(K)
If Len(fcdd$) = 1 Then
XORR = "0" & fcdd$
Else
XORR = fcdd$
End If
End Function
Private Sub CmdMonitor_Click()
MSComm1.InBufferCount = 0
outstring = "@" + "00" + "SC" + "02"
fcdd$ = XORR(outstring)
Call Oput
End SubPrivate Sub CmdRD_Click()
Dim outstring As String
Dim C As String
Dim A As Integer
Dim B As String
Dim D As Integer
Dim R, S, Lng As String
Dim T As Long MSComm1.InBufferCount = 0 'clear off inbuffer
C = Text1.Text
B = Text4.Text
A = Int(C)
D = Int(B)
C = String(4 - Len(CStr(A)), "0") & A
B = String(4 - Len(CStr(D)), "0") & D
outstring = "@" + "00" + "RD" + C + B
fcdd$ = XORR(outstring)
outstring = outstring + fcdd$ + "*" + Chr$(13)
MSComm1.Output = outstring
Time_out = tim
'判断通讯错误
Do
If tim > (Time_out + 1) Then
ERROR_COM = True
Else
ERROR_COM = False
End If
DoEvents
Loop Until ((MSComm1.InBufferCount >= 11 + 4 * Lengh) Or (ERROR_COM = True))
Instring = MSComm1.Input
order1 = Mid(Instring, 6, 2) '结束码
Call ErrMessage(order1)
R = Mid(Instring, 8, 4 * B)
S = Left$(R, 4)
For T = 1 To B - 1
S = S & " " & Mid$(R, T * 4 + 1, 4)
Next T
Text2.Text = SEnd SubPrivate Sub CmdWD_Click()
Dim A As Integer
MSComm1.InBufferCount = 0 'clear off inbuffer
C = Text1.Text
A = Int(C)
C = String(4 - Len(CStr(A)), "0") & A
outstring = "@" + "00" + "WD" + C + Text3.Text
fcdd$ = XORR(outstring)
outstring = outstring + fcdd$ + "*" + Chr$(13)
MSComm1.Output = outstring
Time_out = tim
'判断通讯错误
Do
If tim > (Time_out + 1) Then
ERROR_COM = True
Else
ERROR_COM = False
End If
DoEvents
Loop Until ((MSComm1.InBufferCount >= 11 + 4 * Lengh) Or (ERROR_COM = True))
Instring = MSComm1.Input
order1 = Mid(Instring, 6, 2) '结束码
Call ErrMessage(order1)
End SubPrivate Sub CmdPro_Click()
MSComm1.InBufferCount = 0 outstring = "@" + "00" + "SC" + "00"
fcdd$ = XORR(outstring)
Call Oput
End Sub
Private Sub CmdRun_Click()
MSComm1.InBufferCount = 0
outstring = "@" + "00" + "SC" + "03"
fcdd$ = XORR(outstring)
Call Oput
End Sub
Private Sub Form_Load()
Dim tim As Date
tim = 0
Call INIT_comm
End SubPrivate Sub ComEnd_Click()
Dim response
response = MsgBox("是否退出系统?", vbOKCancel + vbQuestion, "退出")
If response = 1 Then
End
End If
End Sub
Dim tim As Integer
Dim fcdd$
Dim Time_out As String
Dim ERROR_COM As Boolean
Dim Instring As String
Dim endcode As String
Dim Lengh As Integer
Dim order1 As String
Dim outstring As String
Dim B As String
Dim C As StringPublic Sub Iput()
Dim A As Integer
MSComm1.InBufferCount = 0
A = Int(C)
C = String(4 - Len(CStr(A)), "0") & A
End SubPublic Sub Oput()
outstring = outstring + fcdd$ + "*" + Chr$(13)
MSComm1.Output = outstring
Time_out = tim
Do
If tim > (Time_out + 1) Then
ERROR_COM = True
Else
ERROR_COM = False
End If
DoEvents
Loop Until ((MSComm1.InBufferCount >= 11 + 4 * Lengh) Or (ERROR_COM = True))
Instring = MSComm1.Input
order1 = Mid(Instring, 6, 2)
Call ErrMessage(order1)
End Sub
Public Sub INIT_comm()
Dim Instring, outstring As String
MSComm1.CommPort = 1
MSComm1.Settings = "9600,e,7,2"
MSComm1.InBufferSize = 0
MSComm1.RThreshold = 1
MSComm1.InBufferCount = 0
MSComm1.InputLen = 0
MSComm1.PortOpen = True
End SubPublic Function ErrMessage(ByVal X As String)
Select Case X
Case "13"
MsgBox "校验错误"
Case "14"
MsgBox "格式错误"
Case "15"
MsgBox "入口码错误"
Case "18"
MsgBox "帧长度错误"
Case "A3"
MsgBox "传送数据时因FCS错误引起终止"
Case "A8"
MsgBox "传送数据时因长度错误引起在终止"
End Select
End FunctionFunction XORR(ByVal STRI As String) As String '校验码的异或处理
Dim I, J, K As Integer
J = Len(STRI)
K = 0
For I = 1 To J
K = Asc(Mid$(STRI, I, 1)) Xor K
Next I
fcdd$ = Hex$(K)
If Len(fcdd$) = 1 Then
XORR = "0" & fcdd$
Else
XORR = fcdd$
End If
End Function
Private Sub CmdMonitor_Click()
MSComm1.InBufferCount = 0
outstring = "@" + "00" + "SC" + "02"
fcdd$ = XORR(outstring)
Call Oput
End SubPrivate Sub CmdRD_Click()
Dim outstring As String
Dim C As String
Dim A As Integer
Dim B As String
Dim D As Integer
Dim R, S, Lng As String
Dim T As Long MSComm1.InBufferCount = 0 'clear off inbuffer
C = Text1.Text
B = Text4.Text
A = Int(C)
D = Int(B)
C = String(4 - Len(CStr(A)), "0") & A
B = String(4 - Len(CStr(D)), "0") & D
outstring = "@" + "00" + "RD" + C + B
fcdd$ = XORR(outstring)
outstring = outstring + fcdd$ + "*" + Chr$(13)
MSComm1.Output = outstring
Time_out = tim
'判断通讯错误
Do
If tim > (Time_out + 1) Then
ERROR_COM = True
Else
ERROR_COM = False
End If
DoEvents
Loop Until ((MSComm1.InBufferCount >= 11 + 4 * Lengh) Or (ERROR_COM = True))
Instring = MSComm1.Input
order1 = Mid(Instring, 6, 2) '结束码
Call ErrMessage(order1)
R = Mid(Instring, 8, 4 * B)
S = Left$(R, 4)
For T = 1 To B - 1
S = S & " " & Mid$(R, T * 4 + 1, 4)
Next T
Text2.Text = SEnd SubPrivate Sub CmdWD_Click()
Dim A As Integer
MSComm1.InBufferCount = 0 'clear off inbuffer
C = Text1.Text
A = Int(C)
C = String(4 - Len(CStr(A)), "0") & A
outstring = "@" + "00" + "WD" + C + Text3.Text
fcdd$ = XORR(outstring)
outstring = outstring + fcdd$ + "*" + Chr$(13)
MSComm1.Output = outstring
Time_out = tim
'判断通讯错误
Do
If tim > (Time_out + 1) Then
ERROR_COM = True
Else
ERROR_COM = False
End If
DoEvents
Loop Until ((MSComm1.InBufferCount >= 11 + 4 * Lengh) Or (ERROR_COM = True))
Instring = MSComm1.Input
order1 = Mid(Instring, 6, 2) '结束码
Call ErrMessage(order1)
End SubPrivate Sub CmdPro_Click()
MSComm1.InBufferCount = 0 outstring = "@" + "00" + "SC" + "00"
fcdd$ = XORR(outstring)
Call Oput
End Sub
Private Sub CmdRun_Click()
MSComm1.InBufferCount = 0
outstring = "@" + "00" + "SC" + "03"
fcdd$ = XORR(outstring)
Call Oput
End Sub
Private Sub Form_Load()
Dim tim As Date
tim = 0
Call INIT_comm
End SubPrivate Sub ComEnd_Click()
Dim response
response = MsgBox("是否退出系统?", vbOKCancel + vbQuestion, "退出")
If response = 1 Then
End
End If
End Sub
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货