![Управление на HHC-N8I8OP с Raspberry Pi и Python: Библиотека, код и обяснение](http://ardudevelop.eu/wp-content/uploads/2024/10/Управление-на-HHC-N8I8OP-с-Raspberry-Pi-и-Python-Библиотека-код-и-обяснение.png)
Въведение
В тази статия ще разгледаме как да управляваме индустриалното устройство HHC-N8I8OP с помощта на Raspberry Pi и Python. Raspberry Pi е малък и достъпен компютър, който често се използва за проекти за автоматизация и контрол на устройства. В съчетание с HHC-N8I8OP, можем лесно да управляваме релеини изходи и да четем цифрови входове през мрежата.
За повече информация относно устройството HHC-N8I8OP и неговите характеристики можете да прочетете в нашето ревю за него: HHC-N8I8OP индустриалното устройство: Пълна конфигурация и управление.
В този случай сме използвали Raspberri Pi 4, и може да откриете неговите характеристики в ревюто ни за него: Raspberry Pi 4: Значителна стъпка напред за мини компютрите.
Python библиотека за управление на HHC-N8I8OP с Raspberry Pi
Тази библиотека е предназначена да се изпълнява на Raspberry Pi (но може и да се използва и на стандартно PC), като ви позволява лесно да управлявате HHC-N8I8OP:
import socket
class HHC_N8I8OP_Controller:
def __init__(self, ip, port=5000):
self.ip = ip
self.port = port
def _send_command(self, command):
"""
Изпраща команда към устройството и връща отговора.
"""
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((self.ip, self.port))
s.sendall(command.encode())
data = s.recv(1024)
return data.decode()
except Exception as e:
return f"Грешка: {e}"
def digitalWrite(self, relay_number, state):
"""
Управлява състоянието на реле (включва/изключва).
state трябва да бъде 1 (включено) или 0 (изключено).
"""
command = f"on{relay_number}" if state == 1 else f"off{relay_number}"
return self._send_command(command)
def digitalRead(self):
"""
Изчита състоянието на всички релета.
"""
command = "read"
return self._send_command(command)
def readInput(self):
"""
Изчита състоянието на всички цифрови входове.
"""
command = "input"
return self._send_command(command)
def readRelay(self, relay_number):
"""
Чете състоянието на конкретно реле (1-8).
"""
response = self.digitalRead() # Четем състоянието на всички релета
if response.startswith('relay') and 1 <= relay_number <= 8:
relay_states = response[5:] # Получаваме състоянието на релетата
return relay_states[8 - relay_number] # Връщаме състоянието на конкретното реле
else:
return "Невалиден отговор или номер на реле."
def readInputChannel(self, input_number):
"""
Чете състоянието на конкретен цифров вход (1-8).
"""
response = self.readInput() # Четем състоянието на всички цифрови входове
if response.startswith('input') and 1 <= input_number <= 8:
input_states = response[5:] # Получаваме състоянието на входовете
return input_states[8 - input_number] # Връщаме състоянието на конкретния вход
else:
return "Невалиден отговор или номер на вход."
Подробно обяснение на библиотеката
Класът HHC_N8I8OP_Controller е предназначен за управление на релеите и входовете на устройството HHC-N8I8OP, използвайки мрежова комуникация. Ето подробно обяснение на основните функции:
- Инициализация:
Конструкторът на класа__init__(self, ip, port=5000)
приема IP адреса и порта на устройството (по подразбиране 5000), които се използват за комуникация с HHC-N8I8OP. На Raspberry Pi трябва да се уверите, че устройството и вашето “Pi” са в една и съща мрежа. - _send_command(self, command):
Тази функция използва Python библиотеката socket за създаване на TCP връзка и изпращане на команда към HHC-N8I8OP. Получава отговор и го връща като низ. Ако възникне грешка, функцията връща описание на грешката. - digitalWrite(self, relay_number, state):
Тази функция включва или изключва реле на устройството, като приема два аргумента: номер на релето и състоянието (1 за включено, 0 за изключено). - digitalRead(self):
Изпраща команда за четене на състоянието на всички релета и връща информацията. - readInput(self):
Изпраща команда за четене на състоянието на цифровите входове и връща състоянието им. - readRelay(self, relay_number):
Чете състоянието на конкретно реле, като използваdigitalRead
, за да върне състоянието на всички релета и извлича конкретното. - readInputChannel(self, input_number):
Подобно наreadRelay
, тази функция чете състоянието на конкретен цифров вход.
Пример за използване с Raspberry Pi
Ето пример за използване на класа HHC_N8I8OP_Controller на Raspberry Pi:
from HHC_N8I8OP import HHC_N8I8OP_Controller
from time import sleep
device = HHC_N8I8OP_Controller("192.168.100.96")
device.digitalWrite(1 , 1) # Превключва реле 1 във включено състояние (relay, state)
sleep(0.5)
device.digitalWrite(1 , 0) # Превключва реле 1 в изключено състояние (relay, state)
print(device.digitalRead()) # Връща състоянието на всички релета ( relay00000000 )
print(device.readInput()) # Връща състоянието на всички дигитални входове ( input00100000 )
print(device.readInputChannel(6)) # Връаща състоянието на избран от нас дигитален вход. В този случай 6 ( отговор: 1 )
print(device.readRelay(3)) # Връаща състоянието на избранo от нас РЕЛЕ. В този случай 3 ( отговор: 0 )
print(device.ip) # Връща IP на устройството което управляваме ( 192.168.100.96 )
print(device.port) # Връща порта за комуникация с устройството ( 5000 )
"""
for i in range(1,9):
device.digitalWrite(i , 1)
relayStatus = device.readRelay(i)
print("relay" + str(i) + "= ", relayStatus)
sleep(0.1)
for i in range(1,9):
device.digitalWrite(i , 0)
relayStatus = device.readRelay(i)
print("relay" + str(i) + "= ", relayStatus)
sleep(0.1)
"""
Пълно обяснение на примера
В този пример се демонстрира как да използвате Raspberry Pi, за да управлявате HHC-N8I8OP чрез
Python:
- Инициализация:
Обектътdevice
е създаден, като е зададен IP адресът на устройството (в този случай 192.168.100.96). - Управление на реле 1:
ФункциитеdigitalWrite(1, 1)
иdigitalWrite(1, 0)
включват и изключват реле 1 с кратка пауза от 0.5 секунди между командите. - Четене на състояния:
ФункциятаdigitalRead()
връща състоянието на всички релета, аreadInput()
– на всички цифрови входове. СreadInputChannel(6)
иreadRelay(3)
се връща състоянието на конкретен вход (вход 6) и реле (реле 3). - Четене на IP и порт:
Можете лесно да проверите IP адреса и порта на устройството, като използватеdevice.ip
иdevice.port
. - Цикли за управление на релета:
В коментирания цикъл се показва как да включвате и изключвате всички релета едно по едно, като след всяка операция четете състоянието на съответното реле.
![Управление на HHC-N8I8OP с Raspberry Pi и Python: Библиотека, код и обяснение резултати от кода](http://ardudevelop.eu/wp-content/uploads/2024/10/Raspberry-Pi-4-Значителна-стъпка-напред-за-мини-компютрите-резултати-от-кода-1024x592.png)
Заключение
Чрез използването на Raspberry Pi и Python, можем лесно да управляваме индустриалното устройство HHC-N8I8OP, като включваме и изключваме релета, четем състояния на входовете и настройваме връзка през TCP/IP. Тази гъвкавост позволява на потребителите да автоматизират и контролират процеси от разстояние, което прави устройството идеално за индустриални и IoT приложения.