【Raspberry Pi Zero W 试用体验】+python的学习之路2

  • PYTHON
  • 我爱下载
  • LV5工程师
  • |      2017-06-23 14:52:33
  • 浏览量 1335
  • 回复:0
本帖最后由 我爱下载 于 2017-6-23 14:56 编辑 在python的学习之路1中,我已经搭建好了基本环境,使用modbus_tk库来作为modbus的驱动库,这次动真的,和英飞凌的H2Go模块通过Modbus接口完成电机驱动控制。 基本过程是,树莓派zero W作为modbus主机,通过串口与H2Go的Modbus 从机通讯,通过命令行输入控制命令,调节H2Go的正反转,启动和停止,加速和减速等。 H2Go的配合程序可以看我的这个帖子:https://bbs.icxbk.com/community/thread-95454-1-1.html 这是树莓派和H2Go的接线图,利用树莓派的串口和H2Go的串口向量,完成物理连接。 运行结果展示,上面一堆的信息是python程序运行时候打印出来的 利用了Modbus_tk的RTU主机代码修改来的。 # -*- coding: utf_8 -*- import sys import serial import modbus_tk import modbus_tk.defines as cst from modbus_tk import modbus_rtu import time #PORT = 'COM4' PORT = "/dev/serial0" def main(): """main""" try: global logger logger = modbus_tk.utils.create_logger("console") # 连接MODBUS rtu从机 # master = modbus_tcp.TcpMaster(host="192.168.2.2") global master master = modbus_rtu.RtuMaster( serial.Serial(port=PORT, baudrate=115200, 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, 1000, 5)) # 读输入寄存器 # logger.info(master.execute(1, cst.READ_INPUT_REGISTERS, 0, 16)) # 读线圈寄存器 # logger.info(master.execute(1, cst.READ_COILS, 0, 16)) # 读离散输入寄存器 # logger.info(master.execute(1, cst.READ_DISCRETE_INPUTS, 0, 16)) # 单个读写寄存器操作 # 写寄存器地址为0的保持寄存器 # logger.info(master.execute(1, cst.WRITE_SINGLE_REGISTER, 1001, output_value=21)) # logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 1001, 1)) # 写寄存器地址为0的线圈寄存器,写入内容为0(位操作) # logger.info(master.execute(1, cst.WRITE_SINGLE_COIL, 0, output_value=0)) # logger.info(master.execute(1, cst.READ_COILS, 0, 1)) # 多个寄存器读写操作 # 写寄存器起始地址为0的保持寄存器,操作寄存器个数为4 # logger.info(master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 999, output_value=)) # logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 999, 5)) # 写寄存器起始地址为0的线圈寄存器 # logger.info(master.execute(1, cst.WRITE_MULTIPLE_COILS, 0, output_value=)) # logger.info(master.execute(1, cst.READ_COILS, 0, 4)) except modbus_tk.modbus.ModbusError, e: logger.error("%s- Code=%d" % (e, e.get_exception_code())) if __name__ == "__main__": main() # str = raw_input('Enter your input:') # list = str.split(" ") if(len(sys.argv) >= 5): list2 = for x in sys.argv1:]: list2.append(eval(x)) list2.insert(0, 0x55AA) print(list2) else: print('请输入4个数字参数,1-使能,2-正反转,3-pwm占空比,4-pwm频率!') logger.info(master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 999, output_value = list2)) logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 999, 5)) 如上是程序源码,执行的时候需要在命令行中输入参数,例如 python modbusmaster.py 0 1 10 1000
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子