PDA

Просмотр полной версии : Не видит библиотеки



TrTinf
08.09.2025, 16:37
Добрый день
Установил библиотеки и OwenCommunication и CAA
{attribute 'qualified_only'}
VAR_GLOBAL
// Управление источником
Volt : REAL := 0.0;
Tok : REAL := 0.0;
HighVoltageEnable : BOOL := FALSE;
SendCommand : BOOL := FALSE; // Триггер отправки

// Данные с МВ210-102
RawAnalogValue : WORD := 0;
Current_mA : REAL := 0.0;
Pressure_Pa : REAL := 0.0;
PrevPressure : REAL := 0.0;
BreakdownCount : INT := 0;

// TCP-клиент
eState : CLIENT_STATE := CLIENT_STATE.CREATE;
fbTcpClient : NBS.TCP_Client;
fbTcpWrite : NBS.TCP_Write;
fbTcpRead : NBS.TCP_Read;
stIpServer : NBS.IP_ADDR := (sAddr := '192.168.0.120');
uiPortServer : UINT := 1470;
hConnection : NBS.HANDLER := 0; // Дескриптор соединения
xConnected : BOOL := FALSE;

// Буферы
sSendBuffer : STRING(100) := '';
sReceiveBuffer : STRING(256) := '';

// Внутренние
fbSendTrig : R_TRIG;
fbTimeout : TON;
END_VAR

При этом все NBS переменные не заданы.
А как так?

СCodesys переставлял, не помогло...

Евгений Кислов
08.09.2025, 16:43
Добрый день.

Если ориентироваться на приведенные вами объявления - то нужно добавить библиотеку Net Base Services (не CAA Net Base Services) в менеджер библиотек (это не репозиторий библиотек, а другая сущность) вашего проекта.
См. узел Менеджер библиотек в дереве проекта.



hConnection : NBS.HANDLER := 0; // Дескриптор соединения


В библиотеке NBS нет объекта HANDLER, так что тут в объявлении ошибка.

Но, вполне вероятно, что всё это вам вообще не нужно.
Я рекомендую вам описать задачу, которую вы хотите решить, а не углубляться пока что в придуманное кем-то решение.

TrTinf
08.09.2025, 17:00
Да в общем-то ваш ответ помог более чем)
а в общем задачу следующая , нужно заставить ПЛК По Modbus TCP Отправлять команды типа: sr 3 1 , sr 3 0, sr 4 xx ну ит.д. с добавлением CR LF На конце.

Евгений Кислов
08.09.2025, 17:21
нужно заставить ПЛК По Modbus TCP Отправлять

Для работы с Modbus TCP - NBS не нужна.
Можно использовать упомянутую OwenCommunication или вообще настроить обмен по Modbus TCP через дерево проекта.

Или же речь не о Modbus TCP, а о некоем нестандартном протоколе, который реализуется поверх TCP/IP?
Тогда использование NBS выглядит более адекватно (хотя в OwenCommunication для этого есть готовый UNM_TcpRequest)

TrTinf
11.09.2025, 19:15
В общем да не получился не один из вариантов.
Буду рад хотя бы направлению...
Есть команды формата: sr 3 1 \r\n, sr 4 1000 \r\n как бы научить ПЛК210-03 CS Передавать эти команды по адресу 192.168.0.120 , порт 1470, в формате ASCII?
Попытался сделать через сокеты - не работает, ещё пытался, но тоже не особо.
Пару конфигов прикрепил...
Не по одному устройство не реагирует

capzap
11.09.2025, 19:42
В этом плк можно зайти в консоль, набрать скрипт на питоне и проверить доходить ли команда до абонента, если все нормально то можно из проекта через sysexecute запускать этот скрипт по мере необходимости.
Это если другие способы не помогают


import socket
import sys

def send_command(arg1, arg2):
try:
# Создаем сокет
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Устанавливаем таймаут на 3 секунды
client.settimeout(3)

# Параметры подключения
host = "192.168.0.120"
port = 1470
# Формируем команду с переданными аргументами
command = f"sr {arg1} {arg2} \r\n"

# Подключаемся к серверу
client.connect((host, port))

# Отправляем команду в ASCII формате
client.sendall(command.encode('ascii'))

# Получаем ответ
response = client.recv(1024).decode('ascii')

# Проверяем наличие ACK в начале ответа
if response.startswith("ACK"):
print(f"Успешный ответ от сервера: {response}")
else:
print(f"Ошибка: неверный ответ сервера: {response}")

except socket.timeout:
print("Ошибка: истекло время ожидания ответа")
except Exception as e:
print(f"Произошла ошибка: {str(e)}")
finally:
# Закрываем соединение
client.close()

if __name__ == "__main__":
# Проверяем количество переданных аргументов
if len(sys.argv) != 3:
print("Использование: python script.py <аргумент1> <аргумент2>")
sys.exit(1)

# Получаем аргументы из командной строки
try:
arg1 = int(sys.argv[1]) # Преобразуем в целое число
arg2 = int(sys.argv[2]) # Преобразуем в целое число
except ValueError:
print("Ошибка: аргументы должны быть целыми числами")
sys.exit(1)

# Вызываем функцию с переданными аргументами
send_command(arg1, arg2)

Запустите скрипт из командной строки, передав два числовых аргумента: python script.py 3 1

Евгений Кислов
11.09.2025, 20:19
Буду рад хотя бы направлению...

Для начала добейтесь успешного обмена между устройством и вашим ПК.
Для этого можно использовать Hercules (https://ftp.owen.ru/Soft/hercules_3-2-8.exe) или любую другую аналогичную утилиту.
До этого момента что-то делать на ПЛК, на мой взгляд, смысла нет.

TrTinf
12.09.2025, 14:51
Так с компа то управление прикручено давным Давно через CoreBus И уже даже свою программу на C# сделали.
Управление есть, все работает все нормально.
Теперь собственно задача сделать это все на ПЛК...

TrTinf
12.09.2025, 15:53
Спасибо!
Осталось понять как это реализовать... Но Питон это интересно, не знал что он такое умеет.
Нет ли где-то ещё инструкции как собственно это запустить, так понимаю должен был файл .py И вызов его из codesysa...
Был бы благодарен за информацию по запуску.
Собственно да, с консолькой я разобрался, а вот как и куда пихать скрипт - нет, инструкцию скачал с примеров но там для СПК и не понятно вообще как создать директорию...

Евгений Кислов
12.09.2025, 15:53
Так с компа то управление прикручено давным Давно через CoreBus И уже даже свою программу на C# сделали.
Управление есть, все работает все нормально.
Теперь собственно задача сделать это все на ПЛК...

Тогда напишите на support@owen.ru, пожалуйста
В письме приложите ссылку на эту тему