本帖最后由 lnight 于 2020-6-2 14:37 编辑
大佬您好,我在学习您的代码的时候出了一些问题,在学习的时候查了一下,读取modbus的库您用的可能是pycom-modbus,所以我去github上下了一份,里边有例程,其中读取端口的应该是这一段。
######################### RTU SERIAL MODBUS #########################
uart_id = 0x01
modbus_obj = Serial(uart_id, pins=('P9', 'P10'))
这里对应的应该是serial.py包里的:
class Serial:
def __init__(self, uart_id, baudrate=9600, data_bits=8, stop_bits=1, parity=None, pins=None, ctrl_pin=None):
self._uart = UART(uart_id, baudrate=baudrate, bits=data_bits, parity=parity, stop=stop_bits, timeout_char=10)
if ctrl_pin is not None:
self._ctrlPin = Pin(ctrl_pin, mode=Pin.OUT)
else:
self._ctrlPin = None
self.char_time_ms = (1000 * (data_bits + stop_bits + 2)) // baudrate
这里我猜测uart_id指的是RX、TX,比如uart_id=2,就代表RX2、TX2。
不过里边的pins代表什么还没有搞懂。我猜测是因为不同的设备,管脚不同,所以需要对RX、TX的管脚做定义。
我用的ESP32,upycraft上传的,想先直接把例程跑通,于是稍微改了一下main.py:
14. ######################### RTU SERIAL MODBUS #########################
15. uart_id = 0x02
16. modbus_obj = Serial(uart_id)
但是会报错
File "main.py", line 16, in <module>
File "serial.py", line 21, in __init__
TypeError: extra keyword arguments given
这个错我查了一下,是指有必要的关键词我没有给出。"main.py", line 16指的就是modbus_obj = Serial(uart_id)这句。
但是我看大佬写的有关这里的代码:
if __name__=='__main__':
ts=Serial(2)
print(hf_enginx(ts))
也是直接用的Serial(2),我猜测是直接定义的uart_id=2,忽略了后边的pins。
但是我不管怎么改,比如像您一样加上if __name__=='__main__':,或者按照例程一样加上pin变成modbus_obj = Serial(uart_id, pins=('P25', 'P27'))
也还是会报错。
File "<stdin>", line 8, in <module>
File "serial.py", line 21, in __init__
ValueError: UART(2) does not exist
不知道大佬当初编写这段的时候有没有遇见同样的错误,希望能给小弟一些指点,万分感谢。
|