<object id="ir2le"></object>
  • 加入收藏 在線留言 聯系我們
    關注微信
    手機掃一掃 立刻聯系商家
    全國服務熱線15267534595
    公司新聞
    經典WINCC浮點數輸入/輸出異常的處理方法
    發布時間: 2024-03-17 15:05 更新時間: 2024-12-27 09:10
    (一)模擬服務器環境搭建

    本例并不采用Modbus SIM或Modbus Slave做為服務器的原因是這兩個軟件可以通過DINT和REAL的顯示格式。通常在實際現場,設備側的寄存器存儲模式已經固定,不能修改,這樣就必須在上位中進行處理。利用施耐德UnityPro建立一個Modbus TCP的仿真服務器,并新建變量如下圖,變量aa和bb分別為REAL和Dint類型,在內存中都是占據%MW0,%MW1四個字節,通過在線監視可以看出,施耐德數據存儲是“小端模式”即數據高字存在高位存儲器中,即CDAB形式。

    圖片

    (二)WINCC通信

    在WINCC中新建驅動并新建a3和a4變量,分別為FLOAT和DINT類型,同樣在內存中都是占據%MW0和%MW1共四個字節,并在上位畫面中與相應的IO域關聯。

    圖片

    與施耐德仿真PLC通信成功后,不難發現%MW0和%MW1均與PLC上一一對應,但是REAL類型的a3變量不能顯示,a4類型的DINT變量與PLC側的DINT數據不一樣。通過對比不難發現在WINCC側DINT和REAL的存儲結構是高字儲存在低位,而在PLC側是高字儲存在高位,這樣就造成這種雙字類型的變量顯示異常。

    圖片

    (三)輸出值處理

    為了能正確顯示,需要在IO域輸出中利用C腳本進行高低字轉化,具體過程如下圖:

    圖片

    通過上述C腳本處理后REAL類型顯示值就與PLC側一致了,DINT類型的處理過程類似,就不在贅述。

    (四)輸入值處理

    通過上述方法處理后,這樣雖然可以正常的顯示,但是無法通過上位IO域輸入修改PLC側的變量數據。

    因此本文通過監聽輸入值改變的事件,然后在事件中利用腳本將輸入的值按照小端模式進行重新組合后再寫給變量,從而改變相應變量的值并且與PLC側數據同步。具體過程如下:

    圖片

    (五)IO域輸入/輸出連接不同變量的間接方法

    在西門子論壇中看到過兩個咨詢帖子,關于IO域的輸出和輸入連接不同變量的問題,通過官方的回復,基本確定目前并不支持該功能。

    圖片

    圖片

    通過前面解決浮點數顯示和輸入問題的思路,我們同樣可以可以利用C腳本間接實現一個IO域輸出、輸入關聯不同的變量。具體實現過程,各位網友可以按上述思路完成。

    (六)博途WINCC Modbus TCP驅動

    默認情況在博途WINCC中新建Modbus TCP驅動時,有一個改變字順序復制框,默認情況是沒有勾選的。

    圖片

    同時在博途WINCC下建立相同的變量進行測試,結果如下:(1)不勾選更改字順序,按小端處理,與PLC側數據一致。(2)勾選更改字順序,按大端處理,顯示數據異常。

    圖片


    聯系方式

    • 電  話:18126392341
    • 聯系人:梁濤
    • 手  機:15267534595
    • 微  信:15267534595