廈門海爲(wéi / wèi)科技有限公司

請上(shàng)傳logo 請上(shàng)傳logo

國(guó)産PLC—Haiwell(海爲(wéi / wèi))PLC與VB通訊源程序講解

2008-05-07 11:09:14 haiwell 954

在(zài)做自動化工程項目時(shí)常常需要(yào / yāo)用上(shàng)位機對PLC進行監控,如果是(shì)大(dà)的(de)工程項目可以(yǐ)使用組态軟件來(lái)完成,但對中小項目爲(wéi / wèi)了(le/liǎo)節約成本,可以(yǐ)采用自己寫上(shàng)位機程序來(lái)完成對PLC的(de)監控。


海爲(wéi / wèi)提供了(le/liǎo)一(yī / yì /yí)個(gè)海爲(wéi / wèi)PLC的(de)通訊控件,通過這(zhè)個(gè)控件實現上(shàng)位機與海爲(wéi / wèi)PLC之(zhī)間的(de)通訊十分方便,它封裝了(le/liǎo)Modbus通訊協議和(hé / huò)HaiwellBus協議,以(yǐ)點的(de)形式實現對海爲(wéi / wèi)PLC的(de)數據訪問,對每個(gè)點可以(yǐ)定義它的(de)名稱/數據類型/小數長度/點注釋等,不(bù)必去了(le/liǎo)解Modbus通訊協議和(hé / huò)HaiwellBus協議的(de)具體内容,隻要(yào / yāo)有上(shàng)位機編程經驗就(jiù)可以(yǐ)完成。

海爲(wéi / wèi)PLC的(de)通訊控件和(hé / huò)例子(zǐ)源程序可以(yǐ)到(dào)海爲(wéi / wèi)網站(/download.asp)的(de)“下載中心”下載。

 

下面以(yǐ)VB爲(wéi / wèi)例介紹該控件的(de)使用,新建一(yī / yì /yí)個(gè)VB工程,添加2個(gè)窗口:

lQLPJxaJeo9MmU3NATLNAjCwLOMkAFDexwEC4k-9_sAnAA_560_306.png


lQLPJxaJeo9MmT_M2M0BdLAEmitl4IqTugLiT74KgNIA_372_216.png


窗口1的(de)程序如下:

Option Explicit

'啓動跑馬燈按鈕

Private Sub Command1_Click()

    '啓動跑馬燈,M0置1,點序号30

    HWPLCComm1.HWPLCs(1).SetPointValue 30, 1

End Sub

'停止跑馬燈按鈕

Private Sub Command2_Click()

    '停止跑馬燈,M1置1,點序号31

    HWPLCComm1.HWPLCs(1).SetPointValue 31, 1

End Sub

'啓動采樣按鈕

Private Sub Command3_Click()

' HWPLCComm1是(shì)海爲(wéi / wèi)PLC通訊控件名稱,Timer1是(shì)畫面刷新定時(shí)器

    HWPLCComm1.Run Not HWPLCComm1.RunFlag

    Timer1.Enabled = HWPLCComm1.RunFlag

    If HWPLCComm1.RunFlag Then

        Command3.Caption = "停止采樣"

        Shape2.FillColor = vbGreen ‘采樣指示燈綠色

    Else

        Command3.Caption = "啓動采樣"

        Shape2.FillColor = vbWhite ‘采樣指示燈紅色

    End If

End Sub

'窗口1裝載

Private Sub Form_Load()

    Dim i As Long

    '添加1台PLC,PLC地(dì / de)址爲(wéi / wèi)1,名稱爲(wéi / wèi)“1号PLC”

    HWPLCComm1.HWPLCs.AddPLC 1, "1号PLC"

    '在(zài)“1号PLC”下增加采樣點

    For i = 0 To 15

        HWPLCComm1.HWPLCs(1).AddPoint "y" & i '增加采樣點Y0-Y15

Next i

