python

python讀取modbus範例

原本是想用php寫來讀取modbus上的資料的,查了查文件發現php有點太麻煩了,且範例好像都快10年前了,現在php8可能會無法使用,就乾脆改用python好了。簡單又程式碼少太多了

首先需要先安裝modbus_tk

pip install modbus_tk

安裝好後這樣就可以了,我們先來說明一下modbus的設定

IP:192.168.2.123

port :502
modbus ID:1

控制碼:4

起始地址6C 這邊注意的是,一般文件給的地址會是hex的16進位地址,你需要把她轉成10進位

所以6C轉成10進位就會是108,下方範例程式就會需要輸入108

回傳數量:8

import modbus_tk.modbus_tcp as mt
import modbus_tk.defines as md
import json
# 遠端連線到伺服器端
master = mt.TcpMaster("192.168.2.123", port=502)
master.set_timeout(1.0)

# @slave=1 就是modbus ID 數值從 1 to 247.  0為廣播所有的站號
# @function_code=READ_HOLDING_REGISTERS:功能碼
#[控制碼01]READ_COILS
#[控制碼02]READ_DISCRETE_INPUTS
#[控制碼03]READ_HOLDING_REGISTERS 讀取輸入寄存器
#[控制碼04]READ_INPUT_REGISTERS 讀取輸入寄存器
#[控制碼05]WRITE_SINGLE_COIL 
#[控制碼06]WRITE_SINGLE_REGISTER
#[控制碼15]WRITE_MULTIPLE_COILS
#[控制碼16]WRITE_MULTIPLE_REGISTERS

# @starting_address=1:開始地址,如果說明文件是給16進位的地址如64 需要改為10進位成100
# @quantity_of_x=3:回傳地址的的數量
# @output_value:一個整數或可迭代的值:1/[1,1,1,0,0,1]/xrange(12)
# @data_format
# @expected_length
Hold_value = master.execute(slave=1, function_code=md.READ_INPUT_REGISTERS, starting_address=108, quantity_of_x=8, output_value=7)

print(json.dumps(Hold_value))  # 取到的暫存器的值格式為元組(456, 288)
Be the First to comment.

Leave a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

(若看不到驗證碼,請重新整理網頁。)