串口与wincc通讯

我要做用wincc读取一个智能仪表的读数,智能仪表支持R232串口通讯,日本的仪表,厂家没有相关的读取读数的程序,需要我自己写一个。哪个老师有相关wincc与串口通讯的案例,给我发一个具体的代码(网上找到的都是不完整的代码),让我参考一下,谢谢了!

问题补充:
objMSComm1.Settings = "9600,N,8,1"

最佳答案

需要知道仪表的通讯端口设置参数,在WINCC里要编写VBA脚本程序。
这里有一段程序,你可以参考下:高精度电压表(24bit)  
Public Sub ComPortOpen() ”开串口
    With MSComm1
        .CommPort = PortValue              ”使用COM1
        .Settings = "9600,N,8,1"       ”设置通信口参数
        .InBufferSize = 40
        ”设置MSComm1接收缓冲区为40字节
        ”.OutBufferSize = 2
        ”设置MSComm1发送缓冲区为2字节
        .InputMode = comInputModeBinary
        ”设置接收数据模式为二进制形式
        .InputLen = 1
        ”设置Input 一次从接收缓冲读取字节数为1
        ”.SThreshold = 1
        ”设置Output 一次从发送缓冲读取字节数为1
        .InBufferCount = 0  ”清除接收缓冲区
        ”.OutBufferCount = 0     ”清除发送缓冲区
        ”MaxW = -99
        ”最大值赋初值
        ”MinW = 99             ”最小值赋初值
        ”w = 0
        ”数据个数计数器清零
        .RThreshold = 1
        On Error Resume Next
        ”设置接收一个字节产生OnComm事件
        If .PortOpen = False Then
            ”判断通信口是否打开
            .PortOpen = True       ”打开通信口
            If Err Then        ”错误处理
                msg = MsgBox(" 串口 COM" & PortValue & " 无效! ", vbOKOnly, "警告")
                Exit Sub
            End If
        End If
    End With
    ”MsgBox "端口已打开"
End Sub
Public Sub ComPortClose() ”关串口
    MSComm1.PortOpen = False
    ”   MsgBox "端口已关闭"
End Sub
Private Sub MSComm1_OnComm()
    Call recive
End Sub
Private Sub Option1_Click(Index As Integer)
    If MSComm1.PortOpen = True Then
        Call ComPortClose
    End If
    PortValue = Index + 1
    Call ComPortOpen
End Sub
Private Sub recive() ”检测起始位并接收数据
    Dim Buffer As Variant
    Dim Arr() As Byte
    Dim inData(5) As Byte
    Dim count  As Integer
    Dim temp As Byte    
”  MsgBox "OnComm"
    With MSComm1
       Select Case .CommEvent
            ”判断MSComm1通信事件
                Case comEvReceive
                    ”收到Rthreshold个字节产生的接收事件
                    Buffer = .Input
                    Arr = Buffer
                   
                    ”读取一个接收字节
                    ” Text1.Text = Arr(0)
                    If Arr(0) = &H1B Then
                        .RThreshold = 0
                        Do
                            DoEvents
                        Loop Until .InBufferCount >= 4
                       
                        For i = 1 To 4
                            ”count = .InBufferCount
                            Buffer = .Input
                            Arr = Buffer
                            inData(i) = Arr(0)
                        Next i
                        If inData(4) = &HA Then
                            If (inData(1) Mod 64) >= 32 Then
                                .RThreshold = 1
                                Exit Sub
                            End If
                            valueFlag = 1
                            ”0.000003814697265625
                            temp = inData(1) Mod 16
                            If temp <= 7 Then
                                value = inData(1) Mod 8
                                value = value * 256 * 256
                                value = value + Val(inData(2)) * 256
                                value = value + Val(inData(3))
                                value = value * 3.814697265625E-06
                                ”Text1.Text = Format(value, "0.000,000")
                            Else
                                value = inData(1) Mod 8
                                value = value * 256 * 256
                                value = value + Val(inData(2)) * 256
                                value = value + Val(inData(3))
                                value = value * 3.814697265625E-06
                                value = 0 – value
                            End If
                            temp = inData(1) Mod 128
                            ” test OF
                            If temp >= 64 Then
                                If value < 0 Then
                                    value = value – 0.000004
                                Else
                                    value = value + 0.000004
                                End If
                            End If
                            ”检测自动刷新
                            If Check1.value Then
                                 ”valueFlag = 1
                                 Call display
                            End If
                        Else
                            .RThreshold = 1
                            Exit Sub
                        End If
                        .InBufferCount = 0
                        .RThreshold = 1
                    End If
            Case Else
        End Select
    End With
    ”Text1.Text = Text1.Text + 1
