PDA

Просмотр полной версии : язык ST, библиотечные функции



Евгений Пашигоров
05.02.2026, 08:32
Не получилось в языке ST использовать библиотечную функцию SPLIT_DT_LOCAL.
Где можно найти документацию? Каков тип входной переменной, каков - выходной?
И все-таки, это функция или функциональный блок?
Пробовал и так, и эдак. все время ошибки типов и неправильный вызов функции.

pavel.migdalev
05.02.2026, 09:28
Не получилось в языке ST использовать библиотечную функцию SPLIT_DT_LOCAL.
Где можно найти документацию? Каков тип входной переменной, каков - выходной?
И все-таки, это функция или функциональный блок?
Пробовал и так, и эдак. все время ошибки типов и неправильный вызов функции.

https://support.mps-soft.ru/Help-web/index.html?split_dt_local.html

Евгений Пашигоров
05.02.2026, 09:55
https://support.mps-soft.ru/Help-web/index.html?split_dt_local.htmlНе работает. Мне нужно ST.
Покажете пример работающего кода?

pavel.migdalev
05.02.2026, 10:06
Не работает. Мне нужно ST.
Покажете пример работающего кода?

SPLIT_DT(IN:=Время, HOUR =>Параметр_1, MONTH=>Параметр_2);

kondor3000
05.02.2026, 10:11
Не работает. Мне нужно ST.
Покажете пример работающего кода?

Пример на ST есть для функции SPLIT_DT

Q:=SPLIT_DT(IN:=Время, HOUR =>Параметр_1, MONTH=>Параметр_2);

Евгений Пашигоров
05.02.2026, 10:32
Что-то стало получаться.
Откуда вы взяли это сокровенное знание, что выходные параметры присваиваются стрелочкой?
Синтаксис не соответствует стандартному ST?
Приходится еще угадывать, где функция, а где функциональный блок.
SPLIT_DT - это функция? Не похоже, вызывается как ФБ. Но ведь экземпляр ФБ не объявлен?

kondor3000
05.02.2026, 10:35
Что-то стало получаться.
Откуда вы взяли это сокровенное знание, что выходные параметры присваиваются стрелочкой?
Синтаксис не соответствует стандартному ST?
Приходится еще угадывать, где функция, а где функциональный блок.
SPLIT_DT - это функция? Не похоже, вызывается как ФБ. Но ведь экземпляр ФБ не объявлен?
Пример по ссылке
Здесь всё не совсем так, судя по синтаксису-это ФБ и программу на ST всё равно надо вставить на поле FBD, где указать входы и выходы.

Евгений Пашигоров
05.02.2026, 10:43
Ну, по ссылке у меня открывается пример на fbd, а не st.
Значит, сокровенные знания, впитываете из астрала? У меня не получается.
И не ФБ это, поскольку для ФБ надо объявлять экземпляр ФБ. А у функции только одно выходное значение.
А для входных и выходных переменных в редакторе ST справа и слева есть вкладки.

Евгений Кислов
05.02.2026, 10:51
Откуда вы взяли это сокровенное знание, что выходные параметры присваиваются стрелочкой?
Синтаксис не соответствует стандартному ST?


А у функции только одно выходное значение.

В стандарте МЭК 61131-3 декларируется другое.

87890

Евгений Пашигоров
05.02.2026, 11:23
Как всё запущено... Это выходит, Кодесис не соответствует стандарту. Сколько уже программирую, и не знаю.

А у комитета, писавшего этот стандарт, явно сишность головного мозга. Функции с побочными эффектами. Бее-е... У нормальных людей для этого есть процедуры.

Евгений Кислов
05.02.2026, 11:26
Это выходит, Кодесис не соответствует стандарту.

В CODESYS V3.5 функции с "дополнительными выходами" поддержаны.


Функции с побочными эффектами. Бее-е..

Не очень понятно, причем здесь "побочные эффекты (https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B1%D0%BE%D1%87%D0%BD%D1%8B%D0%B9_% D1%8D%D1%84%D1%84%D0%B5%D0%BA%D1%82_(%D0%BF%D1%80% D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0 %BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5))".

pavel.migdalev
05.02.2026, 11:26
Откуда вы взяли это сокровенное знание, что выходные параметры присваиваются стрелочкой?


Внимательнее читайте хелп, в том числе и на другие (соседние) функции.



Приходится еще угадывать, где функция, а где функциональный блок.


Внимательнее читайте хелп, там все четко написано.



SPLIT_DT - это функция?

Функция. В хелпе так написано.

