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