Вход

Просмотр полной версии : CODESYS V3.5. Вопросы и ответы



Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 [33] 34 35

vorobev22rus
03.02.2025, 06:21
Мышь по краям экрана поводи, может отыщешь. Там индикатор должен измениться в месте нахождения окна. Или как вариант второй монитор подключить. Двухмониторный режим у кодесиса тоже хромает. Иногда основное окно исчезает, когда сохранишь проект на другом мониторе и выключишь его потом.

К сожалению ничего не помогает...((

vorobev22rus
03.02.2025, 06:28
Мышь по краям экрана поводи, может отыщешь. Там индикатор должен измениться в месте нахождения окна. Или как вариант второй монитор подключить. Двухмониторный режим у кодесиса тоже хромает. Иногда основное окно исчезает, когда сохранишь проект на другом мониторе и выключишь его потом.

Нашел, наконец то. Спасибо за подсказки.
"В случае возникновения проблем с интерфейсом CODESYS (пропажи окон, изменения их
местоположения и т. д.) можно сбросить внешний вид интерфейса к настройкам по умолчанию с
помощью команды Сбросить параметры окна из меню Окно"

МихаилГл
03.02.2025, 06:48
Нашел, наконец то. Спасибо за подсказки.
"В случае возникновения проблем с интерфейсом CODESYS (пропажи окон, изменения их
местоположения и т. д.) можно сбросить внешний вид интерфейса к настройкам по умолчанию с
помощью команды Сбросить параметры окна из меню Окно"

Только это не аоможет в случае если исчезнет главное окно. Вот это вообще нестандартная критическая ситуация.

rakh
03.02.2025, 15:47
Здравствуйте
Пытаюсь установить CODESYS 3.5.17.30 (скачано с сайта Овен) под Windows 11 (пробовал версии 23H2, 24H2 Pro)
Вылазит ошибка 81711
Система: Intel(R) Core(TM) i9-14900K, 32 Гб оперативной памяти, SSD диск, свободно более 1 Тб
Пытался ставить и на С: и на D: - два разных SSD накопителя
Ставил по инструкции, с правами администратора, антивируса нет
На Windows 10 устанавливается без проблем.
Такая же проблема возникла у коллеги с ноутбуком (тоже под Windows 11).

1. установить CODESYS V3.5 Setup SP17 Patch3 x64 (взял тут (https://www.crevis.ru/downloads/soft/))
2. установить нужные пакеты и библиотеки от Овена
проверил работу с ПЛК200-01,04 - проблем не обнаружено
думаю проблем в разрядности Windows и Codesys

Евгений Кислов
03.02.2025, 15:59
Здравствуйте
Пытаюсь установить CODESYS 3.5.17.30 (скачано с сайта Овен) под Windows 11 (пробовал версии 23H2, 24H2 Pro)
Вылазит ошибка 81711
Система: Intel(R) Core(TM) i9-14900K, 32 Гб оперативной памяти, SSD диск, свободно более 1 Тб
Пытался ставить и на С: и на D: - два разных SSD накопителя
Ставил по инструкции, с правами администратора, антивируса нет
На Windows 10 устанавливается без проблем.
Такая же проблема возникла у коллеги с ноутбуком (тоже под Windows 11).

Кто ни будь сталкивался? Есть способы исправить?

Добрый день.
Попробуйте сейчас удалить CODESYS и установить заново по инструкции:
https://youtu.be/3KcJWZEVXCg?si=1OCRv6YADoBOGQvX

rakh
03.02.2025, 16:33
Добрый день.
Попробуйте сейчас удалить CODESYS и установить заново по инструкции:
https://youtu.be/3KcJWZEVXCg?si=1OCRv6YADoBOGQvX

не помогло, таже ошибка

atomo2
04.02.2025, 06:37
Добрый день.
Есть плк 210-04 , есть устройство с rs485, устройство подключено к плк к первому rs485 и мне нужно считывать с этого устройства регистры 0x0312 и 0x0313. Я могу использовать какой нибудь функциональный блок?

Я так понимаю мы этим блоком открываем com port 5 (это первый rs485 на нашем плк ) и дальше отправляем команду на чтения этих регистров.

Антон_Б
04.02.2025, 06:38
Здравствуйте. Делаю запись регистра по Modbus TCP по триггеру. Устанавливаю триггер через trig_r. А в какой момент сбрасывать триггер и в каком месте программы?

МихаилГл
04.02.2025, 06:41
Здравствуйте. Делаю запись регистра по Modbus TCP по триггеру. Устанавливаю триггер через trig_r. А в какой момент сбрасывать триггер и в каком месте программы?

Если регистр можно считать из устройства, в которое пишите, то я бы проверил, что регистр соответствует переданному и потом только сбросил...

kondor3000
04.02.2025, 07:46
Добрый день.
Есть плк 210-04 , есть устройство с rs485, устройство подключено к плк к первому rs485 и мне нужно считывать с этого устройства регистры 0x0312 и 0x0313. Я могу использовать какой нибудь функциональный блок?

Я так понимаю мы этим блоком открываем com port 5 (это первый rs485 на нашем плк ) и дальше отправляем команду на чтения этих регистров.

Чем вас не устраивает обычный обмен, что вы хотите использовать биб-ку ?
Обычный обмен проще, чем биб-чный, но и тот и другой есть на обучающих видео. И там и там можно назначить нужные вам адреса.

kondor3000
04.02.2025, 07:51
Здравствуйте. Делаю запись регистра по Modbus TCP по триггеру. Устанавливаю триггер через trig_r. А в какой момент сбрасывать триггер и в каком месте программы?

Обычно достаточно просто включить R_Tig на 1 цикл ПЛК, можно вместо триггера использовать таймер ТР, на 100-300 мс, если вам не нужно проверять записанное.
И таймер и триггер сами сбросят переменную.

МихаилГл
04.02.2025, 08:29
Обычно достаточно просто включить R_Tig на 1 цикл ПЛК, можно вместо триггера использовать таймер ТР, на 100-300 мс, если вам не нужно проверять записанное.
И таймер и триггер сами сбросят переменную.

ТС наверное неправильно написал. Я по триггеру обычно взвожу промежуточную переменную. И свой ответ я писал под это условие. Как у него, пока непонятно. Начальные условия недостаточны...)

atomo2
04.02.2025, 09:05
Чем вас не устраивает обычный обмен, что вы хотите использовать биб-ку ?
Обычный обмен проще, чем биб-чный, но и тот и другой есть на обучающих видео. И там и там можно назначить нужные вам адреса.
не совсем понимаю как это сделать, устройств у меня 10 штук , у каждого свой сетевой адрес и у каждого свои 2 регистра81739

или вот так?81740

МихаилГл
04.02.2025, 09:19
не совсем понимаю как это сделать, устройств у меня 10 штук , у каждого свой сетевой адрес и у каждого свои 2 регистра81739

или вот так?81740

В каналах модбас для каждого из устройств прописывайте читаемые регистры и вперед!

kondor3000
04.02.2025, 09:32
не совсем понимаю как это сделать, устройств у меня 10 штук , у каждого свой сетевой адрес и у каждого свои 2 регистра

или вот так?

Вам надо добавить 10 слейвов с разными сетевыми адресами и добавить в каждом 2 (или больше) регистра, с нужными адресами регистров.
Точнее лучше настройте 1 слейв, проверьте его, а потом скопируете 10 раз.

atomo2
04.02.2025, 10:11
МихаилГл kondor3000 Да спасибо все получилось. Единственное теперь нужно , как то значения преобразовать , в моем скрипте на пк было 2 преобразования. Где мы разбирали 2 регистра по байтам, вычисляли позицию запятой и знак числа и преобразовывали биты в десятичное число и вставляли точку куда нужно

def display_concentration(registers):
if len(registers) < 2:
print("Недостаточно данных для отображения концентрации")
return

byte1 = (registers[0] >> 8) & 0xFF # Старший байт первого регистра
byte2 = registers[0] & 0xFF # Младший байт первого регистра
byte3 = (registers[1] >> 8) & 0xFF # Старший байт второго регистра
byte4 = registers[1] & 0xFF # Младший байт второго регистра

sign_bit = (byte1 >> 7) & 0x01 # Определяем знак (бит 7 в первом байте)
comma_position = byte1 & 0x07 # Определяем позицию запятой (биты 0-2 в первом байте)

sign = '-' if sign_bit else '+'
integer_part = byte2 * 10000 + byte3 * 10 + (byte4 >> 4) # Вычисление целой части
decimal_part = (byte4 & 0x0F) * 100 # Десятичная часть

value = integer_part + decimal_part / 10000 # Собираем число
value = -value if sign_bit else value # Добавляем знак
value /= 10 ** comma_position # Учитываем запятую
value = round(value, 2) # Округляем до двух знаков

print(f"Значение концентрации: {value:.2f}")


и так же Объединяли два регистра в одно 32-битное число, преобразовывали его в строку шестнадцатеричного представления и разделяли число на целую и дробную часть с учетом положения запятой.

def format_value_with_comma(hex_value, comma_position):
value_str = f"{hex_value:08X}" # Преобразует число в строку из 8 шестнадцатеричных символов
integer_part = value_str[2:-comma_position] if comma_position < len(value_str) else '0'
decimal_part = value_str[-comma_position:] if comma_position > 0 else '0'

formatted_value = f"{integer_part},{decimal_part}".lstrip('0') or '0'
return f"{formatted_value[:formatted_value.index(',') + 3]}" if ',' in formatted_value else formatted_value

Я могу теперь написать функциональный блок?) или есть готовые решения?

МихаилГл
04.02.2025, 10:20
Если у вас в регистрах нестандартные числа (не real, word и т.п.), то придется писать код преобразования. А если стандартные, но в итоге число не то, что в действительности, то надо пробовать менять местами слова в регистрах. В кодесисе в библиотеках овен есть готовые блоки для этого.

kondor3000
04.02.2025, 10:44
Я бы попробовал для начала считать FLOAT, если не правильное отображение, то поменять местами регистры (потом байты) и проверить.

atomo2
04.02.2025, 11:00
МихаилГл kondor3000 capzap Значения концентрации и порогов я сейчас получаю в 10 тичной системе , концентрация 1536, порог 1 1040 и порог 2 1056 , если в 16-ричную переводить то 0,0 10 и 20 . Простите ошибся. Получается нужно писать преобразователь, блок или функцию я не нашел


from pymodbus.client.sync import ModbusSerialClient as ModbusClient
import time

# Параметры подключения
PORT = 'COM17'
BAUDRATE = 9600
client = ModbusClient(
method='rtu',
port=PORT,
baudrate=BAUDRATE,
stopbits=1,
parity='N',
timeout=1
)

def read_modbus_data(client, unit_id, address, count):
if not client.connect():
print("Не удалось подключиться к Modbus серверу")
return None

result = client.read_holding_registers(address, count, unit=unit_id)
client.close()

if result.isError():
print("Ошибка чтения данных: ", result)
return None
return result.registers

def format_value_with_comma(hex_value, comma_position):
value_str = f"{hex_value:08X}"
integer_part = value_str[2:-comma_position] if comma_position < len(value_str) else '0'
decimal_part = value_str[-comma_position:] if comma_position > 0 else '0'

formatted_value = f"{integer_part},{decimal_part}".lstrip('0') or '0'
return f"{formatted_value[:formatted_value.index(',') + 3]}" if ',' in formatted_value else formatted_value

def display_registers(registers):
if len(registers) < 2:
print("Недостаточно данных для отображения")
return

combined_hex = (registers[0] << 16) | registers[1]
comma_position = (registers[0] >> 8) & 0xFF

formatted_value = format_value_with_comma(combined_hex, comma_position)
print(f"Значение: {formatted_value}")

def display_concentration(registers):
if len(registers) < 2:
print("Недостаточно данных для отображения концентрации")
return

byte1 = (registers[0] >> 8) & 0xFF
byte2 = registers[0] & 0xFF
byte3 = (registers[1] >> 8) & 0xFF
byte4 = registers[1] & 0xFF

sign_bit = (byte1 >> 7) & 0x01
comma_position = byte1 & 0x07

sign = '-' if sign_bit else '+'
integer_part = byte2 * 10000 + byte3 * 10 + (byte4 >> 4)
decimal_part = (byte4 & 0x0F) * 100

value = integer_part + decimal_part / 10000
value = -value if sign_bit else value
value /= 10 ** comma_position
value = round(value, 2)

print(f"Значение концентрации: {value:.2f}")

def main():
unit_id = 1
count = 2

threshold1_address = 0x02
threshold2_address = 0x04
concentration_address = 0x00

while True:
p1_data = read_modbus_data(client, unit_id, threshold1_address, count)
if p1_data:
print("Установленное значение порога 1:")
display_registers(p1_data)

p2_data = read_modbus_data(client, unit_id, threshold2_address, count)
if p2_data:
print("Установленное значение порога 2:")
display_registers(p2_data)

conc_data = read_modbus_data(client, unit_id, concentration_address, count)
if conc_data:
print("Измеренное значение концентрации:")
display_concentration(conc_data)

time.sleep(3)

if __name__ == "__main__":
main()

atomo2
04.02.2025, 12:38
тут нужно пояснить, что Вы имеете в виду, числа 1536, 1040 и 1056 в 16-чной системе это 600 410 и 420, это какая то кастомная логика превратить их в 0,0 10 и 20, вряд ли это математические функции и обычное преобразование

Это разработчики СТГ-3 так постарались)) Если я любым методом буду считывать концентрацию и пороги, то буду получать значения , что я выше написал, а потом их приходится конвертировать и получать уже , то что нужно...ппц какой то


81748
81747

Карбофос
04.02.2025, 15:56
Добрый день!
Напомните пожалуйста, в каком документе есть инструкция по загрузке проекта в контроллер через web-интерфейс, что-то с ходу найти не могу

Евгений Кислов
04.02.2025, 16:49
Добрый день!
Напомните пожалуйста, в каком документе есть инструкция по загрузке проекта в контроллер через web-интерфейс, что-то с ходу найти не могу

