Добавить в корзинуПозвонить
Найти в Дзене
Умные устройства

Имитация связи PLS-Siemens с виртуальным сервером, написанном на Phyton.

Для того, чтобы создать канал связи между контроллером и сервером Phyton, в можно использовать виртуальный контроллер (PLCSIM-Advanced), для этого понадобятся следующие программы: Необходимо создать новый проект в программе TIA-Portal и назвать его, например, Phyton. Далее добавить процессорный модуль. В Project tree (дерево проекта) двойным щелчком ЛКМ вызвать меню добавления новых модулей (рисунок 2). В этом проекте в роли процессора будет пользоваться модуль 1513-1 PN. Если в вашем проекте потребуется добавление защищенных блоков, то при использовании блоков с защитой от несанкционированного доступа и моделирования их в программе S7-PLCSIM Advanced может быть выдана ошибка. Если вы хотите смоделировать защищённый блок с помощью S7-PLCSIM Advanced, вы должны включить моделирование в свойствах блока перед настройкой защиты блока. В противном случае моделирование будет прервано с сообщением об ошибке. Чтобы выполнить симуляцию для защищенного блока и библио

Для того, чтобы создать канал связи между контроллером и сервером Phyton, в можно использовать виртуальный контроллер (PLCSIM-Advanced), для этого понадобятся следующие программы:

Необходимо создать новый проект в программе TIA-Portal и назвать его, например, Phyton.

 Рисунок 1. Создание нового проекта в TIA-Portal.
Рисунок 1. Создание нового проекта в TIA-Portal.

Далее добавить процессорный модуль. В Project tree (дерево проекта) двойным щелчком ЛКМ вызвать меню добавления новых модулей (рисунок 2). В этом проекте в роли процессора будет пользоваться модуль 1513-1 PN.

  Рисунок 2. Меню добавления новых модулей.
Рисунок 2. Меню добавления новых модулей.

Если в вашем проекте потребуется добавление защищенных блоков, то при использовании блоков с защитой от несанкционированного доступа и моделирования их в программе S7-PLCSIM Advanced может быть выдана ошибка.

Если вы хотите смоделировать защищённый блок с помощью S7-PLCSIM Advanced, вы должны включить моделирование в свойствах блока перед настройкой защиты блока. В противном случае моделирование будет прервано с сообщением об ошибке.

Чтобы выполнить симуляцию для защищенного блока и библиотек, выполните следующие действия:

  1. Откройте блок, который защищен.
  2. В окне инспектора откройте «Свойства блока» и перейдите на вкладку «Компиляция».
  3. В разделе «Моделирование» вы можете посмотреть, можно ли смоделировать блок с помощью S7-PLCSIM Advanced. Необходимо установить флажок «Можно смоделировать с помощью S7-PLCSIM Advanced» (Рисунок 3).
 Рисунок 3. Моделирование с помощью S7-PLCSIM Advanced.
Рисунок 3. Моделирование с помощью S7-PLCSIM Advanced.

Далее в проекте необходимо настроить сетевой интерфейс, для этого (Рисунок 4):

  • Откройть «Конфигурацию устройства» Phyton;
  • Перейти в свойства>> раздел «Ethernet-адреса»;
  • Создайтm новую подсеть и установитm IP-адрес/маска подсети 192.168.0.1/255.255.255.0.
  Рисунок 4. Сетевой интерфейс.
Рисунок 4. Сетевой интерфейс.

Так-как в проекте будет использоваться тактовый байт процессора, необходимо активировать тактовую память. Тактовый байт позволит нам создать модуляцию импульсов с частотой от 0.5 Hz до 10 Hz (Рисунок 5):

  Рисунок 5. Тактовый байт контроллера. Период срабатывания.
Рисунок 5. Тактовый байт контроллера. Период срабатывания.

Для активации тактового байта необходимо перейти в настройки процессорного модуля и, в разделе General, в пункте System and clock memory, установить флажок на пункте<<Enable the use of clock memory byte>> и ввести адрес тактового байта например 1000 байт (рисунок 6).

