回复:希望高手参与讨论--在WINCC中实现利用mscomm控件与串口通讯

醉夜清风

  • 帖子

    85
  • 精华

    0
  • 被关注

    0

论坛等级:游民

注册时间:2005-10-24

普通 普通 如何晋级?

发布于 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
革命多年,清风袖依然
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32889条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。