Добрый день.

п. 4.8:
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Faq_v.3.4.pdf

atomo2
05.02.2025, 04:10
Это разработчики СТГ-3 так постарались)) Если я любым методом буду считывать концентрацию и пороги, то буду получать значения , что я выше написал, а потом их приходится конвертировать и получать уже , то что нужно...ппц какой то


81748
81747

не подскажите как лучше сделать?
81766

Так еще пытаюсь 2 worda в dword собрать, тоже не получается

81767

kondor3000
05.02.2025, 08:02
не подскажите как лучше сделать?
81766

Так еще пытаюсь 2 worda в dword собрать, тоже не получается

81767

Для начала надо убрать синюю букву M (наложение адресов регистров) https://owen.ru/forum/showthread.php?t=28167&page=6#52

Вот универсальный пример на указателях, в зависимости от входа и выхода, можно собрать DWORD (REAL), разобрать на WORD и на BYTE
Тут пример функции (ФБ - если нужно разобрать на 2-4 части), меняя входы и выходы, можно собирать, разбирать (переставлять) регистры и байты в любом типе переменных.
https://owen.ru/forum/showthread.php?t=37645&page=3#30
В вашем случае, 2 входа WORD, присваиваете в массив из двух WORD и через указатели собираете DWORD. 81768 81769
Для сборки можно использовать функцию, для разборки только ФБ.

atomo2
05.02.2025, 09:05
capzap kondor3000 Спасибо вам большое

Сейчас попробовал UNION 81770

Сейчас так же как kondor3000 советовал , попробую

atomo2
05.02.2025, 09:58
так если Вам DWORD нужен, замените REAL на DWORD, UNION это просто преобразование из одного в другое, без явного применения указателей

ЗЫ и оскатовская библиотека тоже должна работать

мне нужно отсечь все лишнее и оставить только 10 , это как раз и будет 1 порог)) 81772

kondor3000
05.02.2025, 10:27
мне нужно отсечь все лишнее и оставить только 10 , это как раз и будет 1 порог)) 81772

Тогда вам нужен ФБ HEX_DEC 81774
Конвертация времени BCD формата панелей, HEX в DEC и обратно DEC в HEX https://owen.ru/forum/showthread.php?t=38239&page=20#200

atomo2
05.02.2025, 11:51
Тогда вам нужен ФБ HEX_DEC 81774
Конвертация времени BCD формата панелей, HEX в DEC и обратно DEC в HEX https://owen.ru/forum/showthread.php?t=38239&page=20#200
Спасибо, простите за глупый вопрос в версии 3.5 он работает? а то у меня ошибки при компиляции

capzap
05.02.2025, 12:19
Это разработчики СТГ-3 так постарались)) 81747
такая функция Вам должна подойти 81780

kondor3000
05.02.2025, 15:29
Спасибо, простите за глупый вопрос в версии 3.5 он работает? а то у меня ошибки при компиляции

Вы небось скопировали ФБ HEX_DEC не думая, а это написано для Лоджика. Надо разделить ФБ на две части и в конце удалить end_fanction block
Переменные UDINT можно поменять на DWORD.

Что тут может не работать, одна арифметика 81793


Q := x/4096 MOD 16*1000+x/256 MOD 16*100+x/16 MOD 16*10+x MOD 16;
Q1:=Q/100; Q2:=Q-Q1*100;

RDV1984
05.02.2025, 23:23
Добрый день.
Пытаюсь подключится к виртуальному контроллеру, при подключении выводится окно ввода пользователя и пароля, какого пользователя у меня требует codesys?
81794

atomo2
06.02.2025, 04:20
capzap , kondor3000 Спасибо вам ! пойду разбираться, пока туплю сильно

Евгений Кислов
06.02.2025, 06:12
Добрый день.
Пытаюсь подключится к виртуальному контроллеру, при подключении выводится окно ввода пользователя и пароля, какого пользователя у меня требует codesys?
81794

Добрый день.
Того, который был создан при первом подключении к виртуальному контроллеру.

Вот тут написано, как его удалить:
https://owen.ru/forum/showthread.php?t=28167&p=401060&viewfull=1#post401060

А вот тут - в п. 10 - как сделать так, чтобы CODESYS не просил его создать при первом подключении к виртуальнику:
https://ftp.owen.ru/CoDeSys3/99_ForumFiles/CODESYS_V3.5_SP17_features_forum.pdf

atomo2
06.02.2025, 06:58
Что то я совсем запутался;) я точно знаю что 10 это значение порога 1. Запутался, в моменте что куда приходит)
81798

81799

capzap
06.02.2025, 07:38
я точно знаю что 10 это значение порога 1. Запутался, в моменте что куда приходит

10 это в десятичной <=> А - в шестнадцатеричной

atomo2
06.02.2025, 07:46
10 это в десятичной <=> А - в шестнадцатеричной

У меня вот что получается 81800


А должно вот так https://owen.ru/forum/attachment.php?attachmentid=81793&d=1738774406
Нашел у себя ошибку Q1:=Q/100; на 100 делить нужно, а изначально 10 было.
Так ну с порогами вроде как разобрался, теперь с концентрацией буду пробовать.

Спасибо всем за помощь!

kondor3000
06.02.2025, 08:02
Нашел у себя ошибку Q1:=Q/100; на 100 делить нужно, а изначально 10 было.


Так зачем код руками то набирать, код же копипастом перенести можно и без ошибок будет.

atomo2
06.02.2025, 08:22
Так зачем код руками то набирать, код же копипастом перенести можно и без ошибок будет.

;) Я случайно

А я могу часть своего питоновского скрипта адаптировать для расчёта концентрации?


Обрабатываем два регистра, 32-битное число разбиваем на 4 байта.

byte1 = (registers[0] >> 8) & 0xFF # Старший байт первого регистра
byte2 = registers[0] & 0xFF # Младший байт первого регистра
byte3 = (registers[1] >> 8) & 0xFF # Старший байт второго регистра
byte4 = registers[1] & 0xFF # Младший байт второго регистра


Определяем знак и позицию запятой

sign_bit = (byte1 >> 7) & 0x01 # 7-й бит первого байта отвечает за знак (Если sign_bit = 1, то число отрицательное.)
comma_position = byte1 & 0x07 # Младшие 3 бита первого байта — позиция запятой


Формируем число

integer_part = byte2 * 10000 + byte3 * 10 + (byte4 >> 4) # Целая часть
decimal_part = (byte4 & 0x0F) * 100 # Дробная часть
byte2 — это старшая часть целого числа (умножается на 10000).
byte3 — промежуточное значение (умножается на 10).
byte4 >> 4 — младшие разряды целой части.
byte4 & 0x0F — дробные разряды, умноженные на 100.

Применяем знак и делим на 10^comma_position

value = integer_part + decimal_part / 10000 # Объединение частей
value = -value if sign_bit else value # Применение знака
value /= 10 ** comma_position # Сдвиг запятой
value = round(value, 2) # Округление до двух знаков

kondor3000
06.02.2025, 08:27
А я могу часть своего питоновского скрипта адаптировать для расчёта концентрации?


Так вам capzap на предыдущей странице скрин выложил, правда со скрина только руками переносить

atomo2
06.02.2025, 10:50
Всем большое спасибо, все получилось
81803

chm
06.02.2025, 14:52
здравствуйте.
у меня поменялось поведение компилятора при попытке тащить проект с одной машины на другую.
В проекте имеется расширение функционального блока (extend) , который аналогичен родительскому, но с переопределением значений некоторых переменных по-умолчанию.
Прежде это мне сходило с рук, а теперь вот такие сообщения:

[ERROR] RTU: u_ReqAc_CMD: C0097: Повторяющееся определение переменной 'freeze' в функциональном блоке 'u_ReqAc_CMD' и в основе 'u_ReqCy_DEV'

что можно в связи с этим поделать?

Солнечный заяц
06.02.2025, 16:17
всем привет.
Хочу упростить себе задачу и создать таблицу параметров пользователя для проекта, что бы не рисовать окно настроек, а засунуть все параметры в графический элемент "таблица".
Создаю массив структуры с элементами "Название", "Значение", "Единицы измерения".
Засовываю этот массив в таблицу визуализации, получается такая картинка:
81809
Но использовать массив в тексте программы неудобно, нужно постоянно смотреть индекс нужного параметра. Можно использовать Перечисление [ENUM] вместо индекса массива, но тогда нужно при добавлении параметра объявлять его в двух разных местах.
Может быть кто-то из гуру подскажет более элегантное решение?

Cs-Cs
06.02.2025, 16:32
А если для индексов использовать VAR_CONSTANT?

Солнечный заяц
06.02.2025, 16:38
А если для индексов использовать VAR_CONSTANT?
Да, это удобнее, чем перечисление )

Cs-Cs
06.02.2025, 18:23
У меня CodeSys 3.5 на другом компе, не где форум, я щас точно не смогу поглядеть. Пишу по памяти.
В перечислениях была какая-то pragma (ставится в начале в фигурных скобках), которая запрещала использовать перечисление в виде чисел (то есть, нельзя его подставить туда, куда числа вставляются). По идее, если её убрать - то и с ним должно заработать.

Солнечный заяц
07.02.2025, 10:20
Структура с нужным именами, коли уж заместо индексов имена енума вставляете

Структура из структур некорректно отображается в элементе "таблица" в визуализации. Не знаю как ее нормально вывести на экран. Нормально отображается массив структур.

Солнечный заяц
07.02.2025, 10:32
здравствуйте.
у меня поменялось поведение компилятора при попытке тащить проект с одной машины на другую.
В проекте имеется расширение функционального блока (extend) , который аналогичен родительскому, но с переопределением значений некоторых переменных по-умолчанию.
Прежде это мне сходило с рук, а теперь вот такие сообщения:

[ERROR] RTU: u_ReqAc_CMD: C0097: Повторяющееся определение переменной 'freeze' в функциональном блоке 'u_ReqAc_CMD' и в основе 'u_ReqCy_DEV'

что можно в связи с этим поделать?

Не знаю что такое определение. Но ищите что то одинаковое с именем 'freeze' в 'u_ReqAc_CMD' и в основе 'u_ReqCy_DEV'. Попробуйте переименовать один из 'freeze' в 'freeze_1'. Если не удается найти проблемную область, сделайте копию проекта и начинайте удалять разные части программы, что бы понять, в каком элементе проблема.

Солнечный заяц
07.02.2025, 10:53
В перечислениях была какая-то pragma (ставится в начале в фигурных скобках), которая запрещала использовать перечисление в виде чисел (то есть, нельзя его подставить туда, куда числа вставляются). По идее, если её убрать - то и с ним должно заработать.
Перечисления в место индекса встают без ошибок.
Ошибки появляются только если я пытаюсь присвоить переменной значение из перечисления. Сейчас мне это не нужно, но было бы интересно узнать как разрешить такое действие. По умолчанию установлены 2 прагмы:
{attribute 'qualified_only'}
{attribute 'strict'}
Они не влияют на возможность присваивания, ошибка появляется все равно.

Cs-Cs
07.02.2025, 12:42
Вот вроде как:
'qualified_only' - это когда обращаться можно только через "ИмяПеречисления.Значение". Без него можно обращаться только по "Значение"
'strict' - вроде как это то самое, что мы ищем. Ты пробовал его убирать?

Солнечный заяц
07.02.2025, 12:43
А таблице в визуализации скормите указатель на массив структур который указывает на структуру из структур
Делов то
Спасибо! Это то что нужно!
а можно как-то выделить память под структуру сразу с запасом? что бы указатель на массив сделать на 30 элементов, например. А структуру дополнять по мере необходимости.

Солнечный заяц
07.02.2025, 12:53
'strict' - вроде как это то самое, что мы ищем. Ты пробовал его убирать?
Да, это оно ) попробовал еще раз, мой косяк, у переменной просто был тип данных Byte, а нужен хотя бы word ) потому и ругался на присваивание. Спасибо, это может пригодиться.

Cs-Cs
07.02.2025, 12:55
Солнечный заяц Ура! И я хоть вспомнил что ещё что-то помню =))

Солнечный заяц
07.02.2025, 13:18
var
X at %MMMM : TT;
Y at %MMMM : array[1..30] of T; //и для таблицы
---
X.a... := ... //хошь так
Y[индекс для a].... := //хошь эдак
//но
jopa := sizeof(X) <> sizeof(Y);

2 объявления по одному адресу?! Это вообще законно? А какое адресное пространство можно использовать? Смотреть в документации к Кодесис или к целевой платформе?
PS: а если X и Y по одному адресу, зачем нам проверять их размеры?
PPS: догадался, X должен быть меньше Y )

GoodLuck
07.02.2025, 20:14
Здравствуйте!

В проекте есть 3 пользователя и 4 кнопки.
Кнопка "Admin" видимая, если текущий пользователь Admin. Кнопка "Service" видимая, если пользователь Service. Кнопка "Operator" видимая, если пользователь Operator.

Если пользователь неопределен должна быть видима только кнопка "None". И с этой кнопкой возникли проблемы, не могу настроить права доступа. Если пытаюсь поставить галочку Invisible для любого пользователя, галочка автоматически ставится и для None.

Евгений Кислов
07.02.2025, 20:17
Здравствуйте!

В проекте есть 3 пользователя и 4 кнопки.
Кнопка "Admin" видимая, если текущий пользователь Admin. Кнопка "Service" видимая, если пользователь Service. Кнопка "Operator" видимая, если пользователь Operator.

Если пользователь неопределен должна быть видима только кнопка "None". И с этой кнопкой возникли проблемы, не могу настроить права доступа. Если пытаюсь поставить галочку Invisible для любого пользователя, галочка автоматически ставится и для None.

Добрый день.
Вы можете в кнопке None в параметре Переменные состояния/Невидимый прописать


VisuElems.CurrentUserName <> "None"
или, возможно, так:
VisuElems.CurrentUserName <> ""


и вообще не настраивать для нее права доступа.

GoodLuck
07.02.2025, 20:29
Добрый день.
Вы можете в кнопке None в параметре Переменные состояния/Невидимый прописать


