自動化程式語言的未來

2020-12-13 控制工程中文版

未來的自動化操作可能使用多種程式語言,對於程式設計師來說,了解哪些語言是可用的、適合於哪些領域,以及如何用其創建可讀、有資源支持的代碼將至關重要。

梯形圖邏輯,是可編程邏輯控制器(PLC)的主要程式語言之一。它簡單易用,並以圖形方式表示繼電器觸點和線圈。不過,問題是:與其它程式語言相比,梯形圖邏輯能在多大程度上滿足當前和未來複雜的自動化需求?答案可能比繼電器和線圈要複雜的多。

梯形圖邏輯的起源

自動化的出現要早於PLC,那時使用繼電器網絡來充當應用的「大腦」。沒有編程人員的角色:只有工程師負責設計電路、電工負責組裝。當將邏輯繪製到圖紙上時,電路被記錄在有點類似梯子的標準結構中,因此被命名為「梯形圖」( 見圖1)。

圖 1: 一個簡單的梯形圖邏輯示例。本文圖片來源: Breen 機器自動化服務

當PLC 剛出現時,宣稱它們會為自動化帶來很多好處,但沒有人知道如何對其進行編程。然後有人想到用梯形圖對PLC 進行編程,這樣工業領域就可以利用現有的編程技能。工程師和電工也可以閱讀和理解程序。在很大程度上,自動化設計可以遵循與繼電器相同的模式。

在PLC 之前,繼電器控制需要佔用機櫃的物理空間,而這些機櫃需要花錢購買,接線也需要時間。它們只能實現開/ 關功能——在繼電器邏輯中,無法實現模擬、數學工具或數據收集功能( 除了特殊繼電器中的一些定時和計數功能)。即使是最大、最複雜的自動化系統,也受到繼電器物理特性的限制,因此梯形圖邏輯語言並不需要做太多。

如今,PLC 所用的處理器晶片,所佔用的空間、資金和時間成本比繼電器更少,但能實現的功能更多。另外,PLC 中使用的程式語言也在不斷擴展,以實現不斷增加的功能。現在,梯形圖邏輯可以實現的功能比過去更多。PLC 通常用於模擬控制,至於跟蹤部件數據( 條形碼、測試結果、校準)、控制運動和其它更多任務,梯形圖邏輯仍然是主要語言。

隨著程式語言的發展,自動化變得更加複雜。對PLC 進行編程已成為一種更專業化的職業。對電工來講,閱讀和維護梯形圖邏輯並不十分方便,而且在即將到來的新一代勞動力中,梯形圖邏輯也不是普遍掌握的技能。

「封裝使程序在不同的細節層次上更容易理解,

並使代碼可以復用。」

其它PLC 程式語言

國際電工委員會的工業控制編程標準IEC61131-3,以及個人計算機(PC) 編程也對工業編程產生了重要的影響。這些語言通常被視為梯形圖邏輯的補充,而不是對立面。

由於PLC 逐漸開始流行,工業界發現需要新的標準來指導編程。IEC 委員會通過IEC61131 標準(主要是第三部分(IEC 61131-3)中的語言)來解決這一需求。標準中所定義的可以互換的4種程式語言——梯形圖、功能塊圖、結構化文本和指令列表,還有一種被稱之為順序功能圖的程序組織語言。

每種語言都有自己的優點和缺點,它們可以在某個程序中一起使用,以便更好地支持不同的程序功能。對於哪種語言最適合哪種任務,要根據不同的應用情況進行討論( 見圖 2)。通常情況下,過程或以離散方式運行、或以連續方式運行。自動化也傾向於直接依靠數字量或模擬量輸入輸出(I/O)。

圖 2:IEC 61131-3 語言概述以及它們最適合編寫出可讀性程序的領域。

從PC 世界中蛻變而出的自動化語言,往往被用於特殊程序或外設的應用程式。這可能包括與資料庫的接口或為自動化外圍設備的編程,如攝像機和機器人。結構化文本 ( 在 IEC61131 中的定義) 與Pascal 語言非常相似。

