上位機這樣玩,纔有意思!

自動化行業,正在慢慢往軟件行業靠近。

很多PLC工程師也開始慢慢意識到,掌握一門編程語言,變得越來越重要。

那麼PLC工程師學會編程之後,會是一種什麼樣的體驗?

我覺得最直接的體驗就是:原理性的東西懂得更多,技術棧更全面,可以自己獨立完成項目評估、製圖、選型、PLC程序開發調試,到上位機開發,甚至於更上層的WEB端、移動端。

言歸正傳,本文主要是分享一個工業現場常用的運動控制案例,從硬件選型到程序設計,再從本地調試到上位機開發調試。

這個案例算是一個比較簡單的案例,但是可以有效地將PLC與上位機結合起來,對於初學者來說,是一個比較適合的練手項目。

1、硬件選型

控制器:西門子200Smart PLC,型號爲ST20(DC-DC-DC)

驅動器:步進驅動器

電機:42mm步進電機

限位:3個限位開關,分別對應原點、左限位、右限位

平臺:單軸模組

按鈕指示燈:啓動、停止、運行狀態、3個行程開關(模擬完成信號)

2、硬件接線圖

 

 

3、PLC程序開發

S7-200 Smart PLC運動控制需要使用運動控制嚮導來實現,核心程序如下:

 

 

 

 

4、上位機程序開發

(1)I/O表:PLC程序編程中,會預留上位機接口,上位機I/O表如下所示:

 

 

(2)界面設計:上位機UI界面設計

 

 

(3)功能實現:上位機主要包含實時狀態與數據監控、速度及位置參數設置、系統日誌顯示、通信參數設置。

  • 實時狀態與數據監控

本案例與西門子PLC之間的通信方式採用S7通信,使用開源通信庫s7.net來實現,基於多線程實現數據的實時採集,並結合實際I/O進行數據解析。

        private void PLCCommunication()
        {
            while (!cts.IsCancellationRequested)
            {
                byte[] result = plc.ReadBytes(StoreType.DataBlock, 1, 0, 23);

                if (result != null && result.Length == 23)
                {
                    this.Invoke(new Action(() =>
                    {
                        //這裏進行實時狀態更新
                    }));

                    Thread.Sleep(10);
                }
            }
        }
  • 速度及位置參數設置

參數設置採用獨立的設置界面,通過窗體傳值來實現

 

 

代碼如下所示:
        /// <summary>
        /// 設定值
        /// </summary>
        public string setValue = string.Empty;
        private void btn_Set_Click(object sender, EventArgs e)
        {
            this.setValue = this.txt_SetValue.Text;
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
  • 系統日誌顯示

系統日誌基於ListView控件開發,實現日誌、報警、警告三種不同狀態區別顯示,可同時存儲至數據庫,便於後續追溯。

        private string CurrentTime
        {
            get { return DateTime.Now.ToString("HH:mm:ss"); }
        }
        //寫入日誌
        private void AddLog(int index, string log)
        {
            if (this.lstInfo.InvokeRequired)
            {
                this.lstInfo.Invoke(new Action(() =>
                {
                    ListViewItem lst = new ListViewItem(CurrentTime, index);
                    lst.SubItems.Add(log);
                    this.lstInfo.Items.Insert(0, lst);
                }));
            }
            else
            {
                ListViewItem lst = new ListViewItem(CurrentTime, index);
                lst.SubItems.Add(log);
                this.lstInfo.Items.Insert(0, lst);
            }
        }
  • 通信參數設置

通信參數爲系統參數,採用Winform的Settings來進行配置存儲,簡單快捷。

界面設計如下所示:

 

 

代碼如下所示:

        public SaveDefaultSettingDelegate SaveDefaultSetting;
        private void btn_Set_Click(object sender, EventArgs e)
        {
            CommSet set = new CommSet();
            try
            {
                set.IPAddress = this.txt_IPAddress.Text;
                set.CPUType = this.cmb_CPUType.Text;
                set.StoreTime = Convert.ToInt32(this.txt_StoreTime.Text);
                set.AutoStore = this.chk_AutoStore.Checked;
            }
            catch (Exception)
            {
                MessageBox.Show("請檢查數據格式是否正確","格式錯誤");
                return;
            }
            SaveDefaultSetting(set);
            MessageBox.Show("配置成功,立即生效", "配置成功");
            this.Close();                                                  
        }

5、寫在後面

近幾年, 隨着越來越多的設備開始加入IIoT 網絡(Industrial Internet of Things,工業物聯網簡稱IIoT),IT與OT之間的界限將逐漸消失,直到成爲一個或相同的系統爲止。

所以,越來越多的電氣工程師開始轉型上位機開發。因爲在已有電氣技能的基礎上,如果掌握了上位機開發技能,薪資達到20K,甚至30K,都會變得更容易。

想學習這個項目,可以加助教老師微信:thingerzj,找老師要相關的視頻。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章