VisuElems.CurrentUserName <> "None"
или, возможно, так:
VisuElems.CurrentUserName <> ""


и вообще не настраивать для нее права доступа.

У меня примерно так и было сделано в проекте, я использовала переменную VisuElems.CurrentUserName.
Но почему-то значение этой переменной периодически сбрасывалось на пустую строку ("") и получалось мигание элемента на экране.

Евгений Кислов
07.02.2025, 22:00
У меня примерно так и было сделано в проекте, я использовала переменную VisuElems.CurrentUserName.
Но почему-то значение этой переменной периодически сбрасывалось на пустую строку ("") и получалось мигание элемента на экране.

Эту переменную можно использовать "внутри" элементов визуализации, но нельзя использовать в программе. Вы, случаем, не пытались именно это делать?

GoodLuck
07.02.2025, 22:36
Эту переменную можно использовать "внутри" элементов визуализации, но нельзя использования в программе. Вы, случаем, не пытались именно это делать?

Да, использовала переменную из кода программы. Спасибо:), учту этот момент.

Солнечный заяц
08.02.2025, 12:02
Можете не проверять. Самое лучшее - пройти через боль
Просто погибнут люди, а я сяду 8)

как все запущено
not <> это =
Не, синтаксис я пока еще помню ) просто не понимаю чего страшного произойдет.
Если X > Y то часть переменных X не попадет в таблицу визуализации и не будут доступны по Y[индекс для a]
Если Y > X то у нас в таблице визуализации просто останутся пустые строки.
Или есть какие-то особенности наложения данных?
var
X at %MMMM : TT;
Y at %MMMM : array[1..30] of T; //и для таблицы
---
X.a... := ... //хошь так
Y[индекс для a].... := //хошь эдак
//но
jopa := sizeof(X) <> sizeof(Y);

atomo2
10.02.2025, 10:06
Добрый день) подскажите пожалуйста , вот есть у меня МУ 110 на первый ВЫХОД я назначаю переменную WER к примеру, так же мне нужно чтобы при срабатывание ВЫХОДА на МУ110 включался первый вход на МВ110, я тоже назначаю эту же переменную, все включается , а как сделать чтобы на МВ110 2 или 3 входа от одного ВЫХОДА с МУ110 включались? если эту же переменную указываю , то ошибка компиляции совпадают переменные, что естественно.

81893
81894

Валенок
10.02.2025, 10:19
...просто не понимаю чего страшного произойдет...Или есть какие-то особенности наложения данных?
Нет. Да и сами себе же ответили.
Нечего не проверять - ваше право. В конце концов ..

Просто погибнут люди, а я сяду 8)..

Валенок
10.02.2025, 10:22
..так же мне нужно чтобы при срабатывание ВЫХОДА на МУ110 включался первый вход на МВ110..
Физически выход заведите на вход - и будет так как вам нужно
Это единственный правильный вариант реализации вашей хотелки. При условии что вы эту хотелку правильно сформулировали.

Солнечный заяц
10.02.2025, 11:02
Валенок, спасибо за консультацию, вы мне очень помогли! )

TaPX
10.02.2025, 13:47
Всем добрый день. А зачем нужны метки в редакторе FBD? И как и когда ими пользоваться?

Карбофос
10.02.2025, 16:07
Здравствуйте.
Понадобилось установить на компьютер Codesys 3.5 sp18 patch 5 (для контроллера другого производителя). Теперь при открытии проектов СПК в Cosesys 3.5.17.3 выскакивает окно с предложением обновить компоненты в проекте.
81904
Для старых проектов я конечно же могу просто ничего не обновлять, но я переживаю, что при создании нового проекта для контролеров Овен в SP17, он будет создан с версиями компонентов, которые несовместимы с контроллерами Овен. Или все будет работать и с новыми версиями?

kondor3000
10.02.2025, 16:09
Здравствуйте.
Понадобилось установить на компьютер Codesys 3.5 sp18 patch 5 (для контроллера другого производителя). Теперь при открытии проектов СПК в Cosesys 3.5.17.3 выскакивает окно с предложением обновить компоненты в проекте.
81904
Для старых проектов я конечно же могу просто ничего не обновлять, но я переживаю, что при создании нового проекта для контролеров Овен в SP17, он будет создан с версиями компонентов, которые несовместимы с контроллерами Овен. Или все будет работать и с новыми версиями?

Не обновляйте, иначе потом придётся вручную менять, то что не подходит.
При создании сразу ставьте (заменяйте) на нужные компоненты.
Кстати, на вашем скрине выше 4.2 ничего и нет, а можно до 4.4 работать на 17.3
4.5 уже только на 18

Карбофос
10.02.2025, 22:43
Кстати, на вашем скрине выше 4.2 ничего и нет, а можно до 4.4 работать на 17.3
Т.е. по идее при создании нового проекта можно ничего не делать? Это хорошо. Спасибо.

atomo2
11.02.2025, 05:28
А можно как то переменные в codesys писать в базу данных?

Евгений Кислов
11.02.2025, 06:09
А можно как то переменные в codesys писать в базу данных?

Добрый день.
Можно. См. пример:
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_SqlFeatures_3517v1.projectarchive

vitalij
12.02.2025, 08:37
Здравствуйте. есть ли у плк210 тактовые биты точные, допустим 1 секунда, 100 мс и т.п. если есть то как к ним получить доступ и использовать в программе?

Евгений Кислов
12.02.2025, 08:59
Здравствуйте. есть ли у плк210 тактовые биты точные, допустим 1 секунда, 100 мс и т.п. если есть то как к ним получить доступ и использовать в программе?

Добрый день.
https://owen.ru/forum/showthread.php?t=38944
См. компонент OwenPulseBits.

vitalij
13.02.2025, 08:51
Здравствуйте. сегодня столкнулся с такой проблемой плк210 соединене с тремя модулями по ethernet топология шина. решил замкнуть в кольцо то есть с последнего модуля патч корд на центральный блок контроллера в итоге стали ошибки соединения по первому модулю ввода. какая может быть причина?

Евгений Кислов
13.02.2025, 09:05
Здравствуйте. сегодня столкнулся с такой проблемой плк210 соединене с тремя модулями по ethernet топология шина. решил замкнуть в кольцо то есть с последнего модуля патч корд на центральный блок контроллера в итоге стали ошибки соединения по первому модулю ввода. какая может быть причина?

Добрый день.
Напишите ваш вопрос на support@owen.ru, пожалуйста.

TaPX
13.02.2025, 10:11
Всем добрый день. А зачем нужны метки в редакторе FBD? И как и когда ими пользоваться?

А ответьте, пожалуйста, кто-нибудь )

Cs-Cs
13.02.2025, 10:17
Метки, как и в других языках - чтобы обойти (перескочить) участок кода. Я на 2.3 на CFC писал одну дичь (так как про SEL не знал тогда), и их использовал.
Тебе нужно почитать справку по SHR, SHL - сдвигу бит.
Вроде как:
* Сдвигаешь нужную маску на 5 (или 6 - проверить) бит влево
* Делаешь им логический OR

Солнечный заяц
13.02.2025, 10:36
Всем добрый день. А зачем нужны метки в редакторе FBD? И как и когда ими пользоваться?
Офлайн справка на русском доступна, если открыть ее без интернета или сняв галочку "Использовать веб-справку, если доступно" в меню Инструменты-Опции-Справка.
Далее заходим в меню Справка-Указатель, ищем слово "Метка", читаем:
81958
Нажимаем по ссылке и читаем про "безусловный переход":
81959

TaPX
13.02.2025, 10:39
Офлайн справка на русском доступна, если открыть ее без интернета или сняв галочку "Использовать веб-справку, если доступно" в меню Инструменты-Опции-Справка.
Далее заходим в меню Справка-Указатель, ищем слово "Метка", читаем:
81958
Нажимаем по ссылке и читаем про "безусловный переход":
81959

благодарю. блин, такие глупые вопросы задаю...

ShishKumar
13.02.2025, 11:06
Приветствую! Нужна Ваша помощь:
Я загружаю проект, сделанный в Codesys 3.5 Sp16 на отладочную панель (в проекте нет ничего кроме одной переменной, заданной мной и потенциометра, к которому та самая переменная привязана). Загружаю проект и начинаю вертеть этот потенциометр и вижу в кодесисе, как значения переменной меняются.
Так вот, стоит задача - считать с помощью СКАДы значение этой переменной.
Вопрос: что мне нужно сделать в самом кодесисе? Как настроить регистры, куда эту переменную засунуть и как понять, где данные о ее значениях хранятся? В общем какую работу нужно провести, чтобы уже переходить к настройкам самой СКАДы.
Я сделал: добавил слейв, вписал айпи адрес панельки, маску и тп. Добавил одну переменную с типом данных Real и поместил эту переменную в регистры временного хранения.
Скаду использую RAPID Scada.
Заранее благодарю!

Буду рад любой помощи, спасибо!!

TaPX
13.02.2025, 12:29
А в codesys есть что-то похожее на cd32 и dc32 из Owen Logic?

1exan
13.02.2025, 12:44
А в codesys есть что-то похожее на cd32 и dc32 из Owen Logic?

Обычно в codesys необходимости в этих блоках не возникает, но если очень нужен - никто не мешает создать свой.

Что-то типа такого наверно:


uiOut := 1;
IF uiIn.0 THEN
uiOut := 2;
END_IF;
IF uiIn.1 THEN
uiOut := 3;
END_IF;
IF uiIn.2 THEN
uiOut := 4;
END_IF;
IF uiIn.3 THEN
...

kondor3000
13.02.2025, 13:28
Я сделал: добавил слейв, вписал айпи адрес панельки, маску и тп. Добавил одну переменную с типом данных Real и поместил эту переменную в регистры временного хранения.
!

Чтобы передать REAL (2 регистра), надо с помощью Объединения или ФБ (функц. блок) REAL_TO_2WORD разложить на 2 штуки WORD и отправить в соотнесение переменных, в слейве.
При не правильном отображении поменять местами 2 шт WORD.
WORD2_TO_REAL можно собрать прочитанный REAL. Скрины https://owen.ru/forum/showthread.php?t=40771&p=455445#post455445

В регистры временного хранения, Скада будет записывать, чтобы Скадой читать помещать надо во входные регистры.
Тут есть скрины соотнесения https://owen.ru/forum/showthread.php?t=40210&page=3#27

melky
13.02.2025, 13:37
TaPX да вроде в oscat что-то было, но не уверен.

GoodLuck
14.02.2025, 10:45
Здравствуйте!

В проект добавлен Alarm Configuration. Допустим, срабатывает авария, в Таблице Тревог появляется сообщение. Если в момент действующей аварии ПЛК перезагрузится, то данная авария навсегда останется в Истории. Ее не получится квитировать, а затем удалить из Истории.

Возможно ли как-то решить эту проблему?

Евгений Кислов
14.02.2025, 11:18
Здравствуйте!

В проект добавлен Alarm Configuration. Допустим, срабатывает авария, в Таблице Тревог появляется сообщение. Если в момент действующей аварии ПЛК перезагрузится, то данная авария навсегда останется в Истории. Ее не получится квитировать, а затем удалить из Истории.

Возможно ли как-то решить эту проблему?

Добрый день.
Насколько я знаю, нет возможности удалить из истории конкретную тревогу.

Артур 174
16.02.2025, 17:09
Подскажите пожалуйста как реализовать Rs тригер с запоминанием при отключении питания.

kondor3000
16.02.2025, 17:24
Подскажите пожалуйста как реализовать Rs тригер с запоминанием при отключении питания.

На CFC будет так, переменная Q должна быть RETAIN 81990 или просто триггер объявить в RETAIN.
На ST будет так

Q := not Res and (Q or Set);

Serg290
17.02.2025, 08:34
Доброго всем дня. Подскажите пожалуйста, как лучше всего организовать контроль связи между 2-х ПЛК 210-0х? Имеется ввиду обрыв связи между ними. На данный момент организована связь Отправитель-Получатель. Нужно контролировать связь UDP. Заранее спасибо. Извините если что не правильно написал.

1exan
17.02.2025, 08:36
Доброго всем дня. Подскажите пожалуйста, как лучше всего организовать контроль связи между 2-х ПЛК 210-0х? Имеется ввиду обрыв связи между ними. Заранее спасибо.

Ну хоть уточните, как связываете их

Serg290
17.02.2025, 08:44
связь происходит по Ethernet.

Евгений Кислов
17.02.2025, 08:51
Доброго всем дня. Подскажите пожалуйста, как лучше всего организовать контроль связи между 2-х ПЛК 210-0х? Имеется ввиду обрыв связи между ними. На данный момент организована связь Отправитель-Получатель. Нужно контролировать связь UDP. Заранее спасибо. Извините если что не правильно написал.

Добрый день.
Если речь о сетевых переменных (NVL) - см. п. 2.7:
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_PlcCommunication_v3.0.pdf

Serg290
17.02.2025, 09:08
Спасибо большое. Читал, читал и не дочитал (лег спать).

TaPX
17.02.2025, 14:34
Добрый день. А вот так не работает, да? Глобальные переменные объединил в массив, чтобы обходить их в цикле, а они в массиве остаются нулевыми, несмотря на их отличное от нуля значение...
820078200882009

Евгений Кислов
17.02.2025, 15:47
Добрый день. А вот так не работает, да? Глобальные переменные объединил в массив, чтобы обходить их в цикле, а они в массиве остаются нулевыми, несмотря на их отличное от нуля значение...
820078200882009

Добрый день.
Вы проинициализировали массив значениями глобальных переменных.
Если нужно, чтобы элементы массива в любой момент времени соответствовали значениям глобальных переменных - см. совет Cs-Cs ниже.

Cs-Cs
17.02.2025, 18:16
Я даже переспрошу, так как мне интересно. Так судя по записи объявления этого массива - он получил просто начальные значения этих переменных.
Почему они должны к массиву привязаться-то?
Нужно было сразу массив и делать. А его индексы - константами, чтобы красиво по именам к ним обращаться.
Если я не прав - пусть Евгений Кислов меня поправит.

