學(xué)習(xí)筆記python-modbus rtu的實(shí)現(xiàn)

需求:通過(guò)modbus協(xié)議,從各類(lèi)傳感器獲取數(shù)據(jù),實(shí)時(shí)顯示測(cè)得的數(shù)據(jù)。
1)需要先安裝python依賴(lài)包pyserial和pymodbus_tk。
安裝方法:cmd里直接運(yùn)行 pip install pyserial。

pip install pyserial

(由于我的系統(tǒng)是win7 32位,安裝python時(shí)不知為何裝不上pip,最后是手動(dòng)離線(xiàn)安裝的,直接運(yùn)行pip出錯(cuò),需要輸入python -m pip install pyserial)。
安裝pymodbus_tk時(shí)也出錯(cuò)

image.png

無(wú)奈只好也離線(xiàn)安裝,安裝包下載地址https://github.com/ljean/modbus-tk。下載好后,cmd cd進(jìn)入安裝包目錄,運(yùn)行下面指令即可完成安裝。

python setup.py install

2)模擬串口數(shù)據(jù),需要兩個(gè)工具:
Configure Virtual Serial Port Driver可以創(chuàng)建虛擬串口;


image.png

Modbus Slave,用于模擬slave,產(chǎn)生數(shù)據(jù),發(fā)送串口com1,接收串口com2。


image.png

3)連接串口
  master = modbus_rtu.RtuMaster(serial.Serial(port="com2",baudrate=9600, bytesize=8, parity='N', stopbits=1))
'''
port ——端口號(hào)
baudrate——波特率
bytesize——數(shù)據(jù)位
parity——校驗(yàn)位
stopbits——停止位
'''
  master.set_timeout(5.0)
  master.set_verbose(True)

4)讀取數(shù)據(jù)

def getdata():
    Hold_value = master.execute(1, cst.READ_HOLDING_REGISTERS, 0, 9)  # 參數(shù)可修改
#1——從機(jī)地址
#cst.READ_HOLDING_REGISTERS——功能碼,讀保持寄存器
#0——寄存器起始地址
#9——寄存器數(shù)量
    lb2.configure(text=Hold_value[0]+Hold_value[1]/100)# 在標(biāo)簽lb2顯示值
    app.after(1000,getdata) # 每隔1s調(diào)用函數(shù) getdata自身獲取數(shù)據(jù)

注意,Hold_value是一個(gè)元組,圖示數(shù)據(jù)輸出值為(12,44,0,0,0,0,0,0,0,)
地址0的值為Hold_value[0]
5)顯示界面,用標(biāo)簽顯示即可


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容