在(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è)窗口:
窗口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
運行結果如下圖:
海爲(wéi / wèi)公衆号
海爲(wéi / wèi)雲APP
廈門海爲(wéi / wèi)科技有限公司
0592-3278716 (技術) | 4000-360-362 (商務)
海爲(wéi / wèi)總部:廈門市集美區軟件園三期C03棟13-14層 | 制造中心:廈門市翔安區火炬高新區(翔安)産業區垵邊南路336-2号4樓