基于Python的ModbusTCP客戶端實(shí)現(xiàn)詳解
前言
Modbus協(xié)議是由Modicon公司(現(xiàn)在的施耐德電氣Schneider Electric)推出,主要建立在物理串口、以太網(wǎng)TCP/IP層之上,目前已經(jīng)成為工業(yè)領(lǐng)域通信協(xié)議的業(yè)界標(biāo)準(zhǔn),廣泛應(yīng)用在工業(yè)電子設(shè)備之間的互聯(lián)。
Modbus Poll和Modbus Slave是兩款非常流行的Modbus設(shè)備仿真軟件,支持Modbus RTU/ASCII和Modbus TCP/IP協(xié)議 ,經(jīng)常用于測試和調(diào)試Modbus設(shè)備,觀察Modbus通信過程中的各種報文。
當(dāng)用于支持Modbus RTU/ASCII協(xié)議時,ModbusPoll作為一個主站設(shè)備, ModbusSlave作為一個從站設(shè)備,從站設(shè)備接收主站設(shè)備的命令并返回數(shù)據(jù)。而當(dāng)用于支持Modbus TCP/IP時,ModbusSlave作為一個服務(wù)器, ModbusPoll作為一個客戶端,服務(wù)器接收客戶端的命令并返回數(shù)據(jù)??蛻舳诵枰顚懼付ㄟB接的遠(yuǎn)程服務(wù)器IP地址和端口號。

這里主要介紹下用Python實(shí)現(xiàn)ModbusTCP客戶端功能,同時使用ModbusSlave模擬一個服務(wù)器,用于互聯(lián)調(diào)試。

Python中提供了支持Modbus協(xié)議的第三方庫——modbus_tk,下載地址為:https://pypi.org/project/modbus_tk/。使用時需要先導(dǎo)入modbus_tk庫,然后簡單地依照Modbus協(xié)議配置參數(shù)即可。當(dāng)實(shí)現(xiàn)客戶端功能時,需要配置如下參數(shù):
slave:Modbus從站ID地址 。
function_code:寄存器的功能碼,主要的寄存器功能碼如下所示:

starting_address:寄存器起始地址,從0開始。
quantity_of_x:寄存器連續(xù)個數(shù)。
output_value:寫命令時的數(shù)值。
Scan Rate:讀取數(shù)據(jù)的周期,程序中體現(xiàn)為執(zhí)行 execute()方法的周期。
如下例程實(shí)現(xiàn)了01和03兩條命令讀取服務(wù)器的數(shù)據(jù),如下所示:
import modbus_tk.modbus_tcp as mt
import modbus_tk.defines as md
# 遠(yuǎn)程連接到服務(wù)器端
master = mt.TcpMaster("192.168.1.10", 502)
master.set_timeout(5.0)
# @slave=1 : identifier of the slave. from 1 to 247. 0為廣播所有的slave
# @function_code=READ_HOLDING_REGISTERS:功能碼
# @starting_address=1:開始地址
# @quantity_of_x=3:寄存器/線圈的數(shù)量
# @output_value:一個整數(shù)或可迭代的值:1/[1,1,1,0,0,1]/xrange(12)
# @data_format
# @expected_length
Hold_value = master.execute(slave=1, function_code=md.READ_HOLDING_REGISTERS, starting_address=1, quantity_of_x=3, output_value=5)
Hold_value = master.execute(slave=1, function_code=md.READ_HOLDING_REGISTERS, starting_address=1, quantity_of_x=3, output_value=5)
Coils_value = master.execute(slave=1, function_code=md.READ_COILS, starting_address=1, quantity_of_x=3, output_value=5)
print(Hold_value) # 取到的寄存器的值格式為元組(55, 12, 44)
print(Hold_value) # 取到的寄存器的值格式為元組(1, 1, 1)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
將Django項目遷移到linux系統(tǒng)的詳細(xì)步驟
這篇文章主要介紹了將Django項目遷移到linux系統(tǒng)的詳細(xì)步驟,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
TF-IDF算法解析與Python實(shí)現(xiàn)方法詳解
這篇文章主要介紹了TF-IDF算法解析與Python實(shí)現(xiàn)方法詳解,文章介紹了tf-idf算法的主要思想,分享了Python實(shí)現(xiàn)tr-idf算法所必要的預(yù)處理過程,以及具體實(shí)現(xiàn)代碼等相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。2017-11-11
Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之鏈表詳解
這篇文章主要介紹了Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之鏈表,詳細(xì)分析了鏈表的概念、定義及Python實(shí)現(xiàn)與使用鏈表的相關(guān)技巧,非常具有實(shí)用價值,需要的朋友可以參考下2015-04-04
使用python?matplotlib?contour畫等高線圖的詳細(xì)過程講解
最近學(xué)習(xí)了matplotlib中的高線圖的繪制,所以下面這篇文章主要給大家介紹了關(guān)于使用python?matplotlib?contour畫等高線圖的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
python字符串,元組,列表,字典互轉(zhuǎn)代碼實(shí)例詳解
這篇文章主要介紹了python字符串,元組,列表,字典互轉(zhuǎn)代碼實(shí)例詳解,需要的朋友可以參考下2020-02-02
Pygame實(shí)戰(zhàn)練習(xí)之炸彈人學(xué)院游戲
炸彈人學(xué)院想必是很多人童年時期的經(jīng)典游戲,我們依舊能記得抱個老人機(jī)娛樂的場景,下面這篇文章主要給大家介紹了關(guān)于如何利用python寫一個簡單的炸彈人學(xué)院小游戲的相關(guān)資料,需要的朋友可以參考下2021-09-09
python中找出numpy array數(shù)組的最值及其索引方法
下面小編就為大家分享一篇python中找出numpy array數(shù)組的最值及其索引方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04

