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,slave,starting_address,quantity_of_x): self.机号 = slave self.起始地址 = starting_address # 寄存器开始地址 self.读取长度 = quantity_of_x def 控制(self,output_value): try: master.execute(slave=self.机号,function_code=6,starting_address=self.起始地址,quantity_of_x=self.读取长度,output_value=output_value) except Exception as exc: print(str(exc)) def 查询(self): try: read = master.execute(slave=self.机号,function_code=3,starting_address=self.起始地址,quantity_of_x=self.读取长度) print("通讯测试正常", read, type(read)) # 打印获取的数据 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=self.起始地址,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)) 三科变频(1,0x1000,8).控制(5000) 三科变频(1,0x2000,8).控制(5) time.sleep(4) 三科变频(1,0x1001,8).查询() 三科变频(1,0x3000,1).运行状态查询()
工控行业以实用为主,所以大多数一线工控人懂应用,却对技术原理理解薄弱,专业的程序员往往又缺乏具体的实践机会对具体的需求了解不足,那么工控行业的技术创新要如何进行呢?本文案例以python代码实现对变频器的通讯控制,旨在为一线工控人提供创新灵感,抛砖引玉。代码测试以三科SKI90变频器进行,其他型号变频器测试需修改Modbus地址。感谢观看!!