IEC 61131 編程標準面世時,Pascal 語言是常用的PC 程式語言。此後,雖然Pascal 語言不再流行,但這是自動化行業向PC 行業借鑑的一個很好的例子。現在,在自動化中行業中,也有些正在應用的PC語言,例如C++、Java和C#。這些語言雖然功能強大,但在自動化領域還沒有得到廣泛的應用。

考慮程式語言的關鍵因素

在將梯形圖邏輯與其它潛在選項進行比較之前,了解程序真正需要做什麼,這一點非常重要。

程序必須能夠使自動化運行,雖然幾乎任何語言都能做到,但現實也對其提出了其它要求。這在很大程度上歸結於可讀性。

應該仔細考慮有關程式語言的3個關鍵問題:

A. 程式設計師或維護技術人員,能否查看代碼並了解其功能?

B. 能否快速發現問題,最大限度地減少機器停機時間?

C. 當需要新功能時,是否易於擴展程序?不同語言的特性會影響程式設計師編寫可讀程序的能力。

以下9 個方面可能會影響程式語言的選擇。

1. 基本知識

梯形圖邏輯應用廣泛,很容易就能找一個能閱讀理解程序的人。雖然某些行業對其它IEC 61131 語言表現出一定的偏好,但並沒有被普遍採用或理解。自動化中使用的PC語言往往非常流行,並且有大量的支持資源,但這些資源並不總能應用到工業領域,這就降低了可能的潛在收益。

2. 內部文檔

每種語言都有一種方法,可以讓程式設計師用簡單的語言來解釋程序的意圖。在梯形圖邏輯中,這主要是用迴路注釋和標籤( 變量)注釋來完成的,它們適用於簡單的迴路,但對較大的迴路或數學函數的幫助則較小。其它IEC 61131 語言各不相同,但通常很適合記錄它們擅長的內容。例如,結構化文本在數學計算和循環結構文檔方面表現良好。PC 語言往往有更多的功能,可用於內部文檔,有時甚至會自動從原始碼生成文檔,為程式設計師或技術人員創建手冊,以參考和快速了解整體結構。

3. 決策結構和循環

簡單來講,編程歸結為「如果發生這種情況,就那樣去做」。這是一個名為「如果,那麼」的決策結構。在本文討論的所有語言中,此結構都易於使用和理解。但是,如果程式設計師想重複做同一件事情,梯形圖邏輯對這些結構支持的並不是特別好,通常會導致代碼的可讀性較差。而結構化文本和PC 語言往往更擅長常見的決策和循環結構。

4. 數學

加、減法很容易,在任何語言中都能處理的很好,但當涉及複雜的數學功能時,那又會怎樣呢?梯形圖邏輯支持算術和一些基本函數,如絕對值或平方根,但如果計算涉及的內容更多,它們的可讀性往往較低。從視覺效果上,注釋與它們記錄的內容是分開的,而且重複執行數學運算並不是特別好,因為循環功能並不完美。結構化文本和PC 語言功能往往更強大,因為它具有更強大的數學功能。PC 語言提供的高級數學函數,幾乎可以用於任何目的,還可打包,以方便使用。

5. 可視性

閱讀一個不熟悉的程序,就像通過紙管閱讀一本探險小說,不得不在書的不同部分之間來回切換,因此一次只能看到頁面的一部分。適合屏幕顯示的代碼量,可能會影響程式設計師判斷程序功能的執行和方法。通常情況下,屏幕上只能同時顯示1 到5 行的梯形邏輯。它的圖形性質使其信息密度很小,程式設計師難以「看到」整個程序。而順序功能圖,雖然也是圖形化的,由於具有較高級的屬性,因此可以在一定程度上避免這個問題,就像一本帶有目錄的短篇小說。基於文本的語言( 結構化文本和PC 語言)信息量往往更密集,在屏幕上一次可以顯示30-50 行代碼。

6. 封裝、代碼復用

有什麼措施可以應對不斷增加的複雜性?開車時,司機並不需要考慮點火時間、牽引力控制或發動機冷卻策略。所有其它無關的東西都被抽象掉,自成一體、自我管理。在編程中,這被稱為「封裝」。封裝的好處,不僅僅是讓程序在不同的細節層次上更容易理解;而且這也意味著代碼可以復用。