TaPX
18.02.2025, 09:10
Я даже переспрошу, так как мне интересно. Так судя по записи объявления этого массива - он получил просто начальные значения этих переменных.
Почему они должны к массиву привязаться-то?
Нужно было сразу массив и делать. А его индексы - константами, чтобы красиво по именам к ним обращаться.
Если я не прав - пусть Евгений Кислов меня поправит.

то есть массив уже должен быть в глобальных переменных, я понял. А как красиво обращаться к элементам массива по именам?

Cs-Cs
18.02.2025, 10:11
то есть массив уже должен быть в глобальных переменных, я понял. А как красиво обращаться к элементам массива по именам?
В общем случае - да. А обращаться просто: заведи константы (VAR_CONSTANT) с красивыми именами и нужными индексами массива, раз такое дело.
Ну то есть, СХЕМАТИЧЕСКИ так

VAR
arrAlarms[1..5] of WORD (или что там было - пофиг для примера)
END_VAR

VAR_CONSTANT
alrmNasos : word := 1;
alrmKlapan : word := 2;
alrmPower : word := 3;
END_VAR

...и потом обращаться как arrAlarms[alrmKlapan]

TaPX
18.02.2025, 15:57
В общем случае - да. А обращаться просто: заведи константы (VAR_CONSTANT) с красивыми именами и нужными индексами массива, раз такое дело.
Ну то есть, СХЕМАТИЧЕСКИ так

VAR
arrAlarms[1..5] of WORD (или что там было - пофиг для примера)
END_VAR

VAR_CONSTANT
alrmNasos : word := 1;
alrmKlapan : word := 2;
alrmPower : word := 3;
END_VAR

...и потом обращаться как arrAlarms[alrmKlapan]

блин, точно )
благодарю )

Cs-Cs
18.02.2025, 16:42
блин, точно )
благодарю ) На здоровье. Проверь только за мной то, как там пишется: VAR_CONSTANT или VAR CONSTANT - я иногда пишу по памяти, и мне лень проверять =)

Назаров Александр
19.02.2025, 12:40
Всем добрый день!
Отладка программы. Добавить точку останова. Вкладка данные. Добавляю переменную из дерева проекта. После выбора показывает ошибку, что переменная не выбрана... Что не так?

Евгений Кислов
19.02.2025, 12:54
Всем добрый день!
Отладка программы. Добавить точку останова. Вкладка данные. Добавляю переменную из дерева проекта. После выбора показывает ошибку, что переменная не выбрана... Что не так?

Добрый день.
В CODESYS точки останова данных (data breakpoints), к сожалению, не поддержаны для устройств c Linux.

82031

TaPX
19.02.2025, 15:14
И снова здравствуйте. А кто-нибудь реализовывал очередь FIFO на ST?

kondor3000
19.02.2025, 15:19
И снова здравствуйте. А кто-нибудь реализовывал очередь FIFO на ST?

Соседняя тема https://owen.ru/forum/showthread.php?t=40837&p=456829&viewfull=1#post456829
Чуть подправить только, тема по Лоджику

TaPX
19.02.2025, 15:31
Соседняя тема https://owen.ru/forum/showthread.php?t=40837&p=456829&viewfull=1#post456829
Чуть подправить только, тема по Лоджику

ну там немного не то. Мне бы хотелось ложить в массив ИНТы, причем только оригинальные - аналог множества в питоне. И доставать их оттуда по принципу FIFO

PS. Нашел в Oscat реализацию:
82045
PPS: Осталось реализовать оригинальность элементов

lnikita
19.02.2025, 19:48
Подскажите, пожалуйста, как реализовать проверку по давлению?
Есть уставка по давлению, например 15+-05МПа, необходимо, чтобы программа перешла к следующему шагу, когда давление в этой уставке стабилизируется в течении какого-то времени (5-10с)
Сложность в том, что показания с преобразователя давления 4..20, прыгают,, нет стабильных и точных показаний. (может помехи от оборудования).

