发布于 2005-12-31 12:54:38
0楼
严重同意ZZJ1382的观点,可是在wincc里使用VBS还是还是很困难,不知道哪位能说明白一点。下面是我在VB里的代码,已经测试过,可以读取串口数据,希望有一位高手帮忙研究在wincc中使用,谢谢!
Dim SMSType As Integer
Dim Senddata() As Byte
Dim Readsmsno As Byte
Sub opentestnote()
wrap$ = Chr$(13) & Chr$(10)
CommonDialog1.Filter = "text filer (*.txt)*.txt"
CommonDialog1.FileName = ""
CommonDialog1.ShowOpen '使用通用对话框对象提示用户输入路径名
'If Err = cdlCancel Then Exit Sub
If CommonDialog1.FileName <> "" Then
Form1.MousePointer = 11
Open CommonDialog1.FileName For Input As #1 '打开用户所指定的输入文件(Open...For Input)
On Error GoTo toobig ' 处理所有可能发生的错误
Do Until EOF(1) '复制过程直至达到文件尾(EOF)或者字符串空间全部被占满为止
Line Input #1, lineoftext$ '将文件逐行复制到名为AllText$的字符串中(Line Input)
alltext$ = alltext$ & lineoftext$ & wrap$ '在文本框中显示AllText$字符串,并提供滚动条 '
Loop
Close #1
Form1.MousePointer = 0
Text3.Text = alltext$
End If
GoTo nextfile
toobig:
nextfile:
End Sub
Sub savetestnote()
wrap$ = Chr$(13) & Chr$(10)
CommonDialog1.Filter = "text filer (*.txt)*.txt"
CommonDialog1.ShowSave '使用通用对话框对象提示用户输入路径名
If CommonDialog1.FileName <> "" Then
Open CommonDialog1.FileName For Output As #3 'COPY到记录
Print #3, Text1.Text
Close #3
End If
End Sub
Sub cleartestnote()
Form1.Text1.Text = ""
End Sub
Function ASCNUM(TXT As String) As Byte
i = Asc(TXT)
Select Case Asc(TXT)
Case 48
ASCNUM = 0
Case 49
ASCNUM = 1
Case 50
ASCNUM = 2
Case 51
ASCNUM = 3
Case 52
ASCNUM = 4
Case 53
ASCNUM = 5
Case 54
ASCNUM = 6
Case 55
ASCNUM = 7
Case 56
ASCNUM = 8
Case 57
ASCNUM = 9
Case 65
ASCNUM = 10
Case 66
ASCNUM = 11
Case 67
ASCNUM = 12
Case 68
ASCNUM = 13
Case 69
ASCNUM = 14
Case 70
ASCNUM = 15
Case Else
ASCNUM = 16
End Select
End Function
Private Sub Cls_Click()
frmProperties.Show vbModal
End Sub
Private Sub Print_Click()
Form1.Text1 = buffer
End Sub
Private Sub Init_Click()
sign = 0
MSComm1.CommPort = 1
If MSComm1.PortOpen = False Then
MSComm1.Settings = "9600,n,8,1"
MSComm1.PortOpen = True
End If
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
MSComm1.Output = Chr$(2) & Chr$(27) & "]R" & Chr$(3)
MSComm1.Output = Chr$(2) & Chr$(27) & "ZB1" & Chr$(3)
buffer = ""
End Sub
Private Sub Form_Load()
'设置串口
Settings = GetSetting(App.Title, "属性", "设置", "") ' frmTerminal.MSComm1.Settings] If Settings <> "" Then
MSComm1.Settings = Settings
If Err Then
MsgBox Error$, 48
Exit Sub
End If
Else
MSComm1.Settings = "2400,N,8,1"
End If
CommPort = GetSetting(App.Title, "属性", "通信端口", "") ' frmTerminal.MSComm1.CommPort
If CommPort <> "" Then
MSComm1.CommPort = CommPort
Else
MSComm1.CommPort = 1
End If
Handshaking = GetSetting(App.Title, "属性", "握手", "") 'frmTerminal.MSComm1.Handshaking
If Handshaking <> "" Then
MSComm1.Handshaking = Handshaking
If Err Then
MsgBox Error$, 48
Exit Sub
End If
Else
MSComm1.Handshaking = 0
End If
THESMSTYPE = GetSetting(App.Title, "属性", "SMS", "") ' frmTerminal.MSComm1.CommPort
If THESMSTYPE <> "" Then
SMSType = Val(THESMSTYPE)
Else
SMSType = 1
End If
THENUMBER = GetSetting(App.Title, "属性", "NUMBER", "") ' frmTerminal.MSComm1.CommPort
If THENUMBER <> "" Then
End If
Readsmsno = 1
'显示状态栏
With Form1.StatusBar1.Panels
.Item(1).Text = "串口状态:" & "COM" & Form1.MSComm1.CommPort & " Set=" & Form1.MSComm1.Settings & " " & Form1.MSComm1.PortOpen
End With
End Sub
Private Sub mnuclear_Click()
cleartestnote
End Sub
Private Sub mnuclrdistxt_Click()
Form1.Text1.Text = ""
End Sub
Private Sub mnucommopen_Click()
MSComm1.PortOpen = Not MSComm1.PortOpen
mnucommopen.Checked = MSComm1.PortOpen
With Form1.StatusBar1.Panels
.Item(1).Text = "串口状态:" & "COM" & Form1.MSComm1.CommPort & " Set=" & Form1.MSComm1.Settings & " " & Form1.MSComm1.PortOpen
End With
End Sub
Private Sub mnucommseting_Click()
frmProperties.Show vbModal
End Sub
Private Sub mnuexit_Click()
Unload Me
End Sub
Private Sub mnuopen_Click()
opentestnote
End Sub
Private Sub mnusave_Click()
savetestnote
End Sub
Private Sub MSComm1_OnComm()
Dim buffer() As Byte
Dim Bufferlength As Integer
Select Case MSComm1.CommEvent
' Handle each event or error by placing
' code below each case statement
' 错误
Case comEventBreak ' 收到 Break。
Case comEventCDTO ' CD (RLSD) 超时。
Case comEventCTSTO ' CTS Timeout。
Case comEventDSRTO ' DSR Timeout。
Case comEventFrame ' Framing Error
Case comEventOverrun '数据丢失。
Case comEventRxOver '接收缓冲区溢出。
Case comEventRxParity ' Parity 错误。
Case comEventTxFull '传输缓冲区已满。
Case comEventDCB '获取 DCB] 时意外错误
' 事件
Case comEvCD ' CD 线状态变化。
Case comEvCTS ' CTS 线状态变化。
Case comEvDSR ' DSR 线状态变化。
Case comEvRing ' Ring Indicator 变化。
Case comEvReceive ' 收到 RThreshold # of chars.
'============================================================
Bufferlength = MSComm1.InBufferCount
While Bufferlength > 0
'**************************************************************
MSComm1.InputLen = Bufferlength
ReDim buffer(Bufferlength)
buffer = MSComm1.Input
For i = 0 To Bufferlength - 1
a = Hex(buffer(i))
If buffer(i) >= &H10 Then
Text1.Text = Text1.Text & "(" & a & ")"
Else
Text1.Text = Text1.Text & "(" & "0" & a & ")"
End If
Next i
'**************************************************************
Bufferlength = MSComm1.InBufferCount
Wend
'============================================================
Case comEvSend ' 传输缓冲区有 Sthreshold 个字符 '
Case comEvEOF ' 输入数据流中发现 EOF 字符
Case Else '
End Select
End Sub
Private Sub Text1_Change()
Form1.Text1.SelStart = Len(Form1.Text1.Text)
While Len(Form1.Text1.Text) > 1000
Form1.Text1.Text = ""
Wend
End Sub
革命多年,清风袖依然