首先,非常感谢@SamWorld。看了他的博文,https://blog.youkuaiyun.com/baidu_26678247/article/details/65629434,实现了在树莓派下输入中文,本博文在树莓派上完成编辑。
1. 安装modbus-tk, sudo pip3 install modbus-tk
卸载掉pyserial、serial
sudo pip3 uninstall pyserial
sudo pip3 uninstall serial
重新安装pyserial
2. 编写代码(参考自https://blog.youkuaiyun.com/fan0520/article/details/51459057、
https://blog.youkuaiyun.com/xukai871105/article/details/21884065)
# -*- coding: utf_8 -*-
import sys
import logging
import serial
import modbus_tk
import modbus_tk.defines as cst
import modbus_tk.modbus_rtu as modbus_rtu
logger = modbus_tk.utils.create_logger("console")
#PORT = 1
PORT = "/dev/ttyAMA0"
if __name__ == "__main__":
try:
# 连接MODBUS TCP从机
master = modbus_rtu.RtuMaster(serial.Serial(port=PORT, baudrate=9600, bytesize=8, parity='N', stopbits=1, xonxoff=0))
master.set_timeout(5.0)
master.set_verbose(True)
logger.info("connected")
logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 0, 10))
#logger.info(master.execute(1, cst.WRITE_SINGLE_REGISTER, 0, output_value=21))
#send some queries
#logger.info(master.execute(1, cst.READ_COILS, 0, 10))
#logger.info(master.execute(1, cst.READ_DISCRETE_INPUTS, 0, 8))
#logger.info(master.execute(1, cst.READ_INPUT_REGISTERS, 100, 3))
#logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 100, 12))
#logger.info(master.execute(1, cst.WRITE_SINGLE_COIL, 7, output_value=1))
#logger.info(master.execute(1, cst.WRITE_SINGLE_REGISTER, 0, output_value=54))
#logger.info(master.execute(1, cst.WRITE_MULTIPLE_COILS, 0, output_value=[1, 1, 0, 1, 1, 0, 1, 1]))
#logger.info(master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 100, output_value=xrange(12)))
except modbus_tk.modbus.ModbusError as exc:
logger.error("%s- Code=%d", exc, exc.get_exception_code())
3. 测试
电脑端使用Modbus Slave