Евгений Пашигоров
06.02.2026, 08:17
Не очень понятно, причем здесь "побочные эффекты (https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B1%D0%BE%D1%87%D0%BD%D1%8B%D0%B9_% D1%8D%D1%84%D1%84%D0%B5%D0%BA%D1%82_(%D0%BF%D1%80% D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0 %BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5))".Согласен. В данном конкретном случае это не так ярко выражено. Но все равно, термин функция к данному программному элементу подходит как корове седло. Эта "функция" принимает на вход дату-время, а возвращает логическое значение. Зачем оно нам? Нам надо совсем другое. А чтобы получить нужные данные, необходимо влезть в потроха этой функции.
Сломана логика, сломан синтаксис. Остается только надеяться, что где-то внутри ее не сохраняется какое-нибудь "состояние".

Евгений Пашигоров
06.02.2026, 08:19
Внимательнее читайте хелп, в том числе и на другие (соседние) функции.

Тоже что-то с логикой. Чтобы узнать, как вызвать нужную мне функцию, надо прочитать всю документацию от корки до корки. :(

Сергей0308
08.02.2026, 22:29
Здесь с вами согласен, в смысле, что прочитать "всю документацию" от корки до корки может быть недостаточно!
Всё от человека зависит, кому-то можно и не читать!

Евгений Пашигоров
16.04.2026, 15:59
Не работает функция SPLIT_DT. Делаю так:


var
lyear: udint;
lmonth: udint;
lday: udint;
lhour: udint;
lmin: udint;
(* lsec: udint;
*) q: bool;


end_var

dtime := GET_TIME();
q := SPLIT_DT(in := dtime,
YEAR => lyear,
MONTH => lmonth,
DAY => lday,
HOUR => lhour,
MIN => lmin,
SEC => lsec
);

Переменная dtime показывает текущую дату-время, а все переменные lsec, lmin, ... всегда равны нулю. Почему?

kondor3000
16.04.2026, 16:22
Не работает функция SPLIT_DT. Делаю так:
Переменная dtime показывает текущую дату-время, а все переменные lsec, lmin, ... всегда равны нулю. Почему?

Во первых GET_TIME(); это функция времени, а не даты и времени, нужна функция get_date_time();
Во вторых откуда вы взяли эту функцию SPLIT_DT, где код?
И в третьих это вызов ФБ.

ЗЫ; Написал про Лоджик, а тут оказывается МС4D

Евгений Пашигоров
16.04.2026, 16:33
Во первых GET_TIME(); это функция времени, а не даты и времени, нужна функция get_date_time();
Во вторых откуда вы взяли эту функцию SPLIT_DT, где код?
И в третьих это вызов ФБ.
Справка:

GET_TIME - выдает дату и время в том формате, который является
стандартным для места исполнения функции:
Выходы Q DATE_AND_TIME Дата и время. Результат. Q:=GET_TIME()

SPLIT_DT служит для разделение значения DT на отдельные составляющие.
Пример в ST
Q:=SPLIT_DT(IN:=Время, HOUR =>Параметр_1, MONTH=>Параметр_2);
Это библиотечные функции.

kondor3000
16.04.2026, 16:38
Справка:

Это библиотечные функции.

Написал про Лоджик, а тут оказывается МС4D,
Я же отвечал вам уже, это вы 1,5 месяца разобраться не могли ?
Попробовал, на ST не хочет работать, почему не понятно, зато на FBD работает без проблем 88855

Евгений Пашигоров
17.04.2026, 08:16
Попробовал, на ST не хочет работать, почему не понятно88855
Значит, и у вас ответа нет.

kondor3000
17.04.2026, 08:52
Значит, и у вас ответа нет.

Чтобы разобраться писать надо в тех поддержку, у меня например прекрасно работает ФБ на ST извлечение даты и времени из DT, перенесённый с Лоджика,
с небольшими правками. И кстати в скаде используется дата и время с 1970 года, даже в ОЛ уже с 2000 года.

kondor3000
17.04.2026, 21:02
Значит, и у вас ответа нет.

Функция оказалась чувствительна к раскладке, заменил in на IN и всё заработало 88862

А самый прикол, что все выходы можно написать маленькими буквами, а вход только заглавными, даже In не прокатит,
и ещё первая скобка должна быть в одной строке с именем функции, иначе имя функции не выделяется,
это прям фича или баг)))

Евгений Пашигоров
20.04.2026, 08:17
и ещё первая скобка должна быть в одной строке с именем функции, иначе имя функции не выделяется,
это прям фича или баг)))
Кроме того, надо убрать из строки вызова функции все пробелы(!).
Это уже баг. st к пробелам не чувствителен. Буду писать в техподдержку.
Благодарю за содействие.