多路複用在HMI上的使用

不愿透露姓名的小村村發表於2024-04-14

這裡主要是利用多路複用在HMI上做到單頁面切換IO變數的功能,對於系統中要顯示的IO數量很多的時候適用。
系統搭建:CPU1215+KTP900系列HMI
方法如下:
1. 畫面模板
建立如下元素

  • 複選文字框
  • 狀態指示器(小圓點)
  • 符號IO域
    如圖:

.在畫面中我對輸入和輸出分別做了一組IO畫面。
.符號IO域顯示的預設文字來自文字列表
.此處有16路輸入(IW)和16路輸出(QW);對應了總共32個小圓點和32個符號IO域。

2. 文字列表的建立
在文字列表中,需要新建的文字列表一共4組,分別對應輸入核取方塊,輸入IO顯示;輸出核取方塊,輸出IO顯示。

  • 輸入輸出文字列表框如下:

問:為什麼值是0,2,4,6,8..?
.答:(因為我是用的IW顯示的,一個word佔用了兩個位元組)。
.又問:為什麼這個值就一定是連續的,它不可以是隨心所欲的嗎?(畢竟我的註釋內容裡的地址就不連續)
.答:看到後面就知道了,後面會解釋。

  • 輸入輸出註釋文字列表如下:


    這裡需要把你的符號表的註釋全部匯入過來,換句話說,只要你的符號表寫的夠詳細和完整,這裡就只是Ctrl+C/Ctrl+V的事。
    3. 建立HMI變數
  • 為你之前建立的符號IO域分配相應的變數

.16組input16組output對應了最開始畫面裡面橘黃色的文字所使用的變數。

  • 建立地址變數以及多路複用變數

.要把訪問模式改成<絕對訪問>,符號訪問是用不了多路複用的。
.有心人或許會發現,我這裡用的是DB而不是直接用的IW/QW。這是因為IW/QW在實際工程中可能不是連續增長的(比如0,2,4,6,8,10..)。畢竟你接到的祖傳程式碼中IO地址可能是放飛自我的,這就需要你多做一步工作,就是把IO全部按照你想要的規則對映(說成序列化也行)到你的DB地址中,然後註釋依舊按照實際的IO地址去註釋。

4.變數計算方法
我們都知道,在PLC中,一個byte是8個bit。一個word是2個byte。

  • 複選文字框的變數連線:

.uint型別的I_Address和Q_Addres分別連線到輸入和輸出的文字列表(就是0,2,4,6,8..連續變化那個)

  • I_Address和Q_Addres的變數線性縮放:
    Y = aX + b

.Y表示in/out文字(橘色那個)
.X表示 I_Address或Q_Addres
.b表示bit。

縮放截圖如下:

.這個縮放主要是為了把地址對映給文字註釋(細節:你發現變數的註釋文字列表下標是0123456的順序增長的了嗎?)
.uint型別佔16個bit,所以你的線性縮放一共16次,當b=15的時候就可以了。

5.連線變數
在畫面中,需要把你的元素和對應的變數連線起來。

  • 文字核取方塊變數連線

.這個就不講了,上面剛講完

  • 符號IO域的變數連線

.文字內容來自文字列表
.變數值是剛剛上面的線性縮放計算出來的
.QW同理,只是input變成output

  • 小圓點指示器的變數連線

.輸入引用I_Adderss,輸出引用Q_Adderss
.單個位,注意我為什麼I0.0是從8開始的。這裡涉及到大端模式和小端模式的概念,具體概念可以百度解釋。
.西門子PLC採用大端模式,僅位元組調換,位的順序不變。

  • 總結
    由上,這就是多路複用在HMI上的一種用法,當然也有一些其他用法,但是萬變不離其宗。好像在博圖V19之後,在PLC內部也可以使用IO做多路複用了(未求證,不保真...)

相關文章