Рисунок 6. Активация тактового байта памяти.
Рисунок 6. Активация тактового байта памяти.

Также в проекте понадобится база данных (BD). В ней будет храниться информация с отправленными и полученными сообщениями. Понадобятся четыре переменные: две переменные определённые как строки (string) отправка и получение в виде строк, и две переменные в виде массивов данных из 32 символов (отправка и получение в виде массивов 0..32 символов (Array)). Строковые переменные будем использовать для удобства их читаемости пользователем. Длину символов можно выбирать в зависимости от поставленных задач. Количество символов может принимать значение от 1 до 254.

Создадим базу данных и дадим ей имя Phyton (Рисунок 7):

Рисунок 7. База данных.
Рисунок 7. База данных.

Далее заполнить базу данных переменными:

Добавить 2 переменные типа Array для отправки и получения сообщений, и 2 переменные типа string для отправки и получения сообщений (Рисунок 8).

Рисунок 8. Переменные в базе данных.
Рисунок 8. Переменные в базе данных.

Далее создать нашу программу с среде разработки TIA-Portal.

Программа будет содержать несколько сетей (network) с инструкциями:

В Network 1 (transformation) будут преобразовываться переменные из строкового типа в символьный тип для отправляемых сообщений. И из символьного типа в строковый тип для получаемых сообщений (Рисунок 9).

TIA-Portal позволяет заполнять имена инструкций любо вручную, либо перетаскивания имени переменных сразу из меню <<Detalis view>> базы данных.

Рисунок 9. Присвоение входов/выходов инструкций.
Рисунок 9. Присвоение входов/выходов инструкций.

А так же понадобится присвоить тег выходу Cnt инструкции Strg_TO_Char. Можно добавить имя тега в таблицу тегов. Для этого необходимо в дереве проекта открыть вкладку PLC tags>Default tag table и добавить тег Count с типом данных Uint (Рисунок 10).

Рисунок 10. Тег count.
Рисунок 10. Тег count.

Так-же можно создать локальный тег. Для этого назначим имя тега выходу Cnt. Далее в выпадающем меню настроек блока Strg_TO_Char необходимо выбрать пункт Define tag, выбрать тип данных Uint и нажать кнопку Define. Таким образом, переменная с тегом count будет определена как локальная переменная.

Далее создать Network 2 (connect). Добавить в неё инструкцию TCON для запроса на подключение с абонентом. При добавлении блока будет предложено назначить ему экземплярный блок DB (Рисунок 11).

 Рисунок 11. Экземплярный блок DB.
Рисунок 11. Экземплярный блок DB.
  • Вход REQ инструкции TCON запускает задание по установлению соединения, указанного на восходящем фронте;
  • Вход ID (АйДи абонента) Ссылка на назначенное соединение принимает диапазон значений: от W#16#0001 до W#16#0FFF;
  • Вход Connect содержит базу данных для настроек сети
  • Выход Done и Busy это параметр состояния подключения со следующими значениями: 0: задание еще не запущено или выполняется
  • 1: задание выполнено без ошибок.
  • Выход Error - параметр состояния ошибки: 0: Ошибка отсутствует
  • 1: Произошла ошибка
  • Выход Status - Статус инструкции отображающий код работы блока TCON. Информацию о статусах и их расшифровку можно найти в информационной системе TIA-Portal

Настроить подключение в блоке TCON (Рисунок 12.1, 12.2)

В строке Partner необходимо указать "Unspecified" для того чтобы можно было подключаться к любому серверу.

Адрес локального сервера и удаленного сервера настраивается индивидуально в зависимости от сети в которой работает сервер. В поля Connection ID установим значение "1". В поле ID можно ввести значения в диапазоне от 1 до 4095. Соответственно на одно подключение можно отправить до 4095 телеграмм.

Рисунок 12.1 Блок TCON
Рисунок 12.1 Блок TCON
 Рисунок 12.2. Экземплярная DB для блок TCON