'在(zài)“1号PLC”下增加其他(tā)離散的(de)采樣點

    HWPLCComm1.HWPLCs(1).AddPoint "sv0", , "當前掃描時(shí)間 單位0.1ms"

    HWPLCComm1.HWPLCs(1).AddPoint "sv1", , "最小掃描時(shí)間 單位0.1ms"

    HWPLCComm1.HWPLCs(1).AddPoint "sv2", , "最大(dà)掃描時(shí)間 單位0.1ms"

    HWPLCComm1.HWPLCs(1).AddPoint "sv12", "Year", "年"

    HWPLCComm1.HWPLCs(1).AddPoint "sv13", "Month", "月"

    HWPLCComm1.HWPLCs(1).AddPoint "sv14", "Day", "日"

    HWPLCComm1.HWPLCs(1).AddPoint "sv15", "Hour", "時(shí)"

    HWPLCComm1.HWPLCs(1).AddPoint "sv16", "Minute", "分"

    HWPLCComm1.HWPLCs(1).AddPoint "sv17", "Second", "秒"

    HWPLCComm1.HWPLCs(1).AddPoint "sv18", "Week", "星期"

    HWPLCComm1.HWPLCs(1).AddPoint "sm3", , "10ms時(shí)鍾脈沖"

    HWPLCComm1.HWPLCs(1).AddPoint "sm4", , "100ms時(shí)鍾脈沖"

    HWPLCComm1.HWPLCs(1).AddPoint "sm5", , "1s時(shí)鍾脈沖"

    HWPLCComm1.HWPLCs(1).AddPoint "m0", "Start", "跑馬燈啓動"

    HWPLCComm1.HWPLCs(1).AddPoint "m1", "Stop", "跑馬燈停止"

    HWPLCComm1.HWPLCs(1).AddPoint "v0"

    HWPLCComm1.HWPLCs(1).AddPoint "v2"

    HWPLCComm1.HWPLCs(1).AddPoint "v100", , "實數例子(zǐ)", [REAL ] '實數類型爲(wéi / wèi)5

    HWPLCComm1.HWPLCs(1).AddPoint "ccv50", , "32位計數器"

    HWPLCComm1.HWPLCs(1).AddPoint "ccv100", , "16位計數器"

    '将點加到(dào)Listview中顯示, Y0-Y15 16個(gè)點不(bù)加入,用指示燈來(lái)顯示狀态

    Dim Newitem As ListItem

    For i = 17 To HWPLCComm1.HWPLCs(1).PointCount

        Set Newitem = ListView1.ListItems.Add(, , i)

        Newitem.SubItems(1) = HWPLCComm1.HWPLCs(1).iPoints(i).PointAddress

        Newitem.SubItems(2) = HWPLCComm1.HWPLCs(1).iPoints(i).PointName

        Newitem.SubItems(4) = HWPLCComm1.HWPLCs(1).iPoints(i).PointNote

    Next i

'将PLC地(dì / de)址和(hé / huò)名稱用标簽顯示

    Label3(0) = HWPLCComm1.HWPLCs(1).PLCAddress

    Label3(1) = HWPLCComm1.HWPLCs(1).PLCName

'将16隻指示燈的(de)标簽以(yǐ)點名稱顯示(Y0~Y15)

    For i = 1 To 16

        Label1(i - 1) = HWPLCComm1.HWPLCs(1).iPoints(i).PointName

    Next i

End Sub

'雙擊列表中的(de)點打開窗口2,對該點的(de)值進行修改

Private Sub ListView1_DblClick()

    Dim i As Long

    If Not ListView1.SelectedItem Is Nothing Then

        i = ListView1.SelectedItem.Index + 16

        Form2.vPointIndex = i

        Form2.Caption = "寫入值 " & HWPLCComm1.HWPLCs(1).iPoints(i).PointName

        Form2.Label1.Caption = "寫入值 " & HWPLCComm1.HWPLCs(1).iPoints(i).PointName & ":"

        Form2.Text1 = HWPLCComm1.HWPLCs(1).iPoints(i).PointValue

        Form2.Show 1

    End If

End Sub

' Timer1是(shì)畫面刷新定時(shí)器

Private Sub Timer1_Timer()

    '刷新值

    Dim i As Long

    '刷新Y0-Y15值

    For i = 1 To 16

        If HWPLCComm1.HWPLCs(1).iPoints(i).PointValue = 1 Then

            Shape1(i - 1).FillColor = vbRed '值=1,爲(wéi / wèi)真

        Else

            Shape1(i - 1).FillColor = vbWhite '值=0,爲(wéi / wèi)假

        End If

    Next i

    '刷新其他(tā)點值

    For i = 17 To HWPLCComm1.HWPLCs(1).PointCount

        ListView1.ListItems(i - 16).SubItems(3) = HWPLCComm1.HWPLCs(1).iPoints(i).PointValue

    Next i

End Sub

窗口2的(de)程序如下:

Option Explicit

Public vPointIndex As Long '公共變量,存儲被雙擊點的(de)序号

'确定按鈕

Private Sub Command1_Click()

    If Text1.Text = "" Then Exit Sub

'按确定,則寫入點的(de)值

    Form1.HWPLCComm1.HWPLCs(1).SetPointValue vPointIndex, Text1.Text

    Unload Me

End Sub

'取消按鈕

Private Sub Command2_Click()

    Unload Me

End Sub

Private Sub Text1_GotFocus()

    Text1.SelStart = 0

    Text1.SelLength = Len(Text1)

End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)

    If KeyAscii = 13 Then

        Command1_Click

    End If

End Sub


運行結果如下圖:


lQLPJxaJeo9Ml9DNAUrNAjCwcnyozf1ciXgC4k-92ICEAA_560_330.png

微信技術客服:08:30-21:00
0592-3278716
關注我們

海爲(wéi / wèi)公衆号

海爲(wéi / wèi)雲APP