從簡單案例了解PLC編程與上位機程序開發調試
2023年01月11日 11:07:12
來源:云南昌暉儀表制造有限公司 >> 進入該公司展臺
閱讀量:12
自動化行業,正在慢慢往軟件行業靠近。
很多PLC工程師也開始慢慢意識到,掌握一門編程語言,變得越來越重要。
那么PLC工程師學會之后,會是一種什么樣的體驗?很多人最直接的體驗就是:原理性的東西懂得更多,技術棧更全面,可以自己獨立完成項目評估、制圖、選型、PLC程序開發調試,到上位機開發,甚至于更上層的WEB端、移動端。
言歸正傳,昌暉儀表在本文分享一個工業現場常用的運動控制案例,從硬件選型到程序設計,再從本地調試到上位機開發調試。這個案例算是一個比較簡單的案例,但是可以有效地將PLC與上位機結合起來,對于初學者來說,是一個比較適合的練手項目。
1、硬件選型控制器:200Smart PLC,型號為ST20(DC-DC-DC)驅動器:步進驅動器電機:42mm步進電機限位:3個限位開關,分別對應原點、左限位、右限位平臺:單軸模組按鈕指示燈:啟動、停止、運行狀態、3個行程開關(模擬完成信號)
2、硬件接線圖
3、PLC程序開發S7-200 Smart PLC運動控制需要使用運動控制向導來實現,核心程序如下:

4、上位機程序開發①I/O表:PLC程序編程中,會預留上位機接口,上位機I/O表如下所示:
②界面設計:上位機UI界面設計
③功能實現:上位機主要包含實時狀態與數據監控、速度及位置參數設置、系統日志顯示、通信參數設置。◆實時狀態與數據監控本案例與西門子PLC之間的通信方式采用S7通信,使用開源通信庫來實現,基于多線程實現數據的實時采集,并結合實際I/O進行數據解析。private void PLCCommunication(){ while (!cts.IsCancellationRequested) { byte[] result = plc.ReadBytes(StoreType.DataBlock, 1, 0, 23); if (result != null && result.Length == 23) { this.BeginInvoke(new Action(() => { //這里進行實時狀態更新 })); Thread.Sleep(10); } }}
◆速度及位置參數設置參數設置采用獨立的設置界面,通過窗體傳值來實現。
代碼如下所示:/// /// 設定值/// 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之間的界限將逐漸消失,直到成為一個或相同的系統為止。
版權與免責聲明:
1.凡本網注明"來源:歐亞貿易網"的所有作品,版權均屬于歐亞貿易網,轉載請必須注明歐亞貿易網。違反者本網將追究相關法律責任。
2.企業發布的公司新聞、技術文章、資料下載等內容,如涉及侵權、違規遭投訴的,一律由發布企業自行承擔責任,本網有權刪除內容并追溯責任。
3.本網轉載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品來源,并自負版權等法律責任。
4.如涉及作品內容、版權等問題,請在作品發表之日起一周內與本網聯系。