如果根據程序設計,用機器來計算一天中每個小時的整體設備效率,則可以對其進行編程:計算一次整體設備效率,然後每小時復用一次。梯形圖邏輯和其它IEC 61131 語言,都可以很好地做到這一點。PC 語言增加了面向對象功能,這使其變得更強大。IEC 61131 提供了面向對象的規定,但PLC 製造商並不總是執行這些規定,這意味著程式設計師可能無法使用它們。

7. 庫文件

庫文件允許用戶通過將經封裝、測試的代碼添加到程序中,使代碼復用提升到一個新的水平。仍然用汽車作例子,雖然用戶不知道引擎蓋下有什麼部件,但仍然可以駕駛它。梯形圖邏輯和IEC 語言對類似功能的支持有限。PC 語言有很多庫文件支持,而且通常是免費的。並不是為了與梯形圖邏輯一較高下,但它們確實是經常適用於梯形圖邏輯不太適用的領域,如數學、視覺檢查和數據處理。

8. 模擬與數字

在許多方面, 模擬與數字參數有點類似於數學參數。梯形圖邏輯在數位訊號和信息方面做得非常好, 但在模擬方面卻不太擅長。功能塊是另外一種 IEC61131 語言,它在模擬信號方面做得非常好,但在數位訊號方面卻不太擅長。結構化文本和PC語言,能很好地處理這些,但由於它們更靈活,因此程式設計師需要更好地組織代碼以提高可讀性。

9. 確定性

在自動化應用中,按照循環周期( 例如,每15 毫秒) 讀取輸入、執行程序和寫入輸出,對控制器(PLC、PC) 很重要。這就是所謂的確定性。梯形圖邏輯和所有 IEC 61131 語言都是確定性的。PC 語言各不相同。例如,C++ 可以是確定性的,但像 Java和 C# 這樣的高級語言,通常不具有確定性。

最好的選擇是什麼

那麼梯形圖邏輯與其它邏輯是如何匹配的呢?它仍然受到離散自動化行業的青睞,在這些行業中,數字輸入和輸出是常態。另一方面,在模擬輸入和輸出佔主導地位的過程工業,則更多的使用功能塊語言,來處理這部分代碼。

當然,行業偏好只由上述因素之一,技術支持也很重要。現有的技術支持,在很大程度上是歷史上適用規範的體現,因為最近的歷史決定了當今的勞動力經驗。由於梯形圖邏輯長期以來被廣泛採用,所以使用不同的程式語言可能看起來像是一個未卜的前景。

大量新畢業的大學生有基於文本的語言經驗,但並沒有梯形圖邏輯的經驗。隨著勞動力的更新換代,並且隨著更多支持文件的出現,行業偏好可能會傾向於基於文本的語言。未來,自動化操作很可能會包括多種語言。只用一種語言思考問題,可能會對實現這些目標產生不利影響。

PLC 將使用一種或多種語言,眾多外圍設備也是如此。對於程式設計師來說,了解哪些語言是可用的、哪種語言適合於哪些領域,以及如何用其創建可讀、有資源支持的代碼將至關重要。

本文關鍵概念:

■梯形圖邏輯更多受到離散廠商的青睞。

■對於更複雜的應用程式,IEC 61131-3和PC程式語言可能更適用。

■任何應用程式都可能涉及多種程式語言,因此儘可能多了解幾種語言大有裨益。

思考一下:

在梯形圖邏輯和其它程式語言中做選擇時,哪些因素對您的實施最重要?

-完-

本文來自於《控制工程中文版》(CONTROL ENGINEERING China )2019年01-02月刊《封面故事》欄目,原標題為:自動化程式語言的未來

本期雜誌封面

想要免費閱讀每期雜誌內容,請查閱《控制工程中文版》微信訂閱號自定義菜單。