МихаилГл
19.02.2025, 19:54
TON_X(IN:= ((DAV<=MAX) AND (DAV>=MIN))...

kondor3000
19.02.2025, 20:00
Подскажите, пожалуйста, как реализовать проверку по давлению?
Есть уставка по давлению, например 15+-05МПа, необходимо, чтобы программа перешла к следующему шагу, когда давление в этой уставке стабилизируется в течении какого-то времени (5-10с)
Сложность в том, что показания с преобразователя давления 4..20, прыгают,, нет стабильных и точных показаний. (может помехи от оборудования).

Показания с датчиков 4-20 мА, а точнее с АЦП датчика всегда прыгают, вопрос на сколько? В диапазон 14,5 -15,5 укладываются?
Вот и сравнивайте в этом диапазоне, по таймеру на 5-10 сек.

lnikita
19.02.2025, 20:03
Когда стабилизируется, то да.
Тут бы пример кода может есть, как реализовать?
Как будто бы через счётчик нужно или в течении какого то времени.
Например если давление в диапазоне то +1. И так сколько нибудь циклов... А если вылетело из диапазона счётчик обнулить. Ну вот только как реализовать...

МихаилГл
19.02.2025, 20:36
Когда стабилизируется, то да.
Тут бы пример кода может есть, как реализовать?
Как будто бы через счётчик нужно или в течении какого то времени.
Например если давление в диапазоне то +1. И так сколько нибудь циклов... А если вылетело из диапазона счётчик обнулить. Ну вот только как реализовать...

На 2 поста выше гляньте...

Назаров Александр
20.02.2025, 12:00
Добрый день. Журнал тревог отображает сообщение: "Some kind of disk I/O error occurred. Check disk space". Изначально место хранения журнала в LUCI было [по умолчанию] и судя по "/rom" которое, судя по всему закончилось. Переключил место расположения на микроSD. НО ошибка не ушла. В базу ничего не сохраняется. Вопрос:
1. Что не так с переключением на SD;
2. Что можно (нужно?) сделать с заполненным "/rom"?

Евгений Кислов
20.02.2025, 12:08
Добрый день.


Добрый день. Журнал тревог отображает сообщение: "Some kind of disk I/O error occurred. Check disk space". Изначально место хранения журнала в LUCI было [по умолчанию] и судя по "/rom" которое, судя по всему закончилось. Переключил место расположения на микроSD. НО ошибка не ушла. В базу ничего не сохраняется. Вопрос:
1. Что не так с переключением на SD;
2. Что можно (нужно?) сделать с заполненным "/rom"?

1. После изменения пути следует перезагрузить контроллер.
2. Ничего. Так и должно быть - это read-only область прошивки контроллера. Она всегда будет заполнена ровно на 100%.
У вас, скорее всего, просто повредился файл базы журнала тревог.

Назаров Александр
20.02.2025, 12:18
Добрый день.
1. После изменения пути следует перезагрузить контроллер.
2. Ничего. Так и должно быть - это read-only область прошивки контроллера. Она всегда будет заполнена ровно на 100%.
У вас, скорее всего, просто повредился файл базы журнала тревог.
Поменял карту. Стало гораздо лучше. Спасибо.

Назаров Александр
20.02.2025, 12:39
Еще вопрос. Почему TargetVars.stDrives... не заполнены значениями?

Евгений Кислов
20.02.2025, 13:02
Еще вопрос. Почему TargetVars.stDrives... не заполнены значениями?

Потому что они не привязаны к каналам компонента Drives.

TaPX
20.02.2025, 15:43
ну там немного не то. Мне бы хотелось ложить в массив ИНТы, причем только оригинальные - аналог множества в питоне. И доставать их оттуда по принципу FIFO

PS. Нашел в Oscat реализацию:
82045
PPS: Осталось реализовать оригинальность элементов

если кому интересно, чуть подпилил оскатовскую реализацию очереди: теперь она содержит только оригинальные значения, и выдергиваемые значения в массиве обнуляются (аналог pop() в питоне). Будет здорово, если кто-то найдет, как это можно оптимизировать/отрефакторить.
82080

ВладОвен
21.02.2025, 09:32
Привет.
Подскажите что я делаю не так?
Я хочу вывести на экран переменные с 3-я знаками после запятой. Тип этих переменных - LongReal. Указываю формат - %1.3f
Настраиваю:

82098

Однако потом на дисплее я вижу:

82099

Почему я вижу шесть знаков после запятой, а не три?

capzap
21.02.2025, 09:42
Почему я вижу шесть знаков после запятой, а не три?

попробуйте %07.3f

aaaSashaMGGU
21.02.2025, 12:38
Привет.
Подскажите что я делаю не так?
Я хочу вывести на экран переменные с 3-я знаками после запятой. Тип этих переменных - LongReal. Указываю формат - %1.3f
Настраиваю:

82098

Однако потом на дисплее я вижу:

82099

Почему я вижу шесть знаков после запятой, а не три?

Этот глюк в последнее время уже самого подбешивает...
Решение:
Ctrl + A, Clrl + X, Ctrl + S, Ctrl + V, Ctrl +S
После этого грузим в контроллер - и всё работает

TaPX
21.02.2025, 12:39
попробуйте %07.3f

а какая логика?

capzap
21.02.2025, 12:44
а какая логика?

это рекомендация нейросети, зная что REAL показывает 10 знаков, а в Вашем случае LREAL показывает 15, то с фиксиованной размерностью должно быть обязательно три знака после запятой при формате %012.3f для LREAL, такое форматирования найдете даже в хелпе на КДС https://content.helpme-codesys.com/en/CODESYS%20Visualization/_visu_placeholder_with_formatting_sequence_in_a_st ring.html

ВладОвен
21.02.2025, 13:35
Решение:
Ctrl + A, Clrl + X, Ctrl + S, Ctrl + V, Ctrl +S
После этого грузим в контроллер - и всё работает

Спасибо. Это сработало.

rybakov-ks
21.02.2025, 14:29
Добрый день.
Контроллер СПК110, последняя прошивка. В работе на столе функционирует без проблем. Однако после установки в шкаф, примерно через 20-25 минут, на экране начинают пропадать изображения. В логах:

21.02.2025 11:25:24 !!!! Warning: Image=$PlcLogic$/$visu$/em.png not loaded CmpTargetVisu
21.02.2025 11:25:24 !!!! Warning: Image=$PlcLogic$/$visu$/scrub14_resize.png not loaded CmpTargetVisu
21.02.2025 11:25:24 !!!! Warning: Image=$PlcLogic$/$visu$/background2.jpg not loaded CmpTargetVisu
21.02.2025 11:25:24 **** ERROR: directory not exist $USB$/ 0x16281016
21.02.2025 11:25:24 Could not open /dev/random: Too many open files (24) 0x00000141
21.02.2025 11:25:24 Could not open /dev/random: Too many open files (24) 0x00000141
21.02.2025 11:25:24 Could not open /dev/random: Too many open files (24) 0x00000141
21.02.2025 11:25:23 **** ERROR: Old files remover: open directory error unknown error $USB$/Scrubber 0x16281016
21.02.2025 11:25:23 !!!! Warning: Image=$PlcLogic$/$visu$/checkboxunchecked.svg not loaded CmpTargetVisu
21.02.2025 11:25:23 !!!! Warning: Image=$PlcLogic$/$visu$/icons8-checkmark-208.png not loaded CmpTargetVisu
21.02.2025 11:25:23 !!!! Warning: Image=$PlcLogic$/$visu$/history.png not loaded CmpTargetVisu
21.02.2025 11:25:23 !!!! Warning: Image=$PlcLogic$/$visu$/home.png not loaded CmpTargetVisu
21.02.2025 11:25:23 Could not open /dev/random: Too many open files (24) 0x00000141
21.02.2025 11:25:23 Could not open /dev/random: Too many open files (24) 0x00000141
21.02.2025 11:25:23 Could not open /dev/random: Too many open files (24) 0x00000141
21.02.2025 11:25:22 !!!! Warning: Image=$PlcLogic$/$visu$/log8 (1).png not loaded CmpTargetVisu
21.02.2025 11:25:22 !!!! Warning: Image=$PlcLogic$/$visu$/caution.svg not loaded CmpTargetVisu
21.02.2025 11:25:22 !!!! Warning: Image=$PlcLogic$/$visu$/background2.jpg not loaded CmpTargetVisu
21.02.2025 11:25:21 Could not open /dev/random: Too many open files (24) 0x00000141
21.02.2025 11:25:21 **** ERROR: Old files remover: open directory error unknown error $USB$/Scrubber 0x16281016
21.02.2025 11:25:21 Could not open /dev/random: Too many open files (24)

Посмотрел тут https://owen.ru/forum/showthread.php?t=28167&page=16, что проблема скорее всего в символьной конфигурации. Удалил символьную конфигурацию. Отключил задачу OwenCloud. Однако проблема сохраняется. В итоге если СПК110 подключен к сети по интерфейсу Ethernet, то все работает стабильно. Если отключить от сети, спустя некоторое время начинают пропадать изображения и в логе "Too many open files".

МихаилГл
21.02.2025, 14:29
Ctrl + S это сохранение?

ВладОвен
21.02.2025, 14:34
Ctrl + S это сохранение?

Да. Это сохранение.

TaPX
21.02.2025, 22:09
Добрый день.
Контроллер СПК110, последняя прошивка. В работе на столе функционирует без проблем. Однако после установки в шкаф, примерно через 20-25 минут, на экране начинают пропадать изображения. В логах:

21.02.2025 11:25:24 !!!! Warning: Image=$PlcLogic$/$visu$/em.png not loaded CmpTargetVisu
21.02.2025 11:25:24 !!!! Warning: Image=$PlcLogic$/$visu$/scrub14_resize.png not loaded CmpTargetVisu
21.02.2025 11:25:24 !!!! Warning: Image=$PlcLogic$/$visu$/background2.jpg not loaded CmpTargetVisu
21.02.2025 11:25:24 **** ERROR: directory not exist $USB$/ 0x16281016
21.02.2025 11:25:24 Could not open /dev/random: Too many open files (24) 0x00000141
21.02.2025 11:25:24 Could not open /dev/random: Too many open files (24) 0x00000141
21.02.2025 11:25:24 Could not open /dev/random: Too many open files (24) 0x00000141
21.02.2025 11:25:23 **** ERROR: Old files remover: open directory error unknown error $USB$/Scrubber 0x16281016
21.02.2025 11:25:23 !!!! Warning: Image=$PlcLogic$/$visu$/checkboxunchecked.svg not loaded CmpTargetVisu
21.02.2025 11:25:23 !!!! Warning: Image=$PlcLogic$/$visu$/icons8-checkmark-208.png not loaded CmpTargetVisu
21.02.2025 11:25:23 !!!! Warning: Image=$PlcLogic$/$visu$/history.png not loaded CmpTargetVisu
21.02.2025 11:25:23 !!!! Warning: Image=$PlcLogic$/$visu$/home.png not loaded CmpTargetVisu
21.02.2025 11:25:23 Could not open /dev/random: Too many open files (24) 0x00000141
21.02.2025 11:25:23 Could not open /dev/random: Too many open files (24) 0x00000141
21.02.2025 11:25:23 Could not open /dev/random: Too many open files (24) 0x00000141
21.02.2025 11:25:22 !!!! Warning: Image=$PlcLogic$/$visu$/log8 (1).png not loaded CmpTargetVisu
21.02.2025 11:25:22 !!!! Warning: Image=$PlcLogic$/$visu$/caution.svg not loaded CmpTargetVisu
21.02.2025 11:25:22 !!!! Warning: Image=$PlcLogic$/$visu$/background2.jpg not loaded CmpTargetVisu
21.02.2025 11:25:21 Could not open /dev/random: Too many open files (24) 0x00000141
21.02.2025 11:25:21 **** ERROR: Old files remover: open directory error unknown error $USB$/Scrubber 0x16281016
21.02.2025 11:25:21 Could not open /dev/random: Too many open files (24)

Посмотрел тут https://owen.ru/forum/showthread.php?t=28167&page=16, что проблема скорее всего в символьной конфигурации. Удалил символьную конфигурацию. Отключил задачу OwenCloud. Однако проблема сохраняется. В итоге если СПК110 подключен к сети по интерфейсу Ethernet, то все работает стабильно. Если отключить от сети, спустя некоторое время начинают пропадать изображения и в логе "Too many open files".
я не силён в языках МЭК и вот этом вот всём, но у вас как будто переполнение стека открытых изображений. В питоне в таких случаях, чтобы вручную не контролировать открытие\закрытие файлов, используют менеджер контекста, а тут вам нужно вручную файлы (изображения) закрывать, наверное

rybakov-ks
22.02.2025, 07:20
Визуальных элементов в проекте действительно много, включая анимацию, но если бы проблема была связана с этим, она должна была бы проявляться сразу после загрузки визуализации. Однако сбой происходит примерно через 20 минут после запуска. Пробовал отключать OwenArchiver и OwenTrend, но это не помогло — больше в коде никаких файлов не открывается (Есть еще менеджер тревог). Смущает еще тот факт, что если СПК подключен к ПК, то проблемы нет совсем, поэтому я не могу понять на каком этапе разработки что-то пошло не так.

Евгений Кислов
22.02.2025, 08:44
Визуальных элементов в проекте действительно много, включая анимацию, но если бы проблема была связана с этим, она должна была бы проявляться сразу после загрузки визуализации. Однако сбой происходит примерно через 20 минут после запуска. Пробовал отключать OwenArchiver и OwenTrend, но это не помогло — больше в коде никаких файлов не открывается (Есть еще менеджер тревог). Смущает еще тот факт, что если СПК подключен к ПК, то проблемы нет совсем, поэтому я не могу понять на каком этапе разработки что-то пошло не так.

Добрый день.
У вас происходит утечка файловых дескрипторов.
По какой причине - надо разбираться.
Напишите, пожалуйста, в понедельник утром мне в телеграм и подготовьте доступ по AnyDesk.

S_Bugaev
24.02.2025, 15:13
Добрый день!
Как правильно изменить сетевые настройки ПЛК?
Прописываю в TargetVars.stNetwork нужные параметры с префиксом Set, взвожу xSetSettings - срабатывает через раз. То всё в порядке, xSetSettings самостоятельно сбрасывается и заданные параметры применяются, то по непонятной причине xSetSettings остаётся в True и настройки остаются прежними. Иногда в такой ситуации после перезагрузки те же настройки всё же принимаются (та же процедура, требуемые настройки хранятся в Persistent). Также странно ведет себя параметр Hostname: если задаю имя короче, чем текущее - то с высокой вероятностью происходит вышеописанное, а также остаётся "хвост" старого имени (к примеру, меняю spk2xxm011 на spk2xxm02 и получаю в sGetHostname spk2xxm021). Посмотрел недавнее видео про изменение настроек Modbus, может для сети тоже нужно какой-нибудь компонент остановить перед применением настроек? Контроллер СПК210

Евгений Кислов
24.02.2025, 15:49
Добрый день!
Как правильно изменить сетевые настройки ПЛК?
Прописываю в TargetVars.stNetwork нужные параметры с префиксом Set, взвожу xSetSettings - срабатывает через раз. То всё в порядке, xSetSettings самостоятельно сбрасывается и заданные параметры применяются, то по непонятной причине xSetSettings остаётся в True и настройки остаются прежними. Иногда в такой ситуации после перезагрузки те же настройки всё же принимаются (та же процедура, требуемые настройки хранятся в Persistent). Также странно ведет себя параметр Hostname: если задаю имя короче, чем текущее - то с высокой вероятностью происходит вышеописанное, а также остаётся "хвост" старого имени (к примеру, меняю spk2xxm011 на spk2xxm02 и получаю в sGetHostname spk2xxm021). Посмотрел недавнее видео про изменение настроек Modbus, может для сети тоже нужно какой-нибудь компонент остановить перед применением настроек? Контроллер СПК210

Добрый день.
Свяжитесь, пожалуйста, завтра утром со мной по телеграм (см. в подписи) и продемонстрируйте вашу ситуацию по AnyDesk.

ShishKumar
25.02.2025, 04:07
Чтобы передать REAL (2 регистра), надо с помощью Объединения или ФБ (функц. блок) REAL_TO_2WORD разложить на 2 штуки WORD и отправить в соотнесение переменных, в слейве.
При не правильном отображении поменять местами 2 шт WORD.
WORD2_TO_REAL можно собрать прочитанный REAL. Скрины https://owen.ru/forum/showthread.php?t=40771&p=455445#post455445

В регистры временного хранения, Скада будет записывать, чтобы Скадой читать помещать надо во входные регистры.
Тут есть скрины соотнесения https://owen.ru/forum/showthread.php?t=40210&page=3#27

Большое спасибо!

GoodLuck
26.02.2025, 09:37
Здравствуйте!
Подскажите, пожалуйста, как из кода квитировать выбранную тревогу?

Евгений Кислов
26.02.2025, 10:05
Здравствуйте!
Подскажите, пожалуйста, как из кода квитировать выбранную тревогу?

Добрый день.
Возможно, сработает такой вариант:
1. В таблице тревог - Выбор/Variable for alarm information - привязываем переменную типа VisuElemsAlarm.AlarmSelectionInfo
2. В коде вызываем


AlarmManager.AlarmGlobals.g_AlarmHandler.Acknowled geOneOfGroup(usiAlarmGroupID :=, uiAlarmID := );

где значения аргументов метода нужно будет сформировать на основе полей структуры (это потребует небольшой исследовательской работы).

GoodLuck
26.02.2025, 12:32
Добрый день.
Возможно, сработает такой вариант:
1. В таблице тревог - Выбор/Variable for alarm information - привязываем переменную типа VisuElemsAlarm.AlarmSelectionInfo
2. В коде вызываем


AlarmManager.AlarmGlobals.g_AlarmHandler.Acknowled geOneOfGroup(usiAlarmGroupID :=, uiAlarmID := );

где значения аргументов метода нужно будет сформировать на основе полей структуры (это потребует небольшой исследовательской работы).

Спасибо! Все получилось!

Подскажите, пожалуйста, еще такой вопрос. Необходимо по нажатию мыши убирать выделенную строку в Таблице Тревог.
Может, есть простой способ определить, что сенсор нажат в любом месте визуализации, кроме, Таблицы Тревог.

Евгений Кислов
26.02.2025, 13:18
Спасибо! Все получилось!

Подскажите, пожалуйста, еще такой вопрос. Необходимо по нажатию мыши убирать выделенную строку в Таблице Тревог.
Может, есть простой способ определить, что сенсор нажат в любом месте визуализации, кроме, Таблицы Тревог.

Если речь об сенсорном экране СПК - то введите в коде SCREEN. - и увидите в выпадающем списке переменные текущих координат курсора и счетчик нажатий.

Я бы на вашем месте наложил на строку заголовку и на строку номеров строк таблицы элементы Невидимый ввод и для них настроил OnMouseClick - Выполнить ST-код - присвоить переменной типа INT значение - 1. Эту переменную привязать к таблице: Выбор/Переменная для выбранной строки.

Назаров Александр
27.02.2025, 15:22
Помогите настроить Подключение ПЛК210 по UDP протоколу для обмена сетевыми переменными. 2 ПЛК находятся, еще 2 к двум можно подключиться только по TCP. Как будто везде все одинаково, а результат разный.

Евгений Кислов
27.02.2025, 21:10
Помогите настроить Подключение ПЛК210 по UDP протоколу для обмена сетевыми переменными. 2 ПЛК находятся, еще 2 к двум можно подключиться только по TCP. Как будто везде все одинаково, а результат разный.

Напишите на support@owen.ru - вам помогут.

Назаров Александр
04.03.2025, 22:43
Напишите на support@owen.ru - вам помогут.

Прошла почти неделя. Support кормит завтраками. Или помощь платная?

ВладиславВладимирович
05.03.2025, 00:46
Коллеги, добрый вечер!
Кому-нибудь приходилось в кодесис 3 для СПК делать графики с логарифмической шкалой? Просьба рассказать как это правильно сделать

Евгений Кислов
05.03.2025, 08:28
Прошла почти неделя. Support кормит завтраками. Или помощь платная?

Это не так. Напишите мне в телеграм, пожалуйста (в подписи).

S_Bugaev
05.03.2025, 10:32
Добрый день! Существует ли программный способ сбросить ПЛК в состояние "как после прошивки"? Чтобы переинициализировались значения переменных (в т.ч. persistent) в значения, заданные при инициализации структур (переприсваивать в коде программы значения нескольких десятков настроек не очень хочется), сбросились пароли пользователей в изначально заданные, очистилась история трендов и Alarm managera и т.п. Цель - пытаюсь сделать кнопку "Сбросить проект в заводские настойки". Использование механизма рецептов в моём случае (то ли из-за слишком сложной структуры, то ли из-за её размеров) после прошивки успевает создать файл рецепта размером 28 кБ, но дальше генерирует исключение.
Можно, конечно, записать эту структуру в обычный файл, но тогда придётся ещё как то следить за его содержимым - любое изменение в структуре настроек сразу сделает несовместимым ранее созданный файл. В любом случае это не решает задачу сброса паролей и истории трендов и алармов.

Евгений Кислов
05.03.2025, 11:07
Добрый день! Существует ли программный способ сбросить ПЛК в состояние "как после прошивки"? Чтобы переинициализировались значения переменных (в т.ч. persistent) в значения, заданные при инициализации структур (переприсваивать в коде программы значения нескольких десятков настроек не очень хочется), сбросились пароли пользователей в изначально заданные, очистилась история трендов и Alarm managera и т.п. Цель - пытаюсь сделать кнопку "Сбросить проект в заводские настойки". Использование механизма рецептов в моём случае (то ли из-за слишком сложной структуры, то ли из-за её размеров) после прошивки успевает создать файл рецепта размером 28 кБ, но дальше генерирует исключение.
Можно, конечно, записать эту структуру в обычный файл, но тогда придётся ещё как то следить за его содержимым - любое изменение в структуре настроек сразу сделает несовместимым ранее созданный файл. В любом случае это не решает задачу сброса паролей и истории трендов и алармов.

Добрый день.
Технически - вероятно, самым простым вариантом является вызов этой функции:
https://content.helpme-codesys.com/en/libs/CmpApp/Current/AppReset.html

Останется продумать, как после ее выполнения автоматически скопировать файлы "дефолтного" загрузочного приложения (Application.app и Application.crc) в директорию .../PlcLogic/Application

TaPX
06.03.2025, 10:37
Добрый день, камрады. Два таких вопроса есть:
1. В проекте несколько программ. Как правильно (есть какие-то стандарты, типа PEP8 в питоне?) их запускать - добавить их все в MainTask или прописать их запуск в дефолтной PLC_PRG вот так: PRG_1(); PRG_2(); ..... PRG_N();.
2. В проекте используется SQLite. Поддерживаются ли при составлении запросов к БД плейсхолдеры для составления динамических запросов типа "SELECT * FROM users WHERE userid = ?" Вопросительный знак в этом запросе позволяет динамически подставлять значение. И если поддерживается, как это делать?

Емельянов Кирилл
07.03.2025, 03:31
1. Никак. Разные способы вызова программ и сделаны для того, чтобы можно было выбрать какой удобнее в конкретной ситуации. Овен не рекомендует вносить изменения в задачи - вот и весь стандарт

Назаров Александр
07.03.2025, 09:32
Напишите на support@owen.ru - вам помогут.

Спасибо Евгению Кислову. Вопросы сняты. Проблема решена.

TaPX
10.03.2025, 10:12
Доброе утро. Я не понимаю, почему у меня код отрабатывает только первую итерацию первого цикла. В БД пишется только первое значение первого элемента aiValues. И записывается только один раз, а не каждые 15 секунд. Что у меня неправильно?82364

Евгений Кислов
10.03.2025, 10:30
Доброе утро. Я не понимаю, почему у меня код отрабатывает только первую итерацию первого цикла. В БД пишется только первое значение первого элемента aiValues. И записывается только один раз, а не каждые 15 секунд. Что у меня неправильно?82364

Добрый день.
SysExecute выполняется по переднему фронту на входе xExecute. У вас на этом входе константа TRUE - так что вполне логично, что он выполняется только один раз.

TaPX
10.03.2025, 10:49
Добрый день.
SysExecute выполняется по переднему фронту на входе xExecute. У вас на этом входе константа TRUE - так что вполне логично, что он выполняется только один раз.

1. я же их обнуляю в первом цикле в самом начале программы.
2. у меня ж должно быть три записи - во втором цикле у меня же массив из SysExecute, и каждый из его элементов должен выполниться как минимум по разу, разве нет?

Евгений Кислов
10.03.2025, 10:54
1. я же их обнуляю в первом цикле в самом начале программы.
2. у меня ж должно быть три записи - во втором цикле у меня же массив из SysExecute, и каждый из его элементов должен выполниться как минимум по разу, разве нет?

1. Это не так.
"Обнуление" - это


afbSe3[i](xExecute := FALSE);

2. Вы пытаетесь одновременно произвести несколько вызовов sqlite3. Я не знаю, в каком виде там это поддерживается.
Я бы рекомендовал ограничиться одним экземпляром SysExecute и вызывать его последовательно (запустили по xExecute - ждем xDone; после этого можно вызывать опять).

TaPX
10.03.2025, 11:48
1. Это не так.
"Обнуление" - это


afbSe3[i](xExecute := FALSE);

2. Вы пытаетесь одновременно произвести несколько вызовов sqlite3. Я не знаю, в каком виде там это поддерживается.
Я бы рекомендовал ограничиться одним экземпляром SysExecute и вызывать его последовательно (запустили по xExecute - ждем xDone; после этого можно вызывать опять).

82366
вот так вешает ПЛК почти наглухо ) Почему? Условие выхода из цикла есть же, должно выполняться вроде по логике.

