变频器的python用法

案例以串口发送485指令实现

硬件需求:USB转485接口 、变频器(由三科变频提供测试产品)

这里写的是一些常用的功能,计划要完成一个全功能的参数设置程序,貌似工作量不小呢。

【特别声明】:代码测试所使用的485通讯是三科SKI90型号的机器,其他品牌型号变频器用本代码调试时务必请先查阅其使用手册,修改通讯地址,避免因误传参数导致机器损坏。

import modbus_tk.modbus_rtu as modbus_rtu
import pyttsx3
import serial
import time

# 创建modbus通讯连接
master = modbus_rtu.RtuMaster(
    serial.Serial(port='COM3',  # 连接端口
                  baudrate=9600,  # 连接波特率
                  bytesize=8,  # 数据位
                  parity='N',  # 奇偶校验位
                  stopbits=1))  # 停止位
master.set_timeout(5.0) # 连接超市
master.set_verbose(True)

语音播报 = pyttsx3.init() # 语音播报器初始化

class 变频器:
    def __init__(self,电机,频率):
        self.电机 = 电机
        self.频率 = 频率

    def 参数查询(self): # 查询电流输入输出情况
        try:
            read = master.execute(slave=self.电机,function_code=3,starting_address=0x1001,quantity_of_x=8)
            a = f'当前运行频率为{read[0] / 100}赫兹,母线电压{read[1]/10}伏,输出电压{read[2]}伏,输出频率{read[6]/100}赫兹,输出电流{read[7]/10}安'
            print(a)
            语音播报.say(a)
            语音播报.runAndWait()
        except Exception as exc:
            print(str(exc))

    def 状态查询(self):
        try:
            read = master.execute(slave=self.电机, function_code=3, starting_address=0x3000, quantity_of_x=1)
            if read[0] == 3:
                语音播报.say("变频器未启动")
                语音播报.runAndWait()
            elif read[0] == 2:
                语音播报.say("变频器反转运行中");
                语音播报.runAndWait()
            else:
                语音播报.say('变频器正传运行中')
                语音播报.runAndWait()
        except Exception as exc:
            print(str(exc))

    def 频率设置(self): 
        # 变频器设置的上限频率对应100%,参数识别值为10000,通用机型出厂默认设置的上限频率为50HZ
        # 所以50对应10000及频率要以0.005为系数换算需要传入的参数值
        # 要注意,如果变频器设置的上限频率 不等于50 频率转换参数的系数 需按实际设置的上限频率/10000计算
        # 485地址只接受正整数参数传入,别忘了int哈,这里卡了很久,注意避坑 :)
        try:
            master.execute(slave=self.电机, function_code=6, starting_address=0x1000,
                           quantity_of_x=8, output_value=int(self.频率/0.005))
            语音播报.say(f"运行频率已设置为{self.频率}")
            语音播报.runAndWait()
        except Exception as exc:
            print(str(exc))

    def 正转启动(self):
        try:
            master.execute(slave=self.电机,function_code=6,starting_address=0x2000,quantity_of_x=8,output_value=1)
            语音播报.say("变频器已正转启动")
            语音播报.runAndWait()

        except Exception as exc:
            print(str(exc))

    def 反转启动(self):
        try:
            master.execute(slave=self.电机,function_code=6,starting_address=0x2000,quantity_of_x=8,output_value=2)
            语音播报.say("变频器已反转启动")
            语音播报.runAndWait()
        except Exception as exc:
            print(str(exc))

    def 正转点动(self):
        try:
            master.execute(slave=self.电机,function_code=6,starting_address=0x2000,quantity_of_x=8,output_value=3)
            语音播报.say("变频器已正转点动")
            语音播报.runAndWait()
            # 模拟点动 点动频率2HZ 5秒后自由停机
            time.sleep(5)
            变频器(self.电机, self.频率).自由停车()
        except Exception as exc:
            print(str(exc))

    def 反转点动(self):
        try:
            master.execute(slave=self.电机,function_code=6,starting_address=0x2000,quantity_of_x=8,output_value=4)
            语音播报.say("变频器已反转点动")
            语音播报.runAndWait()
            # 模拟点动 点动频率2HZ 5秒后自由停机
            time.sleep(5)
            变频器(self.电机,self.参数值).自由停车()
        except Exception as exc:
            print(str(exc))

    def 自由停车(self):
        try:
            master.execute(slave=self.电机,function_code=6,starting_address=0x2000,quantity_of_x=8,output_value=5)
            语音播报.say("变频器已自由停车")
            语音播报.runAndWait()
        except Exception as exc:
            print(str(exc))

    def 减速停车(self):
        try:
            master.execute(slave=self.电机, function_code=6, starting_address=0x2000, quantity_of_x=8, output_value=6)
            语音播报.say("变频器已减速停车")
            语音播报.runAndWait()
        except Exception as exc:
            print(str(exc))

    def 故障复位(self):
        try:
            master.execute(slave=self.电机, function_code=6, starting_address=0x2000, quantity_of_x=8, output_value=7)
            语音播报.say("变频器故障已复位")
            语音播报.runAndWait()
        except Exception as exc:
            print(str(exc))

    def 故障查询(self):
        try:
            read = master.execute(slave=self.机号,function_code=3,starting_address=0x8000,quantity_of_x=1)
            print(read)
            if read[0]==0:
                语音播报.say("变频器无故障")
                语音播报.runAndWait()
            elif read[0]==1:
                语音播报.say("未知故障,请咨询生产厂家")
                语音播报.runAndWait()
            elif read[0]==2:
                语音播报.say('加速过电流保护,请延长启动时间或减轻电机负载')
                语音播报.runAndWait()
            elif read[0]==3:
                语音播报.say('减速过电流保护,请延长减速时间或加装制动电阻')
                语音播报.runAndWait()
            elif read[0]==4:
                语音播报.say('恒速过电流保护,电网异动或电机卡转')
                语音播报.runAndWait()
            elif read[0]==5:
                语音播报.say('加速过电压保护,请查看进线电源是否接错')
                语音播报.runAndWait()
            elif read[0]==8:
                语音播报.say('制动电阻过载,请更换更大阻值制动电阻')
                语音播报.runAndWait()
            elif read[0]==9:
                语音播报.say('欠压保护,输入电压过低,请查看电网电压')
                语音播报.runAndWait()
            elif read[0] ==0xA:
                语音播报.say('变频器过载保护,请减轻负载再试或更换更大功率变频器')
                语音播报.runAndWait()
            elif read[0] ==0xB:
                语音播报.say('电机过载保护,请检查设置电机组参数')
                语音播报.runAndWait()
            elif read[0] ==0xC:
                语音播报.say('输入缺相保护,请查看电源接线')
                语音播报.runAndWait()
            elif read[0] ==0xD:
                语音播报.say('输出缺相保护,请检查电机接线')
                语音播报.runAndWait()
            elif read[0] ==0xE:
                语音播报.say('变频器模块过热保护,请检查散热风扇')
                语音播报.runAndWait()
            else:
                语音播报.say('程序员偷懒了,不常见故障请查阅《使用手册》')
                语音播报.runAndWait()
        except Exception as exc:
            print(str(exc))
            语音播报.say('未知故障,请复位再试')
            语音播报.runAndWait()

    def 点动频率(self):
        try:
            master.execute(slave=self.电机, function_code=6, starting_address=0xF800,
                           quantity_of_x=8, output_value=int(self.频率/0.005))
        except Exception as exc:
            print(str(exc))


主电机=变频器(1,25)
主电机.频率设置()






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值