python串口控制8通道继电器方法笔记
保存当前文件为RelayControl.py,在其他py文件引用时,使用from RelayControl import relay 格式导入
调用时,使用 relay.connect() 即 relay.ALL_ON() 等即可。
# coding:utf-8
import serial
import time
from logset import logger
'''
8路继电器开关控制函数,包含打开连接串口,单独继电器开关控制和全部开全部关控制。
author:yutao
'''
class relay(object):
def __init__(self):
self.chl_ON_code = ['00 f1 ff', '00 f2 ff', '00 f3 ff', '00 f4 ff', '00 f5 ff', '00 f6 ff', '00 f7 ff', '00 f8 ff', '00 f9 ff']
self.chl_OFF_code = ['00 01 ff', '00 02 ff', '00 03 ff', '00 04 ff', '00 05 ff', '00 06 ff', '00 07 ff', '00 08 ff', '00 09 ff']
self.ACC_chl = 1
self.BAT_chl = 2
self.GND_chl = 3
self.ALL_chl = 9
self.port = 'COM3'
def relay_send(self,send_code):
if self.port:
relay_serial = serial.Serial(self.port, 9600, timeout = 1)
if not relay_serial.isOpen():
relay_serial.Open()
relay_serial.write(bytes.fromhex(send_code))
time.sleep(0.5) #等待操作完成,防止干扰后续指令
relay_serial.close()
def ALL_ON(self):
send_code = self.chl_ON_code[self.ALL_chl - 1]
print(send_code)
self.relay_send(send_code)
logger.info("继电器控制: ALL_CHANNEL_ON")
def ALL_OFF(self):
send_code = self.chl_OFF_code[self.ALL_chl - 1]
self.relay_send(send_code)
logger.info("继电器控制: ALL_CHANNEL_OFF")
def GND_ON(self):
send_code = self.chl_ON_code[self.GND_chl - 1]
self.relay_send(send_code)
logger.info("继电器控制: GND_ON")
def GND_OFF(self):
send_code = self.chl_OFF_code[self.GND_chl - 1]
self.relay_send(send_code)
logger.info("继电器控制: GND_OFF")
def BAT_ON(self):
send_code = self.chl_ON_code[self.BAT_chl - 1]
self.relay_send(send_code)
logger.info("继电器控制: BAT_ON")
def BAT_OFF(self):
send_code = self.chl_OFF_code[self.BAT_chl - 1]
self.relay_send(send_code)
logger.info("继电器控制: BAT_OFF")
def ACC_ON(self):
send_code = self.chl_ON_code[self.ACC_chl - 1]
self.relay_send(send_code)
logger.info("继电器控制: ACC_ON")
def ACC_OFF(self):
send_code = self.chl_OFF_code[self.ACC_chl - 1]
self.relay_send(send_code)
logger.info("继电器控制: ACC_OFF")
if __name__ == "__main__":
relay = relay()
relay.port = 'COM5'
relay.ALL_chl = 1
relay.ALL_ON()