Евгений Кислов
10.03.2025, 11:57
82366
вот так вешает ПЛК почти наглухо ) Почему? Условие выхода из цикла есть же, должно выполняться вроде по логике.

Потому что выполнение операции в блоке занимает несколько циклов ПЛК, а WHILE охватывает один цикл.
Я бы рекомендовал вам начать с простого кода (см. пример работы с СУБД (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_SqlFeatures_3517v1.projectarchive) и документацию на библиотеку CmpSysExec) и потом постепенно дорабатывать его.
Если останутся вопросы - давайте их обсудим в телеграм.

P.S. - в данном конкретном случае всё становится некорректным в момент помещения вызова блока в WHILE, но на будущее:
размещение в соседних строках вызова с xExecute := FALSE и xExecute := TRUE не имеет смысла - вы будете постоянно перезапускать блок, не давая ему нормально работать.

TaPX
10.03.2025, 13:23
Потому что выполнение операции в блоке занимает несколько циклов ПЛК, а WHILE охватывает один цикл.
Я бы рекомендовал вам начать с простого кода (см. пример работы с СУБД (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_SqlFeatures_3517v1.projectarchive) и документацию на библиотеку CmpSysExec) и потом постепенно дорабатывать его.
Если останутся вопросы - давайте их обсудим в телеграм.

P.S. - в данном конкретном случае всё становится некорректным в момент помещения вызова блока в WHILE, но на будущее:
размещение в соседних строках вызова с xExecute := FALSE и xExecute := TRUE не имеет смысла - вы будете постоянно перезапускать блок, не давая ему нормально работать.

так я и начинал с простого - писал сначала одну запись в бд. Теперь вот пробую массив, безуспешно. А как тогда фолсить вызов xExecute правильно?

TaPX
10.03.2025, 13:27
Потому что выполнение операции в блоке занимает несколько циклов ПЛК, а WHILE охватывает один цикл.
Я бы рекомендовал вам начать с простого кода (см. пример работы с СУБД (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_SqlFeatures_3517v1.projectarchive) и документацию на библиотеку CmpSysExec) и потом постепенно дорабатывать его.
Если останутся вопросы - давайте их обсудим в телеграм.

P.S. - в данном конкретном случае всё становится некорректным в момент помещения вызова блока в WHILE, но на будущее:
размещение в соседних строках вызова с xExecute := FALSE и xExecute := TRUE не имеет смысла - вы будете постоянно перезапускать блок, не давая ему нормально работать.

по поводу некорректного использования while - как тогда по-другому заставить программу ждать ответа от системы (xDone или xBusy) перед выполнением следующей итерации?

Евгений Кислов
10.03.2025, 13:30
так я и начинал с простого - писал сначала одну запись в бд. Теперь вот пробую массив, безуспешно. А как тогда фолсить вызов xExecute правильно?

Давайте продолжим в телеграм.

yurya
11.03.2025, 10:42
Добрый день.
Проект в CODESYS V3.5 17.3, device – CODESYS Control Win V3.
Подскажите, пожалуйста, почему не работает 2-й СОМ порт?
Все добавления устройств делал аналогично как для 1-го.

kondor3000
11.03.2025, 10:45
Добрый день.
Проект в CODESYS V3.5 17.3, device – CODESYS Control Win V3.
Подскажите, пожалуйста, почему не работает 2-й СОМ порт?
Все добавления устройств делал аналогично как для 1-го.

Если у вас виртуальный ПЛК, то для работы 2 порта надо поставить второй переходник и указать его номер СОМ порта.

yurya
11.03.2025, 10:47
Поясните, не понял. Виртуальный ПЛК работает только с 1-м COM портом?

kondor3000
11.03.2025, 13:16
Поясните, не понял. Виртуальный ПЛК работает только с 1-м COM портом?

1 переходник - 1 СОМ порт, 2 переходника - 2 СОМ порта

yurya
11.03.2025, 13:22
Поясните, пожалуйста, что такое переходник в контексте с виртуальным ПЛК.

МихаилГл
11.03.2025, 13:24
Поясните, не понял. Виртуальный ПЛК работает только с 1-м COM портом?

Физических (реальных и виртуальных) COM портов у вас сколько? Раз у вас нету второго, то что вы собираетесь опрашивать... (думаю вам об этом хотят сказать)

kondor3000
11.03.2025, 13:27
Поясните, пожалуйста, что такое переходник в контексте с виртуальным ПЛК.

Переходник USB-RS485, типа АС-4 (АС-3), для подключения живых модулей, панелей, ПЛК по сети RS485 (RS232) к виртуальному ПЛК.
https://owen.ru/catalog/communication_devices#preobrazovateli_interfejsov

yurya
11.03.2025, 13:50
Спасибо. Еще вопрос.
Проект создавался для загрузки в СПК110. Размер окон визуализации был выбран 800х480, как делали раньше. По факту новый СПК оказался с разрешением 1024х600.
Можно ли смасштабировать окна под новый размер?

kondor3000
11.03.2025, 13:53
Спасибо. Еще вопрос.
Проект создавался для загрузки в СПК110. Размер окон визуализации был выбран 800х480, как делали раньше. По факту новый СПК оказался с разрешением 1024х600.
Можно ли смасштабировать окна под новый размер?

Поставьте размер 1024х600 и растяните всё под новый экран.
Можно всё сгруппировать, растянуть и разгруппировать. После уже поправить ручками)

yurya
11.03.2025, 14:05
Получилось. Спасибо.

Frants
13.03.2025, 23:30
Доброе время суток всем!
Почему это не работает? В чём может быть причина, подскажите пожалуйста.
82432

Евгений Кислов
14.03.2025, 06:12
Добрый день.


В чём может быть причина

В VAR_TEMP, вероятно.
Если замените на VAR - то ситуация должна измениться.

Frants
14.03.2025, 07:34
Добрый день.



В VAR_TEMP, вероятно.
Если замените на VAR - то ситуация должна измениться.

Спасибо! Это я заметил. Однако интересует механика процесса. Переменной VAR_TEMP нельзя присвоить значение ?

Если посмотреть пример
[Техническая документация PLCopen. Руководство по кодированию. версия 1.0, официальный релиз ] стр. 85,
то там переменная index: INT; из VAR_TEMP как раз используется как параметр цикла.

Евгений Кислов
14.03.2025, 07:47
Спасибо! Это я заметил. Однако интересует механика процесса. Переменной VAR_TEMP нельзя присвоить значение ?

Можно. Но оно переинициализируется в конце цикла - в этом и суть VAR_TEMP - поэтому вы не увидите ничего интересного в онлайн-мониторинге.
Примерно по тем же причинам нельзя в мониторинге увидеть "текущие" значения локальных переменных функций - как и в случае VAR_TEMP, они размещаются в стеке.

Frants
14.03.2025, 08:18
Можно. Но оно переинициализируется в конце цикла - в это и суть VAR_TEMP - поэтому вы не увидите ничего интересного в онлайн-мониторинге.
Примерно по тем же причинам нельзя в мониторинге увидеть "текущие" значения локальных переменных функций - как и в случае VAR_TEMP, они размещаются в стеке.

То есть, отображение символов "???" происходит не потому что... некорректная операция или ошибка в коде,
а потому, что мониторинг выполняет отображение, когда функция закончила выполнение и переменные TEMP сброшены.

Frants
14.03.2025, 08:35
Такой вопрос.
Почему система допускает такую декларацию?
VAR_TEMP CONSTANT
TAG_1: INT;
END_VAR

В справке дано такое описание для CONST:

<scope> CONSTANT
<identifier> : <data type> := <initial value> ;
END_VAR

<scope> : VAR | VAR_INPUT | VAR_STAT | VAR_GLOBAL
<data type>: <elementary data type> | <user defined data type> | <function block>
<initial value> : <literal value> | <identifier> | <expression>

Т.е. VAR_TEMP CONST не допускается. Но написать и скомпилировать так можно, и загрузить ...

Евгений Кислов
14.03.2025, 08:42
То есть, отображение символов "???" происходит не потому что... некорректная операция или ошибка в коде,
а потому, что мониторинг выполняет отображение, когда функция закончила выполнение и переменные TEMP сброшены.

Да.


Такой вопрос.
Почему система допускает такую декларацию?
VAR_TEMP CONSTANT
TAG_1: INT;
END_VAR

В справке дано такое описание для CONST:

<scope> CONSTANT
<identifier> : <data type> := <initial value> ;
END_VAR

<scope> : VAR | VAR_INPUT | VAR_STAT | VAR_GLOBAL
<data type>: <elementary data type> | <user defined data type> | <function block>
<initial value> : <literal value> | <identifier> | <expression>

Т.е. VAR_TEMP CONST не допускается. Но написать и скомпилировать так можно, и загрузить ...

В документации написано, как надо делать.
Предусмотреть в компиляторе все возможные ситуации, в которых человек принципиально хочет выстрелить в себе в ногу, и проинформировать его предупреждением/ошибкой - довольно затруднительно.

Frants
14.03.2025, 09:10
Да.



В документации написано, как надо делать.
Предусмотреть в компиляторе все возможные ситуации, в которых человек принципиально хочет выстрелить в себе в ногу, и проинформировать его предупреждением/ошибкой - довольно затруднительно.

Ясно. Вопрос закрыт.
Однако, небольшая ремарка. Такое написать позволяет редактор в табличном представлении переменных интерфейса.
Т.е. просто по невнимательности можно на VAR_TEMP кликнуть CONSTANT и ОК. В общем, ладно. Это просто заметка.

gecha
14.03.2025, 12:45
СПК107 версия М01 2022 года выпуска, версия прошивки 2.4.0923.1000. При загрузке пустого проекта на этапе генерация кода... relocation pou зависает и выдает ошибку Неверный пакет результатов.
Проект загруженный ранее на СПК при этом доступен через веб-интерфейс.
Экран СПК черный, ничего не выводит.

В другой подобный СПК проект загружается без проблем.

Евгений Кислов
14.03.2025, 12:56
СПК107 версия М01 2022 года выпуска, версия прошивки 2.4.0923.1000. При загрузке пустого проекта на этапе генерация кода... relocation pou зависает и выдает ошибку Неверный пакет результатов.
Проект загруженный ранее на СПК при этом доступен через веб-интерфейс.
Экран СПК черный, ничего не выводит.

В другой подобный СПК проект загружается без проблем.

Добрый день.
Напишите, пожалуйста, на support@owen.ru
Подготовьте доступ по AnyDesk.

gecha
14.03.2025, 13:10
Проблему решили через сброс в веб-интерфейсе.

ВладОвен
17.03.2025, 16:43
Привет.
Подскажите как найти место ошибки в программе?
Я получаю ошибку:


------ Компиляция : Приложение: Device.Application -------
типизировать код...
генерировать код...
генерировать глобальные инициализации ...
генерировать код инициализации...
генерация перемещений...
[ERROR] proj15: C0032: Невозможно конвертировать тип 'REFERENCE TO STRING' в тип 'REFERENCE TO STRING(20)'
[ERROR] proj15: C0032: Невозможно конвертировать тип 'REFERENCE TO STRING' в тип 'REFERENCE TO STRING(20)'
[ERROR] proj15: C0032: Невозможно конвертировать тип 'REFERENCE TO STRING' в тип 'REFERENCE TO STRING(20)'
[ERROR] proj15: C0032: Невозможно конвертировать тип 'REFERENCE TO STRING' в тип 'REFERENCE TO STRING(20)'
Компиляция завершена -- 4 ошибок, 63 предупреждений : загрузка невозможна

И тут нет ссылки на место в коде.
Как быть?
Как найти место с ошибкой?

kondor3000
17.03.2025, 19:14
Привет.
Подскажите как найти место ошибки в программе?
Я получаю ошибку:
Как быть?
Как найти место с ошибкой?

У вас 4 ошибки, нажимайте на любую, покажет где ошибка в коде. Скорее всего типы переменных разные.

ВладОвен
18.03.2025, 09:22
У вас 4 ошибки, нажимайте на любую, покажет где ошибка в коде. Скорее всего типы переменных разные.

Да. Я это пониманию.
Но двойной клин не ведет никуда. Ничего не происходит.
Место в коде не указано.
CoDeSys перезагружал - не помогло.