End Sub
Private Sub Option2_Click(Index As Integer)
    func = Index + 1
End Sub
Public Sub display() ”判断功能并显示
   
    ”功能选择
    Select Case func
        Case 1 ”当前值
            value2 = value
           
        Case 2 ”平均值
            If numCount > 100000 Then
                numCount = 1
                valueSum = 0
            End If
            If valueFlag = 1 Then
                valueSum = valueSum + value
                value2 = valueSum / numCount
                numCount = numCount + 1
                valueFlag = 0
                Label6.Caption = Str(numCount – 1)
            End If
        Case 3 ”最大值
            If value > value2 Then
                value2 = value
            End If
        Case 4 ”最小值
            If value < value2 Then
                value2 = value
            End If
        Case Else
    End Select
    ”Text1.Text = Str(valueSum)
    Label1.Caption = Format(value2, "0.000,000")
End Sub

提问者对于答案的评价:
谢谢了,参考一下

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc177128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年6月19日
下一篇 2017年6月19日

相关推荐

  • wincc实现登陆窗口

    wincc实现登陆窗口,正确登陆主画面,并且根据登陆不同的权限,操作,屏蔽不同设备,如何实现??? 最佳答案 1.打开WinCC项目里的用户管理器,创建用户和功能授权。 …

    SIMATIC WinCC 2019年6月11日
  • 帮忙学习WINCC

    想学WINCC但手头缺少资料,所以请教各位帮忙。什么地方可以下载。或发到我的QQ。 453875249@qq.com 谢谢帮助。 最佳答案 给你邮箱发了一些资料…

    SIMATIC WinCC 2019年6月11日
  • wincc出现故障

    请问哪位老师给我指点一下wincc安装以后出现这个故障应该怎样处理? 图片说明:    最佳答案 缺少授权。SIMATIC软件授权与使用 https:…

    2017年5月28日
  • 关于Ipc477集成式工控机

    现在有个问题请教大家,手头买了一个新的Ipc477IE的集成式触摸屏,但是无法校准,光点总是跑偏,问问大家遇到过吗? 钻石用户推荐最佳答案 装个驱动重新校准一下。用于 W…

    SIMATIC WinCC 2021年7月5日
  • WINCC与300通讯,隔夜掉线问题。

    现场wincc做上位机,通过DP带3个300PLC站,半夜工厂PLC端需要断电。早上运行正常给PLC送电后,wincc这边通讯上不来,什么也不需要动,就重新激活下项目就好了,什么原…

    SIMATIC WinCC 2021年7月5日
  • WINCC 图库为何不能使用 如何解决?

    各位大侠,我在使用中发现我的WINCC 全局库内的图象文件不能在编辑画面时直接拖拽使用。打上眼镜也看不到图象的缩略图。请问这是为何以及解决方法!多谢! 问题补充:但是图库…

    SIMATIC WinCC 2019年6月11日
  • 我用Wcc2007怎么打不开MP227 10”TOUCH啊?

    我用Wcc2007怎么打不开MP227 10”TOUCH啊?一打开就出现显示“无法将数据库的HIM站(1)连接到SQL服务器,请确认HIM和-LOG。LDF文件相匹配”,…

    SIMATIC WinCC 2019年6月11日
  • wincc vbs 登陆系统函数

    看了VC心里就烦,感觉VB好用一些,想做一个系统试试,其它的都完成了可是就是不知道怎么做一个登陆和退也登陆,望有哪位大侠可以赐教一下! 最佳答案 1.WinCC中可以热键调用登录对…

    SIMATIC WinCC 2019年6月11日
  • WINCC 如何读取串口数据

    用MSCOMM控件的程序怎么编写Dim dataMsgBox 1If item.InBufferCount>0 ThenMsgBox&…

    SIMATIC WinCC 2017年6月27日
  • AS410-5H PO扩展

    AS410-5H PO不够用了,如何在线扩展?能用常规的u盘AS PO授权扩展吗? 最佳答案 必须购买专门的PO扩展包,有100PO和500PO两种规格的扩展包…

    SIMATIC WinCC 2021年7月5日