關於WINCC Modbus TCPIP驅動如何讀取64位浮點數

1.問題描述

 

大家知道目前爲止WINCC Modbus TCPIP驅動是不支持64位浮點數的

 

 

但做項目往往會碰到從站使用這種類型數據,如累積流量值、電度量。那如何讀取呢?

 

2.解決方法

 

Modbus協議以一系列具有不同特徵的數據模型爲基礎。四個基本模型爲:

 

 

對於一個64位浮點數,就是以16-bits word爲數據模型,4個連續的保持寄存器。所以可以使用功能碼0x03分別讀取這4個連續的保持寄存器值,然後還原爲原64位浮點數。

 

如以Modbus Slave爲從站,設置WINCC要讀取的64位浮點數,其保持寄存器地址爲4x00001-4x00004。

 

 

在WINCC Modbus TCPIP驅動添加四個“無符號的 16 位值”變量讀取這4個保持寄存器的值

 

 

然後用以下C腳本還原爲64位浮點數

 

 

有一點要注意:爲了保證數據的一致性,4個連續的保持寄存器必須在一幀報文讀取。如下面的情況,可能會導致還原的浮點數不正確:

 

WINCC需讀取Modbus Slave的一個16位整型數據(其保持寄存器地址爲4x00001)、一個64位浮點數(其保持寄存器起始地址爲4x00100)(當然,對於這麼設計從站設備的人,可以認爲他不專業)。

 

由於WINCC優化了其Modbus TCPIP驅動報文(詳細內容請看以前推送的文章《WINCC MODBUS-TCP協議通道使用注意》),64位浮點數的4個寄存器會被分成兩幀報文讀取。

 

 

更多精彩內容,可關注本人微信公衆號scadaclub

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