需求:通過(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