基于Modbus树莓派控制多台变频器的方法及应用实例

文:张双驰 潘芝渭2018年第四期

  基于Modbus树莓派控制多台变频器的方法及应用实例

  张双驰  潘芝渭

  金丰(中国)机械工业有限公司研发中心

  摘要:通过实例详细介绍了树莓派扩展RS485/GPIO模块,控制多台变频器的硬件设置、软件配置及代码编制方法。指出这种方法的独特优点和应用前景。

  关键词:modbus_tk,树莓派,汇川变频器

  1、前言

  推出树莓派产品的初衷是用于教育,它只有一个40脚的串行端口GPIO,直接应用它,只能做一些实验和简单的工程应用。今在GPIO上扩展RS485/GPIO模块,使它具有Modbus通讯能力,就可以实时控制变频器,从而开发出具有实用价值的工程项目。

  图1是某冲床群控系统部分框图,介绍如下。

  2、系统配置

  图1硬件配置图

  硬件配置:

  变频器:汇川MD380+MD380IO1[1],树莓派:3B+RS485/GPIOShieldForRPiV3.0。

  软件配置:

  修改树莓派配置:关闭蓝牙,关闭控制台,使串口专用于Modbus通讯。操作系统:Linux,编程软件:python_3.4.2,通讯软件:Modbus_tk_0.5.4,界面编程软件:pyqt5

  3、代码编制

  3.1配置Modbus_tk

  设置modbus_rtu通讯模式,设置通讯参数:9600,8N1。读取变频器参数后,需要将数据存放在内存,以便后续处理,为此导入日志文件。

  importserial

  importmodbus_tk

  importmodbus_tk.definesascst

  frommodbus_tkimportmodbus_rtu

  PORT="/dev/ttyAMA0"

  logger=modbus_tk.utils.create_logger('console')

  master=modbus_rtu.RtuMaster(serial.Serial(port=PORT,baudrate=9600,bytesize=8,

  parity='N',stopbits=1,xonxoff=0))

  master.set_timeout(0.5)

  master.set_verbose(True)

  logger.info("connected")

  importlogging

  3.2分割日志文件

  读取的变频器运行数据存放在日志文件中,随着时间的推移,文件变得日益庞大,最后使系统瘫痪,因此,需要对日志文件进行分割,所谓分割,就是保留一部分记录,其余抛弃,达到瘦身目的。有2种分割方法①按文件大小分割②按时间间隔分割,本例按方法②分割,每2秒分割一次,最多保留5个文件。

  下面的代码读取1#变频器起始地址为7000H的12个数据,存放在名称为“pzw”的日志文件中(分割后的日志文件及备份小于0.2MB),和程序文件放在同一文件夹内。

  logger.info(master.execute(1,cst.READ_HOLDING_REGISTERS,28672,12))

  fromlogging.handlersimportTimedRotatingFileHandler

  if__name__=='__main__':

  logFilePath='pzw'

  logger=logging.getLogger('')

  logger.setLevel(logging.INFO)

  handler=TimedRotatingFileHandler(logFilePath,when='s',interval=2,backupCount=5)

  formatter=logging.Formatter('%(asctime)s-%(message)s')

  handler.setFormatter(formatter)

  logger.addHandler(handler)

  3.3处理日志文件

  为了准确获取5台变频器的参数,需要对日志文件“pzw”进行分析:

  2018-05-2519:42:11,200-->1-3-112-0-0-12-95-15

  2018-05-2519:42:11,306-<-1-3-24-0-0-14-16-16-232-0-0-0-0-0-0-0-0-0-0-0-0-1-252-1-240-0-134-87-101

  2018-05-2519:42:11,395-(0,3600,4328,0,0,0,0,0,0,508,496,134)

  2018-05-2519:42:11,396-->2-3-112-0-0-12-95-60

  2018-05-2519:42:11,485-<-2-3-24-0-0-10-140-15-127-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-135-13-10

  2018-05-2519:42:11,527-(0,2700,3967,0,0,0,0,0,0,0,0,135)

  2018-05-2519:42:11,528-->3-3-112-0-0-12-94-237

  2018-05-2519:42:11,614-<-3-3-24-0-0-10-240-15-217-0-0-0-0-0-0-0-0-0-0-0-0-0-2-0-1-0-32-7-88

  2018-05-2519:42:11,655-(0,2800,4057,0,0,0,0,0,0,2,1,32)

  2018-05-2519:42:11,656-->4-3-112-0-0-12-95-90

  2018-05-2519:42:11,743-<-4-3-24-0-0-13-72-12-7-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-4-33-208-137

  2018-05-2519:42:11,834-(0,3400,3079,0,0,0,0,0,0,0,0,1057)

  2018-05-2519:42:11,835-->5-3-112-0-0-12-94-139

  2018-05-2519:42:11,923-<-5-3-24-0-0-10-200-11-252-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-1-4-33-182-98

  2018-05-2519:42:11,965-(0,2760,3068,0,0,0,0,0,0,0,1,1057)

  发现:①每条记录去掉头部日期时间后,第1个字符就是变频器的站号②含有变频器参数的记录的字符数远大于其他记录,根据这2个特点,编制如下代码:

  withopen('pzw')asfile_object:

  lines=file_object.readlines()#逐行读文件,存到表lines中

  n=len(lines)#获取表的长度

  foriinrange(n):

  lines[i]=(lines[i])[27:]#截取表第27项到末尾,保存到表

  iflen(lines[i])>63and(lines[i])[0]=='1':#判断站号和是否是数据

  abc1=lines[i]#存放到表abc1中

  a1=abc1[7:]#截取表abc1第7项到末尾,保存到表a1

  b1=a1.split('-')#以‘-’为分隔符将字符串分割为新的表

  u0_00_1=str(float(int(b1[0])*256+int(b1[1]))/100)#变频器输出频率

  self.l1_1.setText(u0_00_1+'Hz')#标签显示

  ................

  u0_11_1=str((int(b1[22])*256+int(b1[23]))/4)#pt100左轴承温度

  self.l7_1.setText(u0_11_1+'℃')

  iflen(lines[i])>63and(lines[i])[0]=='2':

  ..................

  iflen(lines[i])>63and(lines[i])[0]=='3':

  ..................

  iflen(lines[i])>63and(lines[i])[0]=='4':

  .................

  iflen(lines[i])>63and(lines[i])[0]=='5':

  ...................................

  上述代码对n条记录按照①②特点逐条进行判断,最后用5个if语句,获取文件“pzw”中所有满足条件的记录,代码充分展示了python语言强大的表处理能力,是整个应用程序的核心。

  3.4获取变频器参数值

  上述矩形框内代码的作用是:对满足条件①②的记录进一步处理:抛弃前端7个字符(例1-3-24-)后余下26个字节就是变频器参数值和校验码,按表1即可编制读数程序[1]。

  表1:

   3.5程序结构

  “启动”“停车”“调速”等控制信号是非周期命令,读取变频器参数和显示数据是周期命令,为此,采用主线程-子线程结构模式。定义2个计时器模块QTimter[2],各定时2秒,在定时器1期间执行周期读数命令,在定时器2期间,执行非周期命令。流程见图2,构成2秒左右一个循环的程序执行过程。

  图2控制流程

  3.5操作界面

  图3人机界面(局部)

  图3是操作界面,变频器的输出频率由计数器控件QSpinBox[2]设置,点击右边的上下箭头或直接用键盘敲入数字,可方便的进行设置。图2数据分别是:输出频率,运行电流,DI状态,DO状态,AI1、AI2、AI3。

  4、研发体会和展望

  读取变频器DI/AI信号(故障,流量,温度等),经过处理,得到整个系统设备的运行状态,在界面显示出来,再通过DO/AO输出开关信号或模拟信号(开/关阀,启/停泵,调节阀门开度等),控制其他设备。充分利用这些端口,相当于增加了一台具有:50个DI,25个DO,15个AI和10个AO的小型PLC,具体用法因篇幅所限本文不再介绍[1]。

  在物联网三层体系结构中,PLC必须借助网关才能连接到外网,而树莓派集成了网络功能(有线/无线),实质上起着控制器和网关的双重作用。

  Yeelink是国内目前最大的物联网云平台,它免费为公众提供云服务,通过Yeelink提供的App接口,进行相关的开发,即可实现产品远程监控。

  树莓派应用于工程项目,无论是产品成本还是控制能力,都具有极大的实用价值和良好的开发前景。

  参考文献:

  [1]汇川技术:MD380系列高性能矢量变频器用户手册V1.4

  [2]王硕、孙洋洋:PyQt5快速开发与实战,电子工业出版社,2017.10

  第1作者:张双驰,男,工程师,自动控制产品研发

  单位:金丰(中国)机械工业有限公司研发中心

  单位地址:浙江省宁波市镇海经济开发区金丰路66号

  职务:科长

  手机:15257860915

  第2作者:潘芝渭,男,1947.10,高级工程师,长期从事自动化产品研发

  单位:金丰(中国)机械工业有限公司研发中心

  单位地址:浙江省宁波市镇海经济开发区金丰路66号

  职位:技术顾问

  通讯地址:浙江省宁波市鄞州区水乡邻里花苑11幢28号604室

  手机:13867087963

  邮箱zjslhb002@163.com

