class ModbusRTUMaster – Modbus RTU master
ModbusRTUMaster implements the Modbus RTU master. ModbusRTUMaster support function codes 1 (Read Coils), 2 (Read Discrete Inputs), 3 (Read Holding Registers), 4 (Read Input Registers), 5 (Write Single Coil), 6 (Write Single Holding Register), 15 (Write Multiple Coils), and 16 (Write Multiple Holding Registers).
Micropython Example:
1# SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD 2# 3# SPDX-License-Identifier: MIT 4 5import os, sys, io 6import M5 7from M5 import * 8from unit import RS485Unit 9import modbus 10import time 11 12 13label0 = None 14label1 = None 15label2 = None 16label3 = None 17label4 = None 18label5 = None 19label6 = None 20label7 = None 21label8 = None 22label9 = None 23label14 = None 24label19 = None 25label24 = None 26label10 = None 27label15 = None 28label20 = None 29label25 = None 30label11 = None 31label16 = None 32label21 = None 33label26 = None 34label12 = None 35label17 = None 36label22 = None 37label27 = None 38label13 = None 39label18 = None 40label23 = None 41label28 = None 42modbusrtumaster_0 = None 43rs485_0 = None 44 45 46res = None 47hr = None 48coil = None 49 50 51def setup(): 52 global \ 53 label0, \ 54 label1, \ 55 label2, \ 56 label3, \ 57 label4, \ 58 label5, \ 59 label6, \ 60 label7, \ 61 label8, \ 62 label9, \ 63 label14, \ 64 label19, \ 65 label24, \ 66 label10, \ 67 label15, \ 68 label20, \ 69 label25, \ 70 label11, \ 71 label16, \ 72 label21, \ 73 label26, \ 74 label12, \ 75 label17, \ 76 label22, \ 77 label27, \ 78 label13, \ 79 label18, \ 80 label23, \ 81 label28, \ 82 modbusrtumaster_0, \ 83 rs485_0, \ 84 res, \ 85 hr, \ 86 coil 87 88 M5.begin() 89 Widgets.fillScreen(0x222222) 90 label0 = Widgets.Label("co", 65, 8, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 91 label1 = Widgets.Label("di", 135, 8, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 92 label2 = Widgets.Label("hr", 205, 8, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 93 label3 = Widgets.Label("ir", 275, 8, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 94 label4 = Widgets.Label("1000", 4, 45, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 95 label5 = Widgets.Label("1001", 4, 85, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 96 label6 = Widgets.Label("1002", 4, 125, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 97 label7 = Widgets.Label("1003", 4, 165, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 98 label8 = Widgets.Label("1004", 4, 205, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 99 label9 = Widgets.Label("a00", 65, 45, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 100 label14 = Widgets.Label("a01", 135, 45, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 101 label19 = Widgets.Label("a02", 205, 45, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 102 label24 = Widgets.Label("a03", 275, 45, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 103 label10 = Widgets.Label("a10", 65, 85, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 104 label15 = Widgets.Label("a11", 135, 85, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 105 label20 = Widgets.Label("a12", 205, 85, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 106 label25 = Widgets.Label("a13", 275, 85, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 107 label11 = Widgets.Label("a20", 65, 125, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 108 label16 = Widgets.Label("a21", 135, 125, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 109 label21 = Widgets.Label("a22", 205, 125, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 110 label26 = Widgets.Label("a23", 275, 125, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 111 label12 = Widgets.Label("a30", 65, 165, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 112 label17 = Widgets.Label("a31", 135, 165, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 113 label22 = Widgets.Label("a32", 205, 165, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 114 label27 = Widgets.Label("a33", 275, 165, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 115 label13 = Widgets.Label("a40", 65, 205, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 116 label18 = Widgets.Label("a41", 135, 205, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 117 label23 = Widgets.Label("a42", 205, 205, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 118 label28 = Widgets.Label("a43", 275, 205, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 119 120 rs485_0 = RS485Unit(2, port=(18, 17)) 121 rs485_0.init( 122 tx_pin=None, 123 rx_pin=None, 124 baudrate=115200, 125 data_bits=None, 126 stop_bits=None, 127 parity=None, 128 ctrl_pin=None, 129 ) 130 modbusrtumaster_0 = modbus.ModbusRTUMaster(uart=rs485_0, verbose=False) 131 hr = 0 132 res = modbusrtumaster_0.read_coils(1, 1000, 5, timeout=2000) 133 label9.setText(str(res[0])) 134 label10.setText(str(res[1])) 135 label11.setText(str(res[2])) 136 label12.setText(str(res[3])) 137 label13.setText(str(res[4])) 138 res = modbusrtumaster_0.read_discrete_inputs(1, 1000, 5, timeout=2000) 139 label14.setText(str(res[0])) 140 label15.setText(str(res[1])) 141 label16.setText(str(res[2])) 142 label17.setText(str(res[3])) 143 label18.setText(str(res[4])) 144 res = modbusrtumaster_0.read_holding_registers(1, 1000, 5, timeout=2000) 145 label19.setText(str(res[0])) 146 label20.setText(str(res[1])) 147 label21.setText(str(res[2])) 148 label22.setText(str(res[3])) 149 label23.setText(str(res[4])) 150 res = modbusrtumaster_0.read_input_registers(1, 1000, 5, timeout=2000) 151 label24.setText(str(res[0])) 152 label25.setText(str(res[1])) 153 label26.setText(str(res[2])) 154 label27.setText(str(res[3])) 155 label28.setText(str(res[4])) 156 157 158def loop(): 159 global \ 160 label0, \ 161 label1, \ 162 label2, \ 163 label3, \ 164 label4, \ 165 label5, \ 166 label6, \ 167 label7, \ 168 label8, \ 169 label9, \ 170 label14, \ 171 label19, \ 172 label24, \ 173 label10, \ 174 label15, \ 175 label20, \ 176 label25, \ 177 label11, \ 178 label16, \ 179 label21, \ 180 label26, \ 181 label12, \ 182 label17, \ 183 label22, \ 184 label27, \ 185 label13, \ 186 label18, \ 187 label23, \ 188 label28, \ 189 modbusrtumaster_0, \ 190 rs485_0, \ 191 res, \ 192 hr, \ 193 coil 194 M5.update() 195 hr = (hr + 1) % 65535 196 coil = not coil 197 modbusrtumaster_0.write_single_coil(1, 1000, coil, timeout=2000) 198 modbusrtumaster_0.write_single_register(1, 1000, hr, timeout=2000) 199 modbusrtumaster_0.write_multiple_coils(1, 1001, [coil, coil, coil], timeout=2000) 200 label9.setText(str(coil)) 201 label10.setText(str(coil)) 202 label11.setText(str(coil)) 203 label12.setText(str(coil)) 204 modbusrtumaster_0.write_multiple_registers(1, 1001, [hr, hr, hr], timeout=2000) 205 label19.setText(str(hr)) 206 label20.setText(str(hr)) 207 label21.setText(str(hr)) 208 label22.setText(str(hr)) 209 time.sleep(1) 210 211 212if __name__ == "__main__": 213 try: 214 setup() 215 while True: 216 loop() 217 except (Exception, KeyboardInterrupt) as e: 218 try: 219 from utility import print_error_msg 220 221 print_error_msg(e) 222 except ImportError: 223 print("please update to latest firmware")
UIFLOW2 Example:
cores3_rtu_master_example.m5f2
Constructors
Methods
- ModbusRTUMaster.read_coils(address, register, quantity, timeout: int = 2000) list
Read coils.
- 参数:
- 返回:
A list of coils. The item of the list is True or False.
UIFLOW2:

- ModbusRTUMaster.read_discrete_inputs(address, register, quantity, timeout: int = 2000) list
Read discrete inputs.
- 参数:
- 返回:
A list of discrete inputs. The item of the list is True or False.
UIFLOW2:

- ModbusRTUMaster.read_holding_registers(address, register, quantity, timeout: int = 2000) list
Read holding registers.
- 参数:
- 返回:
A list of holding registers. The item of the list is 0x0000 to 0xFFFF.
UIFLOW2:

- ModbusRTUMaster.read_input_registers(address, register, quantity, timeout: int = 2000) list
Read input registers.
- 参数:
- 返回:
A list of input registers. The item of the list is 0x0000 to 0xFFFF.
UIFLOW2:

- ModbusRTUMaster.write_single_coil(address, register, value, timeout: int = 2000) bool
Write a single coil.
- 参数:
- 返回:
The value of the coil.
UIFLOW2:

- ModbusRTUMaster.write_single_register(address, register, value, timeout: int = 2000) int
Write a single register.
- 参数:
- 返回:
the written value
UIFLOW2:

- ModbusRTUMaster.write_multiple_coils(address, register, values, timeout: int = 2000) int
Write multiple coils.
- 参数:
- 返回:
the written count.
UIFLOW2:



