目標:編寫一個程序將數據庫裏某個表的數據提取出來,轉換成能供支持ModbusTCP協議設備讀取的值
編寫內容:數據庫值獲取、數據類型(進制)轉換、MoubusTCP從機建立、數據存入從機保持寄存器(4xxxx)、多線程處理
一、各內容部分特點:
1、 數據庫值獲取
數據 庫爲遠程SQLSERVER 數據庫,嘗試了兩個Python庫:pypyodbc和pymssql,只有pymssql能遠程連接數據庫,pypyodbc也是很不錯的。因此採用pymssql 庫。數據庫裏的數據內容如下:每個StationNum的值是唯一的,要求需要根據這個值計算存入寄存器的寄存器的地址段。
2、數據類型(進制)轉換
從數據庫裏除了StationNum外,其他值都是實數,因爲每個寄存器的長度是16位,需要存實數的話,需要將實數(32位)轉化 成兩個16位的數存到兩個寄存器中,因此此處需要編寫 這樣的一個方法。
3、MoubusTCP從機建立
採用modbus_tk庫,該庫功能比較豐富,ModbusRTU等這些都可以採用該庫
4、數據存入從機保持寄存器(4xxxx)
前面提到需要根據StationNum計算存入寄存器的寄存器的地址段,因此也需要編寫這樣一個計算寄存器地址的方法,同時以上的每個數經轉化後需要兩個寄存器來存儲。
5、多線程處理
由於寄存器裏存儲的是數據庫裏實時的數據,因此需要把數據庫裏實時的數據及時更新到寄存器裏,此處採用生產消費者模型方式協調從數據庫裏讀數、數據存入寄存器這樣的一種方式,減少內存的負荷。
二、成果展示
用ModScan測試完全 正常.(ps:溝通交流)