Управление на HHC-N8I8OP с Raspberry Pi и Python: Библиотека, код и обяснение

Управление на HHC-N8I8OP с Raspberry Pi и Python: Библиотека, код и обяснение

Въведение

В тази статия ще разгледаме как да управляваме индустриалното устройство 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:

  1. Инициализация:
    Обектът device е създаден, като е зададен IP адресът на устройството (в този случай 192.168.100.96).
  2. Управление на реле 1:
    Функциите digitalWrite(1, 1) и digitalWrite(1, 0) включват и изключват реле 1 с кратка пауза от 0.5 секунди между командите.
  3. Четене на състояния:
    Функцията digitalRead() връща състоянието на всички релета, а readInput() – на всички цифрови входове. С readInputChannel(6) и readRelay(3) се връща състоянието на конкретен вход (вход 6) и реле (реле 3).
  4. Четене на IP и порт:
    Можете лесно да проверите IP адреса и порта на устройството, като използвате device.ip и device.port.
  5. Цикли за управление на релета:
    В коментирания цикъл се показва как да включвате и изключвате всички релета едно по едно, като след всяка операция четете състоянието на съответното реле.
Управление на HHC-N8I8OP с Raspberry Pi и Python: Библиотека, код и обяснение резултати от кода

Заключение

Чрез използването на Raspberry Pi и Python, можем лесно да управляваме индустриалното устройство HHC-N8I8OP, като включваме и изключваме релета, четем състояния на входовете и настройваме връзка през TCP/IP. Тази гъвкавост позволява на потребителите да автоматизират и контролират процеси от разстояние, което прави устройството идеално за индустриални и IoT приложения.

Translate »