zoukankan      html  css  js  c++  java
  • 基于Python的ModbusTCP客户端实现

    Modbus协议是由Modicon公司(现在的施耐德电气Schneider Electric)推出,主要建立在物理串口、以太网TCP/IP层之上,目前已经成为工业领域通信协议的业界标准,广泛应用在工业电子设备之间的互联。
    Modbus Poll和Modbus Slave是两款非常流行的Modbus设备仿真软件,支持Modbus RTU/ASCII和Modbus TCP/IP协议 ,经常用于测试和调试Modbus设备,观察Modbus通信过程中的各种报文。
    当用于支持Modbus RTU/ASCII协议时,ModbusPoll作为一个主站设备, ModbusSlave作为一个从站设备,从站设备接收主站设备的命令并返回数据。而当用于支持Modbus TCP/IP时,ModbusSlave作为一个服务器, ModbusPoll作为一个客户端,服务器接收客户端的命令并返回数据。客户端需要填写指定连接的远程服务器IP地址和端口号。

    图片描述
    这里主要介绍下用Python实现ModbusTCP客户端功能,同时使用ModbusSlave模拟一个服务器,用于互联调试。

    图片描述
    Python中提供了支持Modbus协议的第三方库——modbus_tk,下载地址为:https://pypi.org/project/modbus_tk/。使用时需要先导入modbus_tk库,然后简单地依照Modbus协议配置参数即可。当实现客户端功能时,需要配置如下参数:叉车配件
    slave:Modbus从站ID地址 。
    function_code:寄存器的功能码,主要的寄存器功能码如下所示:

    图片描述
    starting_address:寄存器起始地址,从0开始。
    quantity_of_x:寄存器连续个数。
    output_value:写命令时的数值。
    Scan Rate:读取数据的周期,程序中体现为执行 execute()方法的周期。

    如下例程实现了01和03两条命令读取服务器的数据,如下所示:

    import modbus_tk.modbus_tcp as mt
    import modbus_tk.defines as md
    
    # 远程连接到服务器端
    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:寄存器/线圈的数量
    # @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_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)
                
    

  • 相关阅读:
    Android AHandle AMessage
    android java 与C 通过 JNI双向通信
    android 系统给应用的jar
    UE4 unreliable 同步问题
    UE4 difference between servertravel and openlevel(多人游戏的关卡切换)
    UE4 Run On owing Client解析(RPC测试)
    UE4 TSubclassOf VS Native Pointer
    UE4 内容示例网络同步Learn
    UE4 多人FPS VR游戏制作笔记
    UE4 分层材质 Layerd Materials
  • 原文地址:https://www.cnblogs.com/xyou/p/10443508.html
Copyright © 2011-2022 走看看