相關焦點

  • 為什麼 Python 不是未來的程式語言?
    Python 現在如此火爆,已發展成為一種非常通用的語言,無論是從入門級選手到專業技術數據挖掘、科學計算、圖像處理、人工智慧,Python 都可以勝任。它會是未來的程式語言嗎?它是完美無缺的程式語言嗎?有人發出了不同的聲音。
  • 計算機程式語言的發展簡史,人工智慧與雲計算程式語言!
    學習一兩門計算機程式語言也如當初學習英文一樣的火熱,隨著人工智慧AI和雲計算的不斷發展,Python語言和Scala語言已經成為這兩個領域裡面最為火熱的程式語言了,可以預知未來學習計算機程式語言的人也一樣會如同學習英文一樣的成為一種新常態,並且成為一種穩定的常態。以下筆者將以自己的學習認知,簡單的闡述一下計算機程式語言的發展。
  • 職場提升新技能,風變編程Python讓繁瑣的工作自動化
    近年來,隨著人工智慧的飛速發展,作為人工智慧第一程式語言的Python越來越熱門,國家政策方面開始推廣編程教育,不少企業在招聘條件中都列出了「具備Python技能」的字樣。因此,很多比較有遠見的職場人士都開始考慮是否要學點Python知識傍身,以備不時之需。
  • 兒童編程的意義與未來
    今天作為站在IT的角度跟大家好好談論一下編程教育的意義、價值及未來。編程能夠提升小朋友的邏輯思維、抽象思維是肯定沒有錯的。但是提升邏輯性和抽象性思維最終的目的需要各位家長朋友好好思考一下。大部分的80後、90後甚至00後對編程其實都沒有太多的概念的,對編程的認識可能也就只有編程這兩個字,具體編程的幹什麼,要達到什麼目的是一知半解的。
  • 初學編程,學哪種語言比較好
    現在,隨著技術不斷擴展,單純的會一種程式語言已經不能滿足企業的需要,很多IT人都是身懷多種絕技,但是好在,程式語言是相通的,比如你學會了C,再學C++或Python就相對容易很多。所以,初學編程,還是要選擇一種注重基礎的語言,比如說Java,這樣對以後其它程式語言的學習幫助很大。
  • 不要再爭了,最有錢途的程式語言在這裡
    說到程式語言之爭,經常會聽到這樣一句話「PHP 是最好的語言」。
  • 人工智慧時代,程式語言的學習方向該如何選擇?
    AI幫助研究,軍事,健康,交通控制,自動化支持,自動化製造,欺詐檢測等多個領域的人類。學習哪種程式語言來深入探索 AI?一個擁有大量優秀機器學習和深度學習庫的語言當然是首選。哪一種程式語言適合人工智慧?
  • Elixir: 程式語言的未來
    這篇文章談一談最近火爆的 Elixir,同時說一下對程式語言選擇的看法。同時作為 Erlang 發燒友,Elixir 不可不提。即使有了那麼多程式語言 Elixir 也值得接觸。
  • Elixir:程式語言的未來
    http://toutiao.io/download這篇文章談一談最近火爆的 Elixir,同時說一下對程式語言選擇的看法。同時作為 Erlang 發燒友,Elixir 不可不提。即使有了那麼多程式語言 Elixir 也值得接觸。
  • 新手學編程該選擇哪個語言?各程式語言人員的需求與難度分析
    各種語言就好比文字,編程的過程就是用文筆書寫詩篇,假設對於語言的應用已經十分透徹了,那麼編程的難點在哪裡?是使用的思路,還是各種算法,還是以人腦卻用電腦的方式思考問題?下面就給大家分析目前熱門的一些程式語言,話不多說了,來一起看看吧。
  • 網絡編程和自動化基礎-42
    本篇開始介紹網絡可編程性堆棧中的第一種編碼格式:可擴展標記語言 (XML)。XML用於對網絡可編程協議的消息進行編碼。
  • 程式語言Python的應用
    有固件編程、調試、測試原型硬體和軟體、測試生產樣品、致力於質量控制以及看似永無止境的數據收集、評估和分析。Python如何幫助解決所有這些問題?輸入Python,瑞士軍刀語言Pythonn非常擅長成為一種通用的程式語言。像HDL(VHDL、Verilog等硬體描述語言)這樣的語言做一件特定的事情,比如合成到硬體。
  • 讓軟體自己寫軟體,機器編程未來會取代程式設計師嗎?
    【CSDN 編者按】機器編程的可行性增大促使這一想法加快落入實地,事情的發展開始令人期待。英特爾為未來跨架構編程時代所設計的機器編程將會怎樣影響程式設計師的世界?軟體能否實現編寫軟體?這樣的趨勢下,如果有一款工具可以讓計算機自己編程豈不是解決了這個矛盾?基於這種思考,英特爾提出了「機器編程」這個概念,旨在通過自動化工具提升開發效率。機器編程是什麼?
  • 最受程式設計師歡迎的十大程式語言
    、Web後臺開發人員、EJB開發人員、接口測試和自動化測試的測試人員等。   多年以來,Java始終高居最受歡迎的程式語言榜首,許多科技公司都是使用Java來開發軟體和應用程式,社會需求很大。Java做了大量的功能封裝,以jar包的方式提供,簡單易用,還具有很好的延展性。Java屬於解釋性語言,需要運行在Java虛擬機上,具有良好的跨平臺特性。除了Java開發崗位,做接口測試和自動化測試的測試人員也會使用Java編寫測試代碼。
  • Arduino編程| 從0到1認識程式語言
    因此我們需要知道什麼是程序,Arduino開發過程中我們需要用到什麼程式語言(Arduino既是開發板的名稱,也是一種基於C/C++的程式語言),以及熟悉一下現有的程式語言種類。什麼是程序?認識程序語言計算機發展100多年以來,出現了許許多多的程式語言,這些語言中可以分為高級語言和低級語言兩大類,高階語言顧名思義更加高級,更加符合人類思維的語言、低階語言則是更傾向於底層硬體。
  • 最適合新手的三門程式語言
    朝九晚五的上班族想要學習編程,首先你要確定你學習編程的最終目的什麼,是為了將來改行?還是只是興趣愛好?這非常重要,並且影響你今後學習的動力。目前國內最火熱的程式語言當屬JAVA,其好處在於就業標準低,學成後一般大專以上便可入職,但不建議新手學習。其實程式語言有非常多的共通之處,學好一門語言之後,再學另外一門很容易就能學會,這裡推薦C語言,C++,python。
  • vb程式語言是做什麼用的_VB程式語言有哪些
    什麼是程式語言   程式語言(programming language),是用來定義電腦程式的形式語言。它是一種被標準化的交流技巧,用來向計算機發出指令。一種計算機語言讓程式設計師能夠準確地定義計算機所需要使用的數據,並精確地定義在不同情況下所應當採取的行動。
  • Python程式設計師的聖經:《Python編程快速上手:讓繁瑣工作自動化》
    圖源:unsplashPython可謂是當今世界上最受歡迎的程式語言之一了。它簡單易懂,但功能強大,可以處理多種問題。然而現實不會一帆風順,學程式語言必須要持之以恆!Python學習者需要持之以恆,並在學習中成長。與Python有關的書有上百本,然而沒有任何一本書可以與下面這本書相媲美:《Python編程快速上手:讓繁瑣工作自動化》。學習者僅需要深入閱讀這本書。
  • 新語言的新未來
    量子程式語言可用於控制現有的物理設備、估算未來設備上量子算法的執行成本、進行量子計算的教學,或者驗證量子算法及其應用。圖1|量子編程(來源:Fossbytes)不管是新手、經驗豐富的從業者,研究人員或開發人員,都在使用量子程式語言,以實現突破性進展,或將已知概念與現實問題相結合。
  • 未來有望幹掉Python和JavaScript的程式語言
    Python 和 JavaScript 是當今最熱門的兩種程式語言。但是,它們不可能永遠位居榜首。最終,它們一定會失寵,就像所有的程式語言一樣。這很可能在未來十年內就會發生。哪些程式語言有望取代它們呢?下面就是我列出的挑戰者名單。由於 Flutter 框架和 Google 的認可,這門語言迅速流行起來。