modbus-master-读写

  • 通过modbus_tk模块包实现各功能

modbus的应用场景

作为master端,读取机器人寄存器数据、往机器人寄存器中写入数据。

作为master端的应用

主要的方法
  • exec(slave=1, function_code=READ_HOLDING_REGISTERS, starting_address=0, quantity_of_x=0, output_value=0, data_format="", expected_length=-1)
参数说明:
@slave=1 : identifier of the slave. from 1 to 247. 
@function_code=READ_HOLDING_REGISTERS:功能码
@starting_address=100:寄存器的开始地址
@quantity_of_x=3:寄存器/线圈的数量
@output_value:一个整数或可迭代的值:1/[1,1,1,0,0,1]/xrange(12)
@data_format:对接收的数据进行格式化
@expected_length:(没对这个设置过)
例子

example 1:读取寄存器数据

  • 读取寄存器数据
  • 解释一波:
    接收后返回的值,是元组,元组中值的个数由quantity_of_x决定。
    quantity_of_x最大值为127。
import modbus_tk.modbus_tcp as mt
import modbus_tk.defines as md

# 通过MODBUS方式获取机器人心跳
# 需要有机器人的继电器地址、端口号,接收的数据格式内容。
def heart_status():
    # 远程连接到slave端(从)
    ip = "127.0.0.1"
    port = 502

    master = mt.TcpMaster(ip, port)
    master.set_timeout(5.0)

    while True:
        # 获取想要的寄存器的数据
        status = master.execute(slave=1, function_code=md.READ_HOLDING_REGISTERS, starting_address=0,
                                quantity_of_x=5)
        print("status== ", status)  # 结果是一个元组,里面有5个值,由quantity_of_x决定的

if __name__ == "__main__":
    heart_status()

example 2:向寄存器写入数据

  • 向寄存器写入数据
  • 解释一波:
    starting_address: 向哪个寄存器写入数据的地址;多写的话就是开始地址了;
    output_value: 为想要写入的值;
    data_format: 根据实际情况去更改。
def robot_on():
    ip = "127.0.0.1"
    port = 502

    # 向第9个寄线器的写入值,这里写入1
    master = mt.TcpMaster(modbus_ip, modbus_port)

    # WRITE_SINGLE_REGISTER写入的是单个寄存器,所以值是一个,也可以写成[1]
    master.execute(1, md.WRITE_SINGLE_REGISTER, starting_address=9, output_value=1, data_format='BBBBB')  

if __name__ == '__main__':
    robot_on()
数据格式化

data_format的参考unpcak中的格式字符串内容

modbus-master-读写

转载于:https://blog.51cto.com/feature09/2167108

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Modbus是一种常用的串行通信协议,其主从架构适用于工控领域。STM32是一系列微控制器芯片,其中包含了强大的处理器和周边设备,适用于工业控制、通信等应用。HAL是STM32提供的硬件抽象层,可以简化STM32芯片的驱动和编程过程。FreeRTOS是一个流行的实时操作系统,可以帮助开发者进行多线程编程、任务调度等操作。 在使用Modbus通信协议的过程中,通常使用STM32芯片作为主机或从机,通过HAL驱动与外设进行通信。通过FreeRTOS实现多任务调度,可以使得主从设备之间的通信更加稳定可靠。具体实现过程中,开发者需要熟悉Modbus协议的通信机制和STM32芯片的相关知识,同时掌握HAL驱动和FreeRTOS操作系统的编程方法。相应的,也可以选择其他适用于工控领域的通信协议和芯片平台进行开发。 ### 回答2: Modbus是一种通信协议,它被广泛应用于工业自动化领域。Modbus协议采用主从结构,主设备控制整个通信过程,从设备接收主设备发送的指令并返回相应的数据。STM32是一系列单片机产品,Hal是针对STM32开发的一套低层驱动库,FreeRTOS是一种流行的实时操作系统。 在使用STM32单片机实现Modbus主从通信时,可以使用Hal库提供的相关函数来对串口进行初始化和设置,同时可以使用FreeRTOS来实现多任务并行运行。对于Modbus协议的实现,可以利用从设备的地址进行区分,主设备通过寄存器的方式与从设备进行通信,而从设备则需要根据寄存器的指令进行相应的数据处理和返回。 总之,通过使用STM32、Hal库和FreeRTOS可以方便地实现Modbus主从通信,提高工业自动化控制系统的效率和稳定性。 ### 回答3: Modbus,又称为Modicon通信协议,是一种基于串行传输的通信协议。Modbus协议中定义了Master-Slave模式的通信方式,其中Master可以向Slave发送/命令,Slave可以回复数据给Master。STM32是一种32位的嵌入式微控制器,可以通过外围设备如串口等实现Modbus的通信。HAL则是ST公司提供的硬件抽象层,可以简化开发者对系统引脚和外设的访问。FreeRTOS则是一种开源的实时操作系统,可以帮助开发者实现多任务系统。 因此,modbus-master-slave-stm32-hal-freertos指的是使用STM32芯片作为Modbus通信的主体,使用HAL层引脚和外设抽象库简化访问,使用FreeRTOS实现基于多任务的系统设计,实现Modbus通信的Master-Slave模式。这种模式可以用于控制系统的监控和控制,能够实现高效、准确、可靠的数据交换,广泛应用于自动控制、仪器仪表、工业自动化等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值