基于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)常用于測(cè)試和調(diào)試Modbus設(shè)備,觀察Modbus通信過(guò)程中的各種報(bào)文。
當(dāng)用于支持Modbus RTU/ASCII協(xié)議時(shí),ModbusPoll作為一個(gè)主站設(shè)備, ModbusSlave作為一個(gè)從站設(shè)備,從站設(shè)備接收主站設(shè)備的命令并返回?cái)?shù)據(jù)。而當(dāng)用于支持Modbus TCP/IP時(shí),ModbusSlave作為一個(gè)服務(wù)器, ModbusPoll作為一個(gè)客戶端,服務(wù)器接收客戶端的命令并返回?cái)?shù)據(jù)??蛻舳诵枰顚?xiě)指定連接的遠(yuǎn)程服務(wù)器IP地址和端口號(hào)。
這里主要介紹下用Python實(shí)現(xiàn)ModbusTCP客戶端功能,同時(shí)使用ModbusSlave模擬一個(gè)服務(wù)器,用于互聯(lián)調(diào)試。
Python中提供了支持Modbus協(xié)議的第三方庫(kù)——modbus_tk,下載地址為:https://pypi.org/project/modbus_tk/。使用時(shí)需要先導(dǎo)入modbus_tk庫(kù),然后簡(jiǎn)單地依照Modbus協(xié)議配置參數(shù)即可。當(dāng)實(shí)現(xiàn)客戶端功能時(shí),需要配置如下參數(shù):
slave:Modbus從站ID地址 。
function_code:寄存器的功能碼,主要的寄存器功能碼如下所示:
starting_address:寄存器起始地址,從0開(kāi)始。
quantity_of_x:寄存器連續(xù)個(gè)數(shù)。
output_value:寫(xiě)命令時(shí)的數(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:開(kāi)始地址 # @quantity_of_x=3:寄存器/線圈的數(shù)量 # @output_value:一個(gè)整數(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)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python中Scrapy+adbapi提高數(shù)據(jù)庫(kù)寫(xiě)入效率實(shí)現(xiàn)
本文主要介紹了Python中Scrapy+adbapi提高數(shù)據(jù)庫(kù)寫(xiě)入效率實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10python-docx修改已存在的Word文檔的表格的字體格式方法
今天小編就為大家分享一篇python-docx修改已存在的Word文檔的表格的字體格式方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Python實(shí)現(xiàn)生成對(duì)角矩陣和對(duì)角塊矩陣
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)生成對(duì)角矩陣和對(duì)角塊矩陣,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-04-04Pycharm中無(wú)法使用pip安裝的包問(wèn)題解決方案
本文主要介紹了Pycharm中無(wú)法使用pip安裝的包問(wèn)題解決方案,在終端通過(guò)pip裝好包以后,在pycharm中導(dǎo)入包時(shí),依然會(huì)報(bào)錯(cuò),下面就來(lái)介紹一下解決方法2023-09-09Python Pandas數(shù)據(jù)中對(duì)時(shí)間的操作
這篇文章主要介紹了Python Pandas數(shù)據(jù)中對(duì)時(shí)間的操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Python 實(shí)現(xiàn) T00ls 自動(dòng)簽到腳本代碼(郵件+釘釘通知)
這篇文章主要介紹了Python 實(shí)現(xiàn) T00ls 自動(dòng)簽到腳本(郵件+釘釘通知),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Python的爬蟲(chóng)包Beautiful Soup中用正則表達(dá)式來(lái)搜索
這篇文章主要介紹了Python的爬蟲(chóng)包Beautiful Soup中用正則表達(dá)式來(lái)搜索的技巧,包括使用正則表達(dá)式去搜索多種可能的關(guān)鍵字以及查找屬性值未知的標(biāo)簽等,需要的朋友可以參考下2016-01-01