中传动网版权与免责声明:

凡本网注明[来源:中国传动网]的所有文字、图片、音视和视频文件,版权均为中国传动网(www.chuandong.com)独家所有。如需转载请与0755-82949061联系。任何媒体、网站或个人转载使用时须注明来源“中国传动网”,违反者本网将追究其法律责任。

本网转载并注明其他来源的稿件,均来自互联网或业内投稿人士,版权属于原版权人。转载请保留稿件来源及作者,禁止擅自篡改,违者自负版权法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

伺服与运动控制

关注伺服与运动控制公众号获取更多资讯

直驱与传动

关注直驱与传动公众号获取更多资讯

中国传动网

关注中国传动网公众号获取更多资讯

热搜词
  • 运动控制
  • 伺服系统
  • 机器视觉
  • 机械传动
  • 编码器
  • 直驱系统
  • 工业电源
  • 电力电子
  • 工业互联
  • 高压变频器
  • 中低压变频器
  • 传感器
  • 人机界面
  • PLC
  • 电气联接
  • 工业机器人
  • 低压电器
  • 机柜
回顶部
点赞 0
取消 0
往期杂志
  • 2024年第二期

    2024年第二期

    伺服与运动控制

    2024年第二期

  • 2024年第一期

    2024年第一期

    伺服与运动控制

    2024年第一期

  • 2023年第六期

    2023年第六期

    伺服与运动控制

    2023年第六期

  • 2023年第五期

    2023年第五期

    伺服与运动控制

    2023年第五期

  • 2023年第四期

    2023年第四期

    伺服与运动控制

    2023年第四期