Рисунок 12.2. Экземплярная DB для блок TCON

Все настройки блока TCON дублируются в экземплярной DB, что позволяет сделать программу связи стандартной для подключения к разным серверам.

На данном этапе программа готова к подключению к серверу.

Если тегу "Start_Connect" задать значение "1"(видео 1) то на стороне сервера Phyton будет выведено сообщение о подключившемся клиенте (Рисунок 13).

 Видео 1. Старт подключения.
Видео 1. Старт подключения.
  Рисунок 13. Сообщение о подключившемся клиенте к серверу Phyton
Рисунок 13. Сообщение о подключившемся клиенте к серверу Phyton

Далее в PLC необходимо настроить блоки для приёма (Рисунок 14) и отправки (Рисунок 15) сообщений.

Инструкция TSEND будет инициировать отправку сообщений, когда на входе REQ будет установлен сигнал "1". На входе LEN установлено значение 32, т.к. отправляется 32 символа (для отправки большего количества символов необходимо увеличить это число). Для входа ID устанавливается такое-же значение как и в блоке TCON.

Инструкция TRCV будет периодически получать данные, Для этого на входе EN_R установлен тактовый бит с частотой 0.5Hz.

Рисунок 14. Отправка сообщений.
Рисунок 14. Отправка сообщений.
  Рисунок 15. Приём сообщений.
Рисунок 15. Приём сообщений.

Пример работы программы отображен на видео 2.

  Видео 2. Работа программы приема-отправки сообщений.
Видео 2. Работа программы приема-отправки сообщений.

Пример программы для phyton

import threading

import socket

import sys

# Функция для отправки данных

def SendMessage():

while True:

# Сохранение сообщения от пользователя

temp = input()

# Приводим сообщение к 16 байтам, заполняя конец строки пробелами

mess = temp + (16 - len(temp)) * ' '

# Отправка сообщения в клиентский сокет

client_socket.send(mess.encode())

print(f"[{mess}] message sent\n")

# Функция приема данных

def ReceiveMessage():

while True:

# Считываем 32 байт (символов) из сокета клиента.

mess = client_socket.recv(32).decode()

if not mess:

sys.exit(0)

print(f"Received message: {mess}\n")

# Основная программа

if __name__ == "__main__":

# Определение IP-адреса и порта сервера

SERVERIP = '192.168.0.10'

PORT = 2000

# Инициализация сокета TCP-сервера по протоколу IPv4 (AF_INT)

Server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Привязка IP-адреса к порту

Server.bind((SERVERIP, PORT))

# Запуск прослушивания в серверном сокете

Server.listen(1)

print(f'Server is listening on {SERVERIP} : {PORT}')

# Прием входящего соединения

client_socket, Addr = Server.accept()

print(f"{Addr} is connected. Type a message and press enter to send it.\n")

# Определение потока для каждой функции

ReceiveThread = threading.Thread(target=ReceiveMessage)

SendThread = threading.Thread(target=SendMessage)

SendThread.start()

ReceiveThread.start()

Ссылка на пример кода расположена на Qir-коде (рисунок 16-17).

Рисунок 16. Qir-код программы Phyton.
Рисунок 16. Qir-код программы Phyton.
Рисунок 18. Qir-код программы PLC.
Рисунок 18. Qir-код программы PLC.

В коде программы Phyton для корректной отправки и получения сообщений необходимой длины необходимо изменить количество символов приема-отправки в следующих строках:

mess = temp + (32 - len(temp)) * ' '

mess = client_socket.recv(32).decode()

Где число 32 отображает длину сообщения.

В строке SERVERIP = '192.168.0.10', необходимо либо ввести текущий сетевой адрес подключения, либо ввести localhost.

Сервер обмена сообщениями готов к работе.

Подведение итогов.

В этой статье был создан простой сервер для обмена сообщениями. Сервер на языке Phyton позволит связаться с любым клиентом, в зависимости от поставленных задач, сетях в которых работает сервер и др.