См. рисунок:
82525

Евгений Кислов
18.03.2025, 09:29
Как найти место с ошибкой?

Традиционным способом:

82526

ВладОвен
18.03.2025, 09:35
[QUOTE=Евгений Кислов;459586]Традиционным способом:

Да. Видимо так и придется.
Но нет решения проще? Ведь в других случаях ИДЕ подсказывает место ошибки.

capzap
18.03.2025, 09:58
Да. Видимо так и придется.
Но нет решения проще? Ведь в других случаях ИДЕ подсказывает место ошибки.
Вы пользуетесь типом данных REFERENCE? Очевидно что дело в обрезанной строке, где то во внутренностях подключенных библиотек.
Компилятор не такой способный, чтоб попутно открыть библиотеку и указать в какой строчке кода библиотеки ошибка.

Sk007
18.03.2025, 10:19
Добрый день. Создал проект для контроллера ПЛК210 - компилируется без ошибок. Скопировал этот контроллер и вставил его как второй в проекте. Без внесения изменений в программу второго контроллера при его компиляции выскочили следующие предупреждения:
C0373: Обращение по записи к переменной 'modbusAOBuf'! Значение будет перезаписано, поскольку переменная соотнесена с входным каналом.
[WARNING] Более 100 предупреждений: все последующие сообщения проигнорированы
Программы первого и второго контроллера полностью идентичны, но на первом этих предупреждений нет, почему? Как решить проблему?

Cs-Cs
18.03.2025, 10:35
...потому что включен контроль множественной записи выходов.
А код, значит, в переменную modbusAOBuf пишет из разных мест. А это неправильно.

Sk007
18.03.2025, 10:45
А почему в первом контроллере нет предупреждений? Где проверить включение контроля записи?
Массив modbusAOBuf подвязан к регистрам временного хранения Modbus TCP Slave Device. В программе в него записываю данные. На первом контроллере все работает.

Cs-Cs
18.03.2025, 10:55
Скорее всего выключены. Они включаются в Установках проекта. У меня сейчас под рукой нет CodeSys, поэтмоу точно не скажу.
Ну вот в этом случае надо выключить это предупреждение.

Sk007
18.03.2025, 11:05
Скорее всего выключены. Они включаются в Установках проекта. У меня сейчас под рукой нет CodeSys, поэтмоу точно не скажу.
Ну вот в этом случае надо выключить это предупреждение.

Проверил, предупреждения С0373 в установках проекта включены. И эти установки, как я понял, действуют на все контроллеры в проекте. Непонятно, почему предупреждения возникают только на втором контроллере.

Cs-Cs
18.03.2025, 12:39
Вот тогда не знаю. Я их везде включаю и стараюсь делать так, чтобы под них не попадаться.

AllXXX
19.03.2025, 06:17
Здравствуйте
Можно ли написать универсальный функциональный блок?
Попытаюсь объяснить, что я имею ввиду
Есть несколько структур расширенные друг другом:

TYPE BlankDevice :
STRUCT
Name: WSTRING(30); // Название
byStatus: Status; // Статус узла
END_STRUCT
END_TYPE


TYPE SimpleDevice EXTENDS BlankDevice :
STRUCT
xOutRun: REFERENCE TO BOOL REF= xOutRun; // Ссылка на значение Пуск
END_STRUCT
END_TYPE


TYPE MediumDevice EXTENDS SimpleDevice :
STRUCT
xInRun: REFERENCE TO BOOL REF= xInRun; // Ссылка на значение В работе
END_STRUCT
END_TYPE


TYPE ComplexDevice EXTENDS MediumDevice:
STRUCT
xInAlarm: REFERENCE TO BOOL REF= xInAlarm; // Ссылка на значение Авария
END_STRUCT
END_TYPE


TYPE FrequencyDivice EXTENDS ComplexDevice :
STRUCT
xOutResetAlarm: REFERENCE TO BOOL REF= xOutResetAlarm; // Ссылка на значение Сброс аварии
uiOutSpeed: REFERENCE TO UINT REF= uiOutSpeed; // Ссылка на значение Скорость
rInCurrent: REFERENCE TO REAL REF= rInCurrent; // Ссылка на значение Ток
END_STRUCT
END_TYPE

Если я пишу функциональный блок для обработки структуры FrequencyDivice

FUNCTION_BLOCK FB_ FrequencyDivice
VAR_INPUT
stIn: REFERENCE TO FrequencyDivice;
END_VAR
В этот функциональный блок я не могу отправить структуру ну например MediumDevice, компилятор выдаст ошибку.
Подскажите можно ли как-то это реализовать с возможностью знать из функционального блока с какой структурой к нему обратились.
Что-то не очень хочется для каждой структуры писать свой функциональный блок.

Votrj1
19.03.2025, 10:01
Подскажите люди добрые. Известная проблема с трендами когда отключаешь питание на СПК и звезды встали не так потом вылетает ошибка "Some kind of disk I/O error occurred. Check disk space".
Поменять все тренды на ОВеновские пока не могу. А вот если при выключении питания вручную или по событию дать предварительно команду "poweroff" через системную библиотеку, то все файлы корректно закроются и ошибка уйдет? Или?

Евгений Кислов
19.03.2025, 10:04
А вот если при выключении питания вручную или по событию дать предварительно команду "poweroff" через системную библиотеку, то все файлы корректно закроются и ошибка уйдет? Или?

По крайней мере, это серьезно уменьшит вероятность её проявления.

Евгений Кислов
19.03.2025, 10:06
Подскажите можно ли как-то это реализовать с возможностью знать из функционального блока с какой структурой к нему обратились.



FUNCTION_BLOCK FB_FrequencyDevice
VAR_INPUT
pstIn: POINTER TO BYTE; // указатель на любую структуру
eDeviceType: DEVICE_TYPE; // Тип структуры: DEVICE_TYPE.BLANK, DEVICE_TYPE.MEDIUM, DEVICE_TYPE.COMPLEX и т. д.
END_VAR

AllXXX
19.03.2025, 11:05
Спасибо
Изучаю Data Type: ANY, ANY_<type>
Данный тип вроде также с указателями работает

Назаров Александр
19.03.2025, 16:11
Добрый день! ПЛК210 и модули ВВ. Во всех модулях Флаг ошибки - TRUE. Ну и в каждом канале аналогового вода ошибка 241. В чем проблема установки флага?

Евгений Кислов
19.03.2025, 18:15
Добрый день! ПЛК210 и модули ВВ. Во всех модулях Флаг ошибки - TRUE. Ну и в каждом канале аналогового вода ошибка 241. В чем проблема установки флага?

Добрый день.
В том, что вы установили плагин Modbus версии 4.4.0.0.
Совместно с шаблонами - используйте версию не выше 4.3.0.0.

Назаров Александр
19.03.2025, 19:50
Где найти Modbus 4.3.0.0? И стоит ли это делать? Может лучше отказаться от шаблонов?

Евгений Кислов
19.03.2025, 20:01
Где найти Modbus 4.3.0.0? И стоит ли это делать? Может лучше отказаться от шаблонов?

1., 2. Можно просто использовать версии компонентов Modbus из дистрибутива CODESYS (в окне обновления устройства установите галочку Показать все версии).
3. Как считаете нужным.

Sk007
24.03.2025, 10:19
Добрый день! А вообще допускается создание нескольких контроллеров ОВЕН в одном проекте CODESYS 3.5? У меня объект на контроллерах ПЛК210 (всего более 10 шт.), решил для удобства делать все в одном проекте, создал программу для первого контроллера - компиляция без ошибок, затем его скопировал и вставил в этом же проекте - сразу откомпилировал, появилось странное предупреждение "C0373: Обращение по записи к переменной...". Ладно, думаю, не страшно. Так сделал 4 контроллера, затем вернулся к первому, просто добавил через шаблон модуль МУ110 и все - при компиляции множество ошибок типа: "MU110_8R_K: Адрес %QW766 уже используется." В сохраненном проекте с одним контроллером любые модули добавляются без проблем.

Евгений Кислов
24.03.2025, 10:40
Добрый день.


А вообще допускается создание нескольких контроллеров ОВЕН в одном проекте CODESYS 3.5?

Допускается.


У меня объект на контроллерах ПЛК210 (всего более 10 шт.), решил для удобства делать все в одном проекте, создал программу для первого контроллера - компиляция без ошибок, затем его скопировал и вставил в этом же проекте - сразу откомпилировал, появилось странное предупреждение "C0373: Обращение по записи к переменной...".

Чтобы разобраться в вашей конкретной ситуации - напишите, пожалуйста, на support@owen.ru или мне в телеграм (см. в подписи).

Назаров Александр
25.03.2025, 13:39
Добрый день. Подскажите почему в текстовых файлах два столбца ru/RU?

Евгений Кислов
25.03.2025, 13:41
Добрый день. Подскажите почему в текстовых файлах два столбца ru/RU?

Добрый день.
Потому что их кто-то создал (эти столбцы никогда не создаются автоматически).

artem287
26.03.2025, 22:45
Добрый вечер. Пытаюсь подключить датчик давления ПД200-ДИ с выходным сигналом RS-485. Подключил к соответствующим выходам плк, но значение не снимает. На датчике самом все есть, и давление и тд, а в codesys нет. В чем может быть проблема?

Cs-Cs
26.03.2025, 23:32
artem287 Варианты (что надо проверить и нам показать):
* Правильность соединения A-A, B-B для RS-485
* Настройки связи (скорость, чётность, число стоп-бит)
* Настройки адреса для связи

artem287
26.03.2025, 23:51
Вот настройка из руководства по эксплуатации (фото1), все остальное мои настройки. Подключение выхода датчика RS-485(А) подключен к входу плк RS-485(А1), выход В соответственно к входу В1

Cs-Cs
27.03.2025, 00:08
Так у тебя вон адрес слейва = 1, а в инструкции = 2.

artem287
27.03.2025, 21:58
Спасибо увидел, т.е. адрес датчика это адрес слейва, а для com порта что указывать не подскажете?

kondor3000
27.03.2025, 22:14
Спасибо увидел, т.е. адрес датчика это адрес слейва, а для com порта что указывать не подскажете?

Если это живой ПЛК, смотрите Инфо по нему, там указаны номера всех портов. 82749
Если виртуальный ПЛК, то указываете номер СОМ порта переходника USB-RS485

artem287
27.03.2025, 22:34
Спасибо, настроил. Буду пробовать

artem287
31.03.2025, 10:36
Добрый день. Все параметры настроил как надо, а он так и не хочет подключаться. Что еще стоит проверить?

kondor3000
31.03.2025, 16:01
Добрый день. Все параметры настроил как надо, а он так и не хочет подключаться. Что еще стоит проверить?

Выложите все скрины в слейве и таблицу регистров PD200 и его настройки

artem287
31.03.2025, 23:00
Вот все настройки.
Добавить фото больше не могу, выдает ошибку. Но настройки можно найти через 6 сообщений выше.
Так же он еще выводит сообщение "Шина не запущенна. Данные значения, возможно, не актуальны". Проблема на форуме где-то уже описывалась, ее решение мне не помогло.

МихаилГл
01.04.2025, 06:51
Попробуйте без шаблона считать регистры.
Что у него там за 1 бит в шаблоне?

kondor3000
01.04.2025, 08:12
По всем скринам у вас всё правильно. Проблема может быть только номере СОМ порта (ошиблись) или физическом подключении датчика (не так подключили).

МихаилГл
01.04.2025, 08:16
С февраля 2024 эти датчики с новыми потрохами и ПО. Старый шаблон тупо может не работать.

artem287
01.04.2025, 13:26
Попробуйте без шаблона считать регистры.
Что у него там за 1 бит в шаблоне?
1 бит это стоп-бит указанный из параметров настройки самого датчика, просто из рэ берется стандартный.
А как без шаблона считать не подскажете?

kondor3000
01.04.2025, 14:14
1 бит это стоп-бит указанный из параметров настройки самого датчика, просто из рэ берется стандартный.
А как без шаблона считать не подскажете?

Ставите адреса из таблицы руководства по новому датчику. И пробуете их читать.

Назаров Александр
02.04.2025, 08:48
Доброе утро! Как избавиться от предупреждений про OwenCloudTask? Возможно ли отключить данный компонент?

Тимур Назарбоев
02.04.2025, 08:59
Доброе утро! Как избавиться от предупреждений про OwenCloudTask? Возможно ли отключить данный компонент?

Добрый день, если вы не пользуетесь этим, то можете просто удалить.82833

Назаров Александр
02.04.2025, 09:10
Добрый день, если вы не пользуетесь этим, то можете просто удалить.82833
Почему то просто не получается..

kondor3000
02.04.2025, 09:17
Почему то просто не получается..

Вам пишут про Задачу OwenCloudTask, а вы пытаетесь удалить модуль OwenCloud.
Программа как раз ругается что нет задачи OwenCloudTask

Sergey361
02.04.2025, 09:17
Исключить из компиляции

Назаров Александр
02.04.2025, 09:42
Вам пишут про Задачу OwenCloudTask, а вы пытаетесь удалить модуль OwenCloud.
Программа как раз ругается что нет задачи OwenCloudTask

Так я понимаю, что задачи нет. Так она мне и не нужна как и сам OwenCloud. Или ответ должен выглядить как: Удалять задачу OwenCloudTask нельзя, т.к. появятся предупреждения об ее отсутствии, хотя возможность удалить ее присутствует. Каждый выбирает сам как с этим жить. Удаление из компиляции OwenCloud не помогает.

Sergey361
02.04.2025, 09:52
Если не нужна задача, исключите из компиляции

Killreal212
03.04.2025, 09:54
Подскажите пожалуйста, в codesys в визуализации очень мало функционала. В частности нет разнообразных функций ввода. Везде вижу разные события ввода у других, то что они могут записывать переменные на определенное значение, а у меня только нажатие и переключение, на любом объекте. Как-либо вводить текст через hmi тоже не могу. Пробовал поскачивать проекты с сайта codesys, везде ерроры либо вообще не запускается. Видел там даже анимированные игры делали в проектах, а у себя не вижу никаких возможностей сделать какую-либо анимацию или движение. Версия 3.5.17, таргет файлы овен есть, визуализация 4.1. 82848

