新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 利用VB實現PC與PLC的聯機控制

        利用VB實現PC與PLC的聯機控制

        作者: 時間:2016-12-19 來源:網絡 收藏

        序號

        控件類型

        控件名稱

        說明

        1

        form

        frmmain

        程序主窗體

        2

        frame

        Frame1

        框架

        3

        MSComm

        MSComm1

        串口通信控件

        4

        Timer

        Timer1

        定時器

        5

        CommandButton

        cmdzz

        正轉按鈕

        6

        CommandButton

        cmdfz

        反轉按鈕

        7

        CommandButton

        cmdtj

        停機按鈕

        8

        Label

        Labdjzt

        電機狀態顯示標簽

        添加上述控件后的程序窗體如圖4所示。

        PC機的控制程序如下:
        Private Sub Form_Load() 窗體加載過程
        MSComm1.CommPort = 1 通信控件選用PC機的串口1
        MSComm1.Settings = "9600,o,8,1" 設定串口1的波特率為9600bps,奇校驗,8位數據位,1位停止位
        MSComm1.PortOpen = True 打開串口1
        Timer1.Interval = 1000 定時器1的定時值為1s
        Timer1.Enabled = True 啟動定時器1
        End Sub

        Function com(a As String, b As Integer) 向PLC讀寫寄存器內容函數
        MSComm1.InBufferCount = 0 清空串口的接收緩沖區
        MSComm1.Output = a 將要發送的字符串從串口發送出去
        Do
        DoEvents
        Loop Until MSComm1.InBufferCount >= b 等待PLC的響應字符至一定位數
        com = MSComm1.Input 讀入串口接收到的字符串
        End Function

        Private Sub Timer1_Timer() 定時讀取Y0、Y1的值以判斷電機當前狀態
        a = "%01#RCP2Y0000Y0001**" + Chr(13) 定義讀Y0、Y1值的通信字符串
        s = com((a), 9) 讀Y0、Y1的當前值
        If Mid(s, 7, 1) = "1" Then 返回字符串中第7位為1表示Y0接通,電機正轉
        cmdzz.Enabled = False 電機已正轉,禁止操作正轉按鈕但可操作反轉按鈕
        cmdfz.Enabled = True
        Labdjzt.Caption = "電機當前狀態:正轉"
        ElseIf Mid(s, 8, 1) = "1" Then 反轉
        cmdfz.Enabled = False 電機反轉,禁止操作反轉按鈕但可操作正轉按鈕
        cmdzz.Enabled = True
        Labdjzt.Caption = "電機當前狀態:反轉"
        ElseIf Mid(s, 7, 1) = "0" And Mid(s, 8, 1) = "0" Then 停機
        cmdfz.Enabled = True 電機已停止,可操作正轉或反轉按鈕
        cmdzz.Enabled = True
        Labdjzt.Caption = "電機當前狀態:停止"
        End If
        End Sub

        Private Sub cmdzz_Click() 正轉指令
        a = "%01#WCSR01001**" + Chr(13) 定義將R100置1,啟動正轉的通信字符串
        s = com((a), 7)
        End Sub

        Private Sub cmdfz_Click() 反轉指令
        a = "%01#WCSR01011**" + Chr(13) 定義將R101置1,啟動反轉的通信字符串
        s = com((a), 7)
        End Sub

        Private Sub cmdtj_Click() 停機指令
        a = "%01#WCSR01021**" + Chr(13) 定義將R102置1使電機停轉的通信字符串
        s = com((a), 7)
        End Sub
        運行上述程序,既可在PC機上實現對電機正反轉以及停止的控制,也可在現地通過SB0、SB1和SB2按鈕實現對電機的控制;既可在現地啟動或停止電機轉動,也可在PC機上實現停機或電機轉動控制。由于PC機定時讀取PLC內部Y0、Y1的值,所以在現地操作改變電機的工作狀態時,在PC機程序中可顯示出當前電機的工作狀態并禁止相應的操作,真正實現了PC與PLC的聯機控制。

        6. 結束語

        上述設計已在實踐中應用。經驗證,可在此基礎上,增加聯機通信故障自動檢測報警功能,利用數據讀寫命令實現聯機大批量數據傳送,根據現地來的狀態信息增加PC機動畫演示功能,從而使PC與PLC的聯機控制程序更加完善,控制界面更加形象。根據上述原理,結合PC與PLC控制的特點,可在其它控制場合使用上述方法實現雙機甚至多機聯機控制。


        上一頁 1 2 下一頁

        關鍵詞: VBPCPLC聯機控

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 东阳市| 无为县| 隆昌县| 绥滨县| 云和县| 庆安县| 修文县| 怀来县| 吴桥县| 建宁县| 沙坪坝区| 依兰县| 渑池县| 原平市| 邵武市| 长汀县| 东台市| 华安县| 辽宁省| 道真| 浪卡子县| 平武县| 万载县| 朝阳市| 尼玛县| 阳山县| 乌拉特后旗| 金门县| 奇台县| 平远县| 栖霞市| 泸西县| 嵊州市| 万山特区| 凤城市| 天全县| 循化| 乐陵市| 两当县| 宝清县| 亳州市|