kondor3000
03.04.2025, 10:13
Подскажите пожалуйста, в codesys в визуализации очень мало функционала. В частности нет разнообразных функций ввода. Везде вижу разные события ввода у других, то что они могут записывать переменные на определенное значение, а у меня только нажатие и переключение, на любом объекте. Как-либо вводить текст через hmi тоже не могу. Пробовал поскачивать проекты с сайта codesys, везде ерроры либо вообще не запускается. Видел там даже анимированные игры делали в проектах, а у себя не вижу никаких возможностей сделать какую-либо анимацию или движение. Версия 3.5.17, таргет файлы овен есть, визуализация 4.1. 82848

Ставите прямоугольник на Визу, в выводе текста ставите %s (%d, %3.1 f ), привязываете переменную STRING (WORD, REAL) к выводу текста,
ввод можно сделать с KEY PAD (буквы) или NUM (цифры ) и вводите текст или числа в визуализации, которые и будут текстом или числом в данной переменной.

По ошибкам, очень часто не правильно ставят Codesys 17.3, все установки пакетов только через INSTALER, в отличите от 14.3 и 16.3. Все пакеты и биб-ки сразу установите.
Проверяйте возможность создания проектов с разными ПЛК и на разных языках,
если язык только один, не правильно установлен Codesys 17.3
После загрузки проекта обновите всё и далее смотрите на ошибки, чего не хватает. Возьмите один пример и разберитесь до конца с ним. Скрины с ошибками выкладывайте.
Например 40 ошибок Screen https://owen.ru/forum/showthread.php?t=28167&page=12&p=373718&viewfull=1#post373718

Евгений Кислов
03.04.2025, 10:19
Подскажите пожалуйста, в codesys в визуализации очень мало функционала. В частности нет разнообразных функций ввода. Везде вижу разные события ввода у других, то что они могут записывать переменные на определенное значение, а у меня только нажатие и переключение, на любом объекте. Как-либо вводить текст через hmi тоже не могу. Пробовал поскачивать проекты с сайта codesys, везде ерроры либо вообще не запускается. Видел там даже анимированные игры делали в проектах, а у себя не вижу никаких возможностей сделать какую-либо анимацию или движение. Версия 3.5.17, таргет файлы овен есть, визуализация 4.1. 82848

В настройках элемента в верхнем правом углу поставьте галочку Дополнительно.

ilyamehedko
07.04.2025, 14:11
Здравствуйте! Вопрос следующего характера! Можно ли в элементе визуализации "Таблица" делать так, чтобы количество строк становилось больше или меньше в зависимости от переменной. К примеру задали цифру 3, кол-во строк стало равно 3-ём, потом задали 10, кол-во строк стало 10. Нужна динамическая таблица, можно ли её как-то реализовать?

Евгений Кислов
07.04.2025, 15:20
Здравствуйте! Вопрос следующего характера! Можно ли в элементе визуализации "Таблица" делать так, чтобы количество строк становилось больше или меньше в зависимости от переменной. К примеру задали цифру 3, кол-во строк стало равно 3-ём, потом задали 10, кол-во строк стало 10. Нужна динамическая таблица, можно ли её как-то реализовать?

Добрый день.
В настройках таблицы есть параметр Макс. индекс массива. К нему можно привязать переменную типа INT.
Значение параметра определяет число строк (число элементов привязанного массива), которые будут отображаться в таблице.

skozirev@yandex.ru
08.04.2025, 10:17
Добрый день.
Есть PLC210-14, к нему по Modbus TCP подключена панель СП310(панель - мастер). Возникла проблема с WEB визуализацией - на ней не могу менять переменные, которые так же привязаны на панели. Убираю привязку к панели - все меняется....
Подскажите как выйти из этой ситуации.


82959
82960

Евгений Кислов
08.04.2025, 10:19
Добрый день.
Есть PLC210-14, к нему по Modbus TCP подключена панель СП310(панель - мастер). Возникла проблема с WEB визуализацией - на ней не могу менять переменные, которые так же привязаны на панели. Убираю привязку к панели - все меняется....
Подскажите как выйти из этой ситуации.


82959
82960


Добрый день.
Напишите, пожалуйста, мне в телеграм (см. в подписи) или на support@owen.ru
Подготовьте доступ по AnyDesk.

GoodLuck
08.04.2025, 11:04
Добрый день!

Подскажите, пожалуйста,где почитать, как из кода программы поменять настройки порта eth4 на ПЛК210.

Евгений Кислов
08.04.2025, 11:09
Добрый день!

Подскажите, пожалуйста,где почитать, как из кода программы поменять настройки порта eth4 на ПЛК210.

Добрый день.
https://owen.ru/forum/showthread.php?t=28167&p=336649&viewfull=1#post336649

GoodLuck
08.04.2025, 12:33
Добрый день.
https://owen.ru/forum/showthread.php?t=28167&p=336649&viewfull=1#post336649

А можно из кода поменять для eth4 протокол со Статический адрес на DHCP-клиент?

Евгений Кислов
08.04.2025, 12:39
А можно из кода поменять для eth4 протокол со Статический адрес на DHCP-клиент?

Можно, по аналогии с примером. Параметр network.wan.proto, значение 'dhcp'

ВладОвен
09.04.2025, 13:32
Здравствуйте.
Подскажите по такому вопросу.
В процессе работы внезапно останавливается программа и ПЛК зависает. ИДЕ теряет связь.
Помогает перезагрузка всего железа.
В ИДЕ вижу, что остановились задачи. См. рисунок.

82972

Если ли методика определить точку останова (или, например, последнее сообщение)?

Cs-Cs
09.04.2025, 13:52
1. А что в журнале ПЛК в это время?
2. Насколько нагружены задачи, особенно та, которая в 3мс?

Евгений Кислов
09.04.2025, 13:53
Здравствуйте.
Подскажите по такому вопросу.
В процессе работы внезапно останавливается программа и ПЛК зависает. ИДЕ теряет связь.
Помогает перезагрузка всего железа.
В ИДЕ вижу, что остановились задачи. См. рисунок.

82972

Если ли методика определить точку останова (или, например, последнее сообщение)?

Добрый день. Методика может быть разной в зависимостей от специфики проекта.
Чтобы начать предметно разбираться в вашей ситуации - отправьте, пожалуйста, письмо на support@owen.ru

CFC-ST
09.04.2025, 15:09
Добрый день! Подскажите - как написать программу вывода текущего времени в визуалиции. При отсутствии контроллера. С виртуальными переменными более менее понятно. А вот с текущем временем не разберусь. ( например вкл/выкл насоса - выводим время включения и останова)

Евгений Кислов
09.04.2025, 15:14
Добрый день! Подскажите - как написать программу вывода текущего времени в визуалиции. При отсутствии контроллера. С виртуальными переменными более менее понятно. А вот с текущем временем не разберусь. ( например вкл/выкл насоса - выводим время включения и останова)

Добрый день.
Можно использовать функцию SysTimeRtcGet из библиотеки SysTimeRtс для получения системного времени в формате DT.
Она будет работать в т. ч. и на виртуальном контроллере.


dtVar:= TO_DT(SysTimeRtc.SysTimeRtcGet(dwErrorCode) ); // получаем системное время в виде значения типа DT

Эту переменную можно будет привязать к элементу визуализации - например, прямоугольнику - задав для него подходящий формат вывода в параметры Тексты/Тест (например, %t[dd.MM.yyyy HH:mm:ss].

ВладОвен
09.04.2025, 17:00
Вроде разобрался.
Там была в коде функция MSU.StrConcatA


sDataTEMP := ...;

MSU.StrConcatA(ADR(sDataTEMP), ADR(sDataSend), dwLenSend);

Если один из строковых аргументов ничему не равен (''), то она будет слаживать до последнего байта в памяти... https://statics.teams.cdn.office.net/evergreen-assets/personal-expressions/v2/assets/emoticons/smile/default/30_f.png?v=v82
sDataTEMP был равен ''.

Вставил костыль:


sDataTEMP := ...;

IF sDataTEMP = '' THEN
sDataTEMP := '?';
END_IF

MSU.StrConcatA(ADR(sDataTEMP), ADR(sDataSend), dwLenSend);

Эта ошибка приводила к зависанию ПЛК. Если тупо через SSH сделать reboot, то железка перезагрузится и можно пробовать работать снова.
Если же через ИДЕ пробовать подключиться, то потом все равно зависает и слетает приложение в ПЛК. Приходилось потом загружать приложение повторно. Хорошо хоть, что retain.ret не пропадал. Я тупо восстанавливал разом все кастомные настройки.

8297682977

Cs-Cs
09.04.2025, 18:40
ВладОвен А проверь пожалуйста на либе StringUtils? Я там StrConcatW использую, и такого бага не было - я нормально пустые строки передавал.

CFC-ST
09.04.2025, 20:45
Добрый день.
Можно использовать функцию SysTimeRtcGet из библиотеки SysTimeRtс для получения системного времени в формате DT.
Она будет работать в т. ч. и на виртуальном контроллере.


dtVar:= TO_DT(SysTimeRtc.SysTimeRtcGet(dwErrorCode) ); // получаем системное время в виде значения типа DT

Эту переменную можно будет привязать к элементу визуализации - например, прямоугольнику - задав для него подходящий формат вывода в параметры Тексты/Тест (например, %t[dd.MM.yyyy HH:mm:ss].

что-то не получается. Просьба: подскажите, как поправить программу.82980

kondor3000
09.04.2025, 21:18
что-то не получается. Просьба: подскажите, как поправить программу.

Добавить биб-ку SysTimeRtс в Менеджере биб-к 82982

В конце строки надо добавить +T#3h 82985 плюс 3 часа для Москвы

Евгений Кислов
10.04.2025, 06:38
что-то не получается. Просьба: подскажите, как поправить программу.82980

Вынес ответ в онлайн-FAQ:
https://owen.ru/forum/showthread.php?t=28167&p=461341&viewfull=1#post461341

artem287
13.04.2025, 20:14
Добрый вечер. У меня есть элемент управление вращением, который отвечает за увеличение\уменьшение переменной. Когда в процессе меняю значение, он отображает например 0,59999999 вместо 0,6. Или когда хочешь сделать зн на 0 при понижении (шаг 0,02), он отображает 0,01977777 и получается что на 0 не вывести. Как сделать так чтоб он работал с цифрами округляя до сотых?

МихаилГл
13.04.2025, 20:31
Пишу по памяти:
To_real(To_int(x*100)) /100

artem287
13.04.2025, 21:29
Пишу по памяти:
To_real(To_int(x*100)) /100
Спасибо, суть уловил. Придется так для каждого значения отдельно пересчитывать значение.
Но вот нашел решение немного проще, в числовой формат каждого элемента нужно вписать следующее "%.2f".

Николай Суриков
13.04.2025, 21:54
Спасибо, суть уловил. Придется так для каждого значения отдельно пересчитывать значение.
Но вот нашел решение немного проще, в числовой формат каждого элемента нужно вписать следующее "%.2f".

OSCAT_BASIC.ROUND(x,2)

МихаилГл
14.04.2025, 03:28
Спасибо, суть уловил. Придется так для каждого значения отдельно пересчитывать значение.
Но вот нашел решение немного проще, в числовой формат каждого элемента нужно вписать следующее "%.2f".

Это да, можно и так, если вы не собираетесь эти значения больше нигде не использовать, кроме визуализации. Мне нужно было это в json вставлять, а там я так от этого уходил, "отрезал" лишнее) Может и проще способы есть.

TaPX
23.04.2025, 10:15
Добрый день.
1. А можно запаролить одну кнопку в визуализации? Ну чтобы случайно её нельзя было нажать?
2. Опять визуализация: можно ли как-то ее настроить так, чтобы на телефоне можно было жестами растягивания менять масштаб? Пока вообще не получается так сделать

Евгений Кислов
23.04.2025, 10:30
Добрый день.
1. А можно запаролить одну кнопку в визуализации? Ну чтобы случайно её нельзя было нажать?
2. Опять визуализация: можно ли как-то ее настроить так, чтобы на телефоне можно было жестами растягивания менять масштаб? Пока вообще не получается так сделать

Добрый день.
1. Как именно это должно выглядеть с точки зрения оператора?
2. https://owen.ru/forum/showthread.php?t=28167&p=415362&viewfull=1#post415362

TaPX
23.04.2025, 11:13
Добрый день.
1. Как именно это должно выглядеть с точки зрения оператора,


Ну есть экран визуализации. Есть на нем кнопки. Все кнопки после нажатия что-то выполняют. Но одна кнопка или должна пароль запрашивать для выполнения действия по ней, или, я не знаю, что-то типа таблички "вы уверены?" должно выскакивать, чтобы исключить случайное нажатие. Чтобы исключить какие-то случайные нажатия

ВладОвен
23.04.2025, 11:44
Привет.
Подскажите о такому вопросу.

Я создал структуру с предустановленными данными. Для примера возьмём переменную wsAction в этой структуре:


...
wsAction : WSTRING := "-"; // Последнее действие с данным изделием
...

Эта структура задекларирована в программе main(PRG).
И действительно. При загрузке программы в ПЛК (подключение онлайн, но программа в режима сброса) я вижу это предустановленное значение (см.рисунок):

83359

Все вроде норм. С переменными это работает.
Но почему это правило не работает со вложенной подструктурой?

Вот далее там же вложенная подструктура:


...
stZeroRing : structZeroRing; // Параметры "Zero-Ring"
...

Внутри у этой подструктуры есть (среди прочего) переменная с предустановленными данными:


...
rDeviationLevelMIN : REAL := 999.999; // Уровень девиации
...

При загрузке программы в ПЛК (подключение онлайн, но программа в режима сброса) я НЕ вижу этого предустановленного значения в подструктуре (см.рисунок):

83361

ЧЯДНТ?