PDA

Просмотр полной версии : ST функции OWEN Logic



Денисов Максим Сергеевич
21.12.2022, 10:52
Уважаемые коллеги!

Уже больше года как функции на ST появились в OWEN Logic и многие из вас активно применяют новый функционал в своих проектах, впрочем, как и наши разработчики алгоритмов в различных готовых решениях.
Мы хотим поделиться с вами некоторыми ST функциями, которые сделают разработку ваших проектов проще и быстрее.

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

Какие ST функции хотели бы еще увидеть?
Также делитесь своими ST функциями с нашим сообществом.



fClock_Week (Недельный таймер (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fClockWeek.txt))
fDT_to_UT (Время в секундах в формате UNIX (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fDT_to_UT.txt))
fUT_to_wDay (Определение дня недели из UNIX-времени (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fUT_to_wDay.txt))
Example_Clock_Week (Пример использования функций (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/Example_Clock_Week.owle))





fP1000 (Датчик термосопротивления PT1000 (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fPt1000.txt))
fNTC (Датчик термосопротивления NTC (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fNTC.txt))
fSensorErr (Определение неисправности датчика термосопротивления (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fSensorErr.txt))
fSens420_Err (Определение неисправности датчика 4..20мА (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fSens420_Err.txt))
fPol_4 (Вычисление полинома 4-ой степени (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fPol_4.txt))
fLb (Вычисление двоичного логарифма (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fLb.txt))
fLn (Вычисление натурального логарифма (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fLn.txt))
Example_TempSensor (Пример использования функций (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/Example_TempSensor.owle))
fLimitIR (Ограничение диапазона со сбросом, тип INT (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fLimitIR.txt))
fLimitRR (Ограничение диапазона со сбросом, тип FLOAT (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fLimitIR.txt))
Example_fLimit (Пример использования функций Limit (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/Example_fLimit.owle))
fMinI (Возвращает min из двух значений, тип INT (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fMinI.txt))
fMaxI (Возвращает max из двух значений, тип INT (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fMaxI.txt))
fMinR (Возвращает min из двух значений, тип FLOAT (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fMinR.txt))
fMaxR (Возвращает max из двух значений, тип FLOAT (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fMaxR.txt))
Example_fMax_fMin (Пример использования функций Limit (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/Example_fMax_fMin.owle))
fMaxI_fMinI ( Возвращает max или min значение из любого множества (пузырьковая сортировка), тип INT (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fMaxI_MinI.txt))

i.go
21.12.2022, 11:14
Хотелось бы видеть формулы НСХ датчиков Cu, Pt, N. Регуляторы (2поз, ПИ-, ПИД, ПД-) тоже пригодятся.

EFrol
21.12.2022, 12:15
ФБ на ST когда ждать ?

Если это сделать, стандартные библиотеки будут не нужны. Лично я буду весь проект писать на ST.

IVM
21.12.2022, 12:55
Если это сделать, стандартные библиотеки будут не нужны. Лично я буду весь проект писать на ST.

Будешь такое писать, ФБ на ST никогда не появится.;)

Эдуард_Н
21.12.2022, 13:35
Уважаемые коллеги!

Уже больше года как функции на ST появились в OWEN Logic и многие из вас активно применяют новый функционал в своих проектах, впрочем, как и наши разработчики алгоритмов в различных готовых решениях.
Мы хотим поделиться с вами некоторыми ST функциями, которые сделают разработку ваших проектов проще и быстрее.

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

Какие ST функции хотели бы еще увидеть?
Также делитесь своими ST функциями с нашим сообществом.



fClock_Week (Недельный таймер (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fClockWeek.txt))
fDT_to_UT (Время в секундах в формате UNIX (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fDT_to_UT.txt))
fUT_to_wDay (Определение дня недели из UNIX-времени (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/fUT_to_wDay.txt))
Example_Clock_Week (Пример использования функций (http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/STFunctions/Example_Clock_Week.owle))



а пример "Example_Clock_Week (Пример использования функций)" в эмуляции будет работать?

Денисов Максим Сергеевич
21.12.2022, 13:57
Весной 2023, уже в работе

Денисов Максим Сергеевич
21.12.2022, 13:58
Да, можно включить симуляцию проекта, но не внутри отдельной функции

Эдуард_Н
21.12.2022, 14:03
Да, можно включить симуляцию проекта, но не внутри отдельной функции

но он не включает выход в текущее время.
константу изменил на 22 с 12. и не включает.

kondor3000
21.12.2022, 14:38
но он не включает выход в текущее время.
константу изменил на 22 с 12. и не включает.

Всё работает, время смотрим внутреннее в ПР, дни недели назначаем числом в регистре, день недели соответствует включённому биту64723
для Пон- включён бит 1 (число 2), Вт- бит 2 (число 4), Ср- бит 3 (число 8) и т.д.
Все дни 255
Чтобы показывал day_of_week поставьте энергонезависимость.

Эдуард_Н
21.12.2022, 15:53
Спасибо, понял. Так работает. Хотя наверное можно было сделать просто: 1 Пн, 2 Вт, 3 Ср и т.д.

EFrol
22.12.2022, 08:11
ФБ на ST когда ждать ?

Кстати, несложные ФБ можно мутить на ST - выход с задержкой на цикл подавать на вход (имитируя статическую переменную).
Это, конечно, жуткий изврат - приходится имплантировать в результат значение этих переменных, а на входе потом отделять.
Но никто ведь не говорил, что будет легко.

i.go
22.12.2022, 18:08
Кстати, было бы хоро иметь возможность скачать не только кусок программы, но и проект целиком. Например, 1-8 каналов управления насосами с резервированием и/или выравниванием наработки. Многим начинающим это сильно бы помогло.

Денисов Максим Сергеевич
28.12.2022, 08:49
Хотелось бы видеть формулы НСХ датчиков Cu, Pt, N. Регуляторы (2поз, ПИ-, ПИД, ПД-) тоже пригодятся.

Пополнили список новыми функциями для аналоговых преобразований: преобразования для датчиков температуры PT1000, NTC, определение неисправности датчика...

Валенок
28.12.2022, 11:02
...
Здорово конечно. Рыба жареная, рыба пареная. А можно удочку поудобней ?
Вопрос 2.
Когда ST-функции внутри макросов можно будет юзать ?

Dimensy
28.12.2022, 12:06
Пополнили список новыми функциями для аналоговых преобразований: преобразования для датчиков температуры PT1000, NTC, определение неисправности датчика...

Исправьте что ли

64899

И что-то вы тут намудрили

64900

Эдуард_Н
28.12.2022, 12:34
Пополнили список новыми функциями для аналоговых преобразований: преобразования для датчиков температуры PT1000, NTC, определение неисправности датчика...

"fSens420_Err" Думаете он будет удобен?

Денисов Максим Сергеевич
29.12.2022, 20:51
"fSens420_Err" Думаете он будет удобен?

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

Dimensy
30.12.2022, 05:50
Делюсь тем, что сами применяем. В первую очередь жду обратной связи от вас и других пользователей, чтобы пополнять перечень функций, которые будут удобны и полезны. Поэтому, если есть предложения и замечания, смело делитесь ими

Почему макрос fP1000 до сих пор не починили? Так всего-то надо в формуле плюсик на минус поменять

Денисов Максим Сергеевич
30.12.2022, 06:40
Спасибо, что заметили ошибку. Исправили

Эдуард_Н
30.12.2022, 09:01
Делюсь тем, что сами применяем. В первую очередь жду обратной связи от вас и других пользователей, чтобы пополнять перечень функций, которые будут удобны и полезны. Поэтому, если есть предложения и замечания, смело делитесь ими

Если у меня товый вход настроен -50 нижний 4мА, +50 верхний 20мА и как при таком этот блок "fSens420_Err" будет отслеживать ошибку?64960

kondor3000
30.12.2022, 09:17
Если у меня товый вход настроен -50 нижний 4мА, +50 верхний 20мА и как при таком этот блок "fSens420_Err" будет отслеживать ошибку?64960

Это математика 4-6 класса.
Вот что в макросе, fSens420_Err:= (I<3.6) or (I>20.4) ;
осталось посчитать для 3,6 и 20,4.
Неужели вы сами не в состоянии ?

Эдуард_Н
30.12.2022, 09:53
Это математика 4-6 класса.
Вот что в макросе, fSens420_Err:= (I<3.6) or (I>20.4) ;
осталось посчитать для 3,6 и 20,4.
Неужели вы сами не в состоянии ?

Просто вы не так меня поняли.

Денисов Максим Сергеевич
09.01.2023, 10:29
Я понял ваш вопрос, макрос актуален для ПР200. Например для ПР102 есть аварийные значения, который вход выдает сам, посмотрите РЭ на прибор, там указаны числовые аварийные значения, по ним вы можете выставить флаг аварии

Денисов Максим Сергеевич
17.01.2023, 09:49
Коллеги, в разделе аналоговые преобразования добавили новые ST функции: определение максимального и минимального из двух значений, ограничение диапазона со сбросом на значение по умолчанию.

Dimensy
17.01.2023, 15:52
Коллеги, в разделе аналоговые преобразования добавили новые ST функции: определение максимального и минимального из двух значений, ограничение диапазона со сбросом на значение по умолчанию.

Вопрос: нафига делать функции макс и мин из двух значений на ST если есть системная функция сравнения?

petera
17.01.2023, 15:55
Вопрос: нафига делать функции макс и мин из двух значений на ST если есть системная функция сравнения?

Это разные вещи.
На выходе функции - значение(число) мин или макс из двух.
На выходе сравнения - булева переменная да/нет

Charli18
02.02.2023, 14:15
Функцию на сравнение большего или меньшего значения из 4-10 переменных? на входе несколько переменный типа int, на выходе булевая переменная
на которой максимальное значение или минимальное ???

Денисов Максим Сергеевич
06.02.2023, 10:16
Коллеги, в разделе аналоговые преобразования добавили новую ST функцию: Определение max или min значения из любого множества (пузырьковая сортировка).

kipun
07.02.2023, 15:06
Приветствую! Очень интересует работа с матрицами, от восьмибитных до 32-х битных. Одна из самых прожорливых по ресурсам тем! Если их оптимизировать в ST, неплохой прирост по скорости получился бы

Денисов Максим Сергеевич
07.02.2023, 16:45
Для решения какой задачи необходимо применять матрицы?

Asu$Nick
08.02.2023, 22:34
Добрый день! Мне очень необходимы блоки Move и арифметические операции со входом Enable, чтобы можно было отрабатывать по условию или фронту. Вы как раз выпустили ST, я сделал в нем свои блоки , но затык оказался в FBD. Там нельзя по ходу программы многократно переписывать переменную. В результате элементарную условие не реализовать. Подскажите зачем это сделали, перезапись переменной не противоречит правилам программирования и в ST есть, а в FBD заблокировали.:(
Это прямо вяжет по рукам и ногам, снижает гибкость языка. На картинке простой код который не реализовать.

PS. Сам Лоджик у вас крутой в целом , еще чуть чуть и можно серых немецких потеснить.

65785

melky
08.02.2023, 22:47
Asu$Nick в вашем случае это один SEL.
При необходимости по условиям можно еще использовать макросы ППЗУ

kondor3000
08.02.2023, 23:55
Добрый день! Мне очень необходимы блоки Move и арифметические операции со входом Enable, чтобы можно было отрабатывать по условию или фронту. Вы как раз выпустили ST, я сделал в нем свои блоки , но затык оказался в FBD. Там нельзя по ходу программы многократно переписывать переменную. В результате элементарную условие не реализовать. Подскажите зачем это сделали, перезапись переменной не противоречит правилам программирования и в ST есть, а в FBD заблокировали.:(
Это прямо вяжет по рукам и ногам, снижает гибкость языка. На картинке простой код который не реализовать.

PS. Сам Лоджик у вас крутой в целом , еще чуть чуть и можно серых немецких потеснить.



Нет никакого затыка в FBD, всё делается и присваивается проще некуда, смотри скрин 65786 Move не нужен, когда есть Sel и fSel.

А на ST это делается так

function func1: udint; //имя функции и тип данных выхода
var_input //объявление входных переменных
s : bool;
x1 : udint; //входная переменная
x2 : udint;
end_var
if s then
func1 :=x1 ;
else
func1 :=x2 ;
end_if
end_function

Валенок
09.02.2023, 00:27
Нет никакого затыка в FBD, всё делается и присваивается проще некуда, смотри скрин
...Move не нужен, когда есть Sel и fSel....А на ST это делается так...
Вот вообще не равно.

Тут нет EN/ENO. Более общий случай:

if s then
func1 := какая-то_функция(...)
else
func1 := другая_функция(...)
end_if
Надесь ясно что ни разу не SEL ?

melky
09.02.2023, 09:01
Валенок

вместо "какая-то функция" подставьте "результат какой-то функции" и получите то же самое.
Единственный минус - трата времени, так как обе функции будут выполняться ПРкой.

kondor3000
09.02.2023, 09:46
Вот вообще не равно.

Тут нет EN/ENO. Более общий случай:

Надесь ясно что ни разу не SEL ?

Чем ваш код отличается от скрина? Да ничем. 65795
А по поводу траты времени, что так 2 функции выполнять, что так. Про экраны речь не идёт.

melky
09.02.2023, 09:58
kondor3000 почему не про ПР ? добавляете экран и у вас время цикла может перевалить через 15 мс легко, экран начинает мигать из-за увеличения программы.
Если бы ветвить можно было непосредственно функции, это бы сократило время цикла, так как ненужный код в данную точку времени не выполняется.

Валенок
09.02.2023, 14:06
Чем ваш код отличается от скрина?..
Я ж не зря сказал про EN/ENO которого нет.
if это поток выполнения команд, sel - это функция выбора.


А по поводу траты времени, что так 2 функции выполнять, что так..
В таких квадратиках - да. В ST - нет.


.. Да ничем...
Пока "хэловорлд" - да, сойдет.

--
PS
Вот про это же


Если бы ветвить можно было непосредственно функции, это бы сократило время цикла, так как ненужный код в данную точку времени не выполняется.


А вот тута не

...вместо "какая-то функция" подставьте "результат какой-то функции" и получите то же самое.
Единственный минус - трата времени, так как обе функции будут выполняться ПРкой.
Про минус сами же познее ответили. А на счет "то же самое" )) вот когда будет ФБ на ST, тогда и можно будет функцию рассматривать как классическую. А пока не.

Asu$Nick
09.02.2023, 22:58
Вот сделал пример, это кодесисный FBD.
Какой получается программа, когда есть входы Enable и можно переменные переписывать.
Программирование становится другим, сделать можно намного больше и читается легче.
Пример 1. Здесь к одному входу могут подключаться два разных датчика в разное время, по фронту происходит подсчет дистанции по разным законам.
Пример 2. Подсчет длины в плюс и минус.

На лоджике получится уложится с селекторами? В каждом примере на ветку ушло по 3 элемента ( треугольник фронта тоже считаем)
6581965820

melky
09.02.2023, 23:04
Asu$Nick можно, но код внешне будет геморройнее...

Asu$Nick
09.02.2023, 23:31
Asu$Nick можно, но код внешне будет геморройнее...

Да вот я и заходил с разных сторон, все время нужно быть затейником , чтобы эти мелкие ограничения обойти.
В данном случае всего лишь надо разблокировать обычную возможность писать переменную многократно.
Остальное ST поможет.
Мне кажется ресурсов программы будет тратится намного меньше да и времени.
У меня ПР103 был куплен, на тот момент в нем не было ST , так я даже вот эти Плюс 2 Минус 2 к счетчику из примера не смог сделать. Встроенные счетчики прибавляют по +1, произвольное число уже не задашь.

melky
10.02.2023, 08:42
Asu$Nick
Встроенные счетчики прибавляют по +1, произвольное число уже не задашь.
а делать умножение на свой шаг после штатного счетчика не пробовали? :)

1exan
10.02.2023, 08:42
Вот сделал пример, это кодесисный FBD.
Какой получается программа, когда есть входы Enable и можно переменные переписывать.
Программирование становится другим, сделать можно намного больше и читается легче.
Пример 1. Здесь к одному входу могут подключаться два разных датчика в разное время, по фронту происходит подсчет дистанции по разным законам.
Пример 2. Подсчет длины в плюс и минус.

На лоджике получится уложится с селекторами? В каждом примере на ветку ушло по 3 элемента ( треугольник фронта тоже считаем)
6581965820

Вариант для примера 1
65822

Для примера 2 принцип такой-же.

На ST, даже в его текущем виде, проблем реализации не видно

lagutin
10.02.2023, 12:41
Функции же можно в условия добавлять. Если я правильно понимаю, это и есть ветвление...
Вот такой код прекрасно работает и по идее выполняется только одна ветвь???


function fSel: udint; //имя функции и тип данных выхода
var_input //объявление входных переменных
IN1, IN2 : udint; //входная переменная с типом данных bool
sel:bool;
end_var
var //объявление локальных переменных
localVariable : real := 13.3; //локальная переменная с типом данных real и начальным значением 13.3
end_var
if sel then
fSel:= function1(IN1);
else
fSel:= function2(IN2);
end_if
end_function
65829

kondor3000
10.02.2023, 14:19
Функции же можно в условия добавлять. Если я правильно понимаю, это и есть ветвление...
Вот такой код прекрасно работает и по идее выполняется только одна ветвь???

Да должна выполняться только 1 функция внутри. Но это не точно)))
Кстати кроме SEL, есть ещё макросы в Менеджере которые выбирают значение которое менялось последним, есть для целочисленных и флоат, SelChgI SelChgF

capzap
10.02.2023, 14:20
Да выполняется только 1 функция внутри.

это протестировано на реальном устройстве или логические рассуждения?

kondor3000
10.02.2023, 14:46
это протестировано на реальном устройстве или логические рассуждения?

Пока только логические, проверять не на чем.

lagutin
10.02.2023, 14:58
Да должна выполняться только 1 функция внутри. Но это не точно)))
..... Ну как не точно?:confused: Выполняется код функции, которая внутри условия. Другая же ветвь не выполняется? Что там еще тестировать то? Все работает. Ну если только и правда в железе не заработает?

kondor3000
10.02.2023, 15:17
Ну как не точно?:confused: Выполняется код функции, которая внутри условия. Другая же ветвь не выполняется? Что там еще тестировать то? Все работает. Ну если только и правда в железе не заработает?

Разговор не про работоспособность кода, а про увеличение длительности цикла программы, в зависимости от того, обе функции выполняются внутри функции или только одна по условию.

lagutin
10.02.2023, 15:31
А как это проверить то? Но как она может выполняться, если код в else, к примеру, не выполняется, если первое условие выполнилось? Это у же слишком сильные заморочки и подозрительность:)

Валенок
10.02.2023, 22:20
проверить просто, написать одинаковый "тяжелый" код в обеих ветках условия ..
Сложно как-то.
Это же, но по бразильской системе.

function jopa: bool;
var_input
in : bool;
end_var

while in do
; //максимально тяжелый код
end_while
jopa := not in; //инверсия для показать проход функции
end_function


function func: bool;
var_input
in : bool;
end_var

if in then
func := jopa(true);
else
func := jopa(false);
end_if
end_function
func на холст и прилепить вход и выход
Кто докажет ОБА вызова jop'ы при func(false) ?

wwowa
11.02.2023, 06:59
Попробовал...
1.При запуске эмуляции все нормально.
2.При подаче на вход - бесконечный цикл.
Что говорит о том, что вроде как выполняется одна функция????
Но это не точно:o
Я заменил "тяжелый код"


// while in do
// ; //максимально тяжелый код
// end_while
for i := 0 to 1000000 do
;
end_for

И вот, бесконечный цикл уже на этапе запуска симуляции и она уже не запускается. Это проверка симулятора или как то осуществляется пробег по всем функциям? Хотя лоджик интерпретатор и выполняет код построчно? Не, ну их домыслы, факты на скринах.658396584065841

Валенок
12.02.2023, 19:22
Глубины мысли с for'ом не понял. Продолжаем лепить про исполнение всех веток if ?

capzap
03.03.2023, 15:24
после прочтения статьи про алгоритмы быстрого умножения написал вариант, проверил, все работает

kondor3000
24.03.2023, 22:18
Уважаемые коллеги!

Уже больше года как функции на ST появились в OWEN Logic и многие из вас активно применяют новый функционал в своих проектах, впрочем, как и наши разработчики алгоритмов в различных готовых решениях.
Мы хотим поделиться с вами некоторыми ST функциями, которые сделают разработку ваших проектов проще и быстрее.


Нашёл ошибку в функции, Преобразование Даты и Времени в формат UnixTime, в первом посте. Нашёл случайно, работая с преобразованием времени.
В массиве с 0 по 12, должно быть 13 чисел, а у вас только 12, с января по ноябрь есть , а Декабрь потеряли, нет последнего числа 31. 66730

Dimensy
25.03.2023, 17:15
Нашёл ошибку в функции, Преобразование Даты и Времени в формат UnixTime, в первом посте. Нашёл случайно, работая с преобразованием времени.
В массиве с 0 по 12, должно быть 13 чисел, а у вас только 12, с января по ноябрь есть , а Декабрь потеряли, нет последнего числа 31. 66730

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

kondor3000
25.03.2023, 18:01
Судя по коду 12 месяц и не нужен, тогда и массив надо сделать с 0 до 11.

petera
25.03.2023, 19:03
Массив нужен для нахождения количества дней с начала года до текущего дня. Поэтому в декабре нам нужен только день месяца, к которому мы прибавляем количество дней в предыдущих месяцах
Если в массиве задать для месяцев сразу количество дней от начала года до начала месяца (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334), то код можно было упростить - выбросить цикл
for i:= 0 to (month -1)
days:= days + DayInMonth[i]
end_for

что-то типа этого
days:= DayInMonth[month] + BOOL_TO_UDINT(month>2 and is_leap);

Pvalp
30.03.2023, 15:32
Вот еще попробовал создать функцию fBOOL_INT на ST - аналог макроса BOOL_INT
Можно конечно еще причесать через FOR...


function fBOOL_INT: udint; //имя функции и тип данных выхода
var_input //объявление входных переменных
IN01 : bool; //входная переменная с типом данных bool
IN02 : bool; //входная переменная с типом данных bool
IN03 : bool; //входная переменная с типом данных bool
IN04 : bool; //входная переменная с типом данных bool
IN05 : bool; //входная переменная с типом данных bool
IN06 : bool; //входная переменная с типом данных bool
IN07 : bool; //входная переменная с типом данных bool
IN08 : bool; //входная переменная с типом данных bool
end_var

var //объявление локальных переменных
sel1 : udint; //локальная переменная с типом данных udint
sel2 : udint; //локальная переменная с типом данных udint
sel3 : udint; //локальная переменная с типом данных udint
sel4 : udint; //локальная переменная с типом данных udint
sel5 : udint; //локальная переменная с типом данных udint
sel6 : udint; //локальная переменная с типом данных udint
sel7 : udint; //локальная переменная с типом данных udint
sel8 : udint; //локальная переменная с типом данных udint
end_var

if IN01 then sel1 :=1; else sel1 :=0; end_if

if IN02 then sel2 :=2; else sel2 :=0; end_if

if IN03 then sel3 :=4; else sel3 :=0; end_if

if IN04 then sel4 :=8; else sel4 :=0; end_if

if IN05 then sel5 :=16; else sel5 :=0; end_if

if IN06 then sel6 :=32; else sel6 :=0; end_if

if IN07 then sel7 :=64; else sel7 :=0; end_if

if IN08 then sel8 :=128; else sel8 :=0; end_if

fBOOL_INT := sel1+sel2+sel3+sel4+sel5+sel6+sel7+sel8;

end_function

petera
30.03.2023, 15:56
Вот еще попробовал создать функцию fBOOL_INT на ST - аналог макроса BOOL_INT
Можно конечно еще причесать через FOR...


function fBOOL_INT: udint; //имя функции и тип данных выхода
var_input //объявление входных переменных
IN01 : bool; //входная переменная с типом данных bool
IN02 : bool; //входная переменная с типом данных bool
IN03 : bool; //входная переменная с типом данных bool
IN04 : bool; //входная переменная с типом данных bool
IN05 : bool; //входная переменная с типом данных bool
IN06 : bool; //входная переменная с типом данных bool
IN07 : bool; //входная переменная с типом данных bool
IN08 : bool; //входная переменная с типом данных bool
end_var

var //объявление локальных переменных
sel1 : udint; //локальная переменная с типом данных udint
sel2 : udint; //локальная переменная с типом данных udint
sel3 : udint; //локальная переменная с типом данных udint
sel4 : udint; //локальная переменная с типом данных udint
sel5 : udint; //локальная переменная с типом данных udint
sel6 : udint; //локальная переменная с типом данных udint
sel7 : udint; //локальная переменная с типом данных udint
sel8 : udint; //локальная переменная с типом данных udint
end_var

if IN01 then sel1 :=1; else sel1 :=0; end_if

if IN02 then sel2 :=2; else sel2 :=0; end_if

if IN03 then sel3 :=4; else sel3 :=0; end_if

if IN04 then sel4 :=8; else sel4 :=0; end_if

if IN05 then sel5 :=16; else sel5 :=0; end_if

if IN06 then sel6 :=32; else sel6 :=0; end_if

if IN07 then sel7 :=64; else sel7 :=0; end_if

if IN08 then sel8 :=128; else sel8 :=0; end_if

fBOOL_INT := sel1+sel2+sel3+sel4+sel5+sel6+sel7+sel8;

end_function


Это делается так

function BYTE_OF_BIT: udint; //
// (c) PeterA для ворума ОВЕН
var_input //объявление входных переменных
B0:BOOL;
B1:BOOL;
B2:BOOL;
B3:BOOL;
B4:BOOL;
B5:BOOL;
B6:BOOL;
B7:BOOL;
end_var

BYTE_OF_BIT:= SHL(SHL(SHL(SHL(SHL(SHL(SHL(bool_to_udint(B7),1) + bool_to_udint(B6),1)
+ bool_to_udint(B5),1) + bool_to_udint(B4),1) + bool_to_udint(B3),1)
+ bool_to_udint(B2),1) + bool_to_udint(B1),1) + bool_to_udint(B0);
end_function

1exan
30.03.2023, 16:09
Это делается так

function BYTE_OF_BIT: udint; //
// (c) PeterA для ворума ОВЕН
var_input //объявление входных переменных
B0:BOOL;
B1:BOOL;
B2:BOOL;
B3:BOOL;
B4:BOOL;
B5:BOOL;
B6:BOOL;
B7:BOOL;
end_var

BYTE_OF_BIT:= SHL(SHL(SHL(SHL(SHL(SHL(SHL(bool_to_udint(B7),1) + bool_to_udint(B6),1)
+ bool_to_udint(B5),1) + bool_to_udint(B4),1) + bool_to_udint(B3),1)
+ bool_to_udint(B2),1) + bool_to_udint(B1),1) + bool_to_udint(B0);
end_function

Вариант:


...


BYTE_OF_BIT. 0 := B0 ;
BYTE_OF_BIT. 1 := B1 ;
BYTE_OF_BIT. 2 := B2 ;
BYTE_OF_BIT. 3 := B3 ;
BYTE_OF_BIT. 4 := B4 ;
BYTE_OF_BIT. 5 := B5 ;
BYTE_OF_BIT. 6 := B6 ;
BYTE_OF_BIT. 7 := B7 ;

end_function

kondor3000
30.03.2023, 16:28
Ну вы заморочились)) Зачем вообще тут преобразования ?

function B8_M: udint; ;//имя функции и тип данных выхода
var_input //объявление входных переменных
b0,b1,b2,b3,b4,b5,b6,b7: bool; //входная переменная с типом данных bool
end_var

B8_M.0:=b0; B8_M.1:=b1; B8_M.2:=b2; B8_M.3:=b3; B8_M.4:=b4; B8_M.5:=b5; B8_M.6:=b6; B8_M.7:=b7;

end_function

1exan
30.03.2023, 16:35
Ну вы заморочились)) Зачем вообще тут IF и преобразования ?

function B8_M: udint; ;//имя функции и тип данных выхода
var_input //объявление входных переменных
b0,b1,b2,b3,b4,b5,b6,b7: bool; //входная переменная с типом данных bool
end_var
var //объявление локальных переменных
end_var

B8_M.0 :=b0; B8_M.1 :=b1; B8_M.2 :=b2; B8_M.3 :=b3; B8_M.4 :=b4; B8_M.5 :=b5; B8_M.6 :=b6; B8_M.7 :=b7;

end_function

Да это не преобразование, я там в названии функции ошибся

Михаил Троицкий
04.04.2023, 15:40
Кто знает, как в OwenLogik на ST выглядит экспонента?
Например:
Ev:=Eo * exp((a * Tv)/(b + Tv)); - на такую запись ругается

petera
04.04.2023, 16:01
Кто знает, как в OwenLogik на ST выглядит экспонента?
Например:
Ev:=Eo * exp((a * Tv)/(b + Tv)); - на такую запись ругается

Наверно только так
67018

gmz_001
06.04.2023, 14:51
по моему exp(x)= ex
е=2.718... число Эйлера

Newcomer
03.11.2023, 09:34
Добрый день

Как понимать такое сообщение компилятора ? FB объявлен. Вчера было все нормально при создании FB, а сегодня выскакивает эта ошибка.

kondor3000
03.11.2023, 09:44
Добрый день

Как понимать такое сообщение компилятора ? FB объявлен. Вчера было все нормально при создании FB, а сегодня выскакивает эта ошибка.

Надо проект выкладывать, очень похоже, что ошибка не в этом блоке, такое бывает, если ошибка в одном месте, а показывает в в обоих блоках.
Только почему вы спрашиваете про ФБ, в теме для функций.

Newcomer
03.11.2023, 09:50
Надо проект выкладывать, очень похоже, что ошибка не в этом блоке, такое бывает, если ошибка в одном месте, а показывает в в обоих блоках.
Только почему вы спрашиваете про ФБ, в теме для функций.

Разобрался. Удалил из библиотеки FB все FB и все стало нормально при создании FB.

Newcomer
03.11.2023, 10:20
Что в режиме эмуляция означает Период и Время цикла ?

petera
03.11.2023, 10:31
Что в режиме эмуляция означает Период и Время цикла ?

Время цикла - время цикла выполнения программы виртуальной ПР, в реальной ПР значительно меньше, например 7мс
100мс хорошо для симуляции работы всяких TON, TOF, BLINK...

kondor3000
03.11.2023, 10:39
Что в режиме эмуляция означает Период и Время цикла ?

Если период стоит 100 мс, то секунды идут слишком медленно, ставлю обычно 50 мс, тогда нормально.

AlexCrane
20.11.2023, 10:58
Почему в функции на вход udint нельзя подать значение больше 2147483647?



function f_test: bool; //имя функции и тип данных выхода
var_input //объявление входных переменных
x : udint;
end_var

if x.31 then
f_test := true;
else
f_test := false;
end_if;

end_function

1exan
20.11.2023, 11:14
наверное по этому https://ru.wikipedia.org/wiki/2_147_483_647_(%D1%87%D0%B8%D1%81%D0%BB%D0%BE)

Вот только udint подразумевает беззнаковое целое

Dimensy
20.11.2023, 12:09
я же не написал безусловно, я высказался предположительно, ST относительно молодой язык в ОЛ, возможно с него начали готовить знаковые целые или банально забыли о типе данных, всё тоже самое как и со step-ом, поправят когда нибудь или ОЛ или документацию

это глюк, потому что арифметические операции нормально выполняются, аварию вызывает обращение к биту через точку

capzap
20.11.2023, 12:46
это глюк, потому что арифметические операции нормально выполняются, аварию вызывает обращение к биту через точку

Арифметические операции и вход в функцию разные вещи, обычно можно не досмотреть за какой нибудь одной проверкой а не за всем кодом

Денисов Максим Сергеевич
20.11.2023, 14:03
Почему в функции на вход udint нельзя подать значение больше 2147483647?



function f_test: bool; //имя функции и тип данных выхода
var_input //объявление входных переменных
x : udint;
end_var

if x.31 then
f_test := true;
else
f_test := false;
end_if;

end_function


Какая ошибка выдается?

kondor3000
20.11.2023, 14:44
Какая ошибка выдается?

Вот ошибка при попытке ввести число 2147483648 71723

Та же самая ошибка включения 31 бита, которую уже 1 раз пофиксили. 71725


function_block fB1 //имя функционального блока.
var_input //объявление входных переменных
b29, b30,b31 :bool;
end_var
var_output //объявление выходных переменных
x : udint;
end_var

x.29 := b29; x.30 := b30; x.31:= b31;
end_function_block

И в функции и в ФБ ошибка одинаковая, упаковка, распаковка 31 бита.

AlexCrane
20.11.2023, 15:15
Да, ошибка в 31 бите...

Валодик
04.01.2024, 16:52
Посдкажите, где можно почитать про функции, встроенные в язык ST, которые можно использовать при создании ST функций и функциональных блоков? (напр. delay() )

kondor3000
04.01.2024, 17:51
Посдкажите, где можно почитать про функции, встроенные в язык ST, которые можно использовать при создании ST функций и функциональных блоков? (напр. delay() )

Вложенных функций очень мало, основные MOD, ABS, POW, про них есть в справке по F1 в ОЛ. Почти все функции и ФБ придётся писать самому
или смотреть примеры на форуме.
Тут некоторые функции
https://owen.ru/forum/showthread.php?t=37203

Примеры ФБ и функций в программах:

Новый таймер TON_P c ET и паузой, на ST, Версия 2.6.345.0____https://owen.ru/forum/showthread.php?t=38239&page=42#420
Новые таймеры TOF и TOF_P с выходом ET и паузой, на ST, Версия 2.6.345.0_____ https://owen.ru/forum/showthread.php?t=26216&page=358#3577
Каскад_4 бойлера_ Пример программы на ST в среде Codesys 2.3 и в Лоджике_____ https://owen.ru/forum/showthread.php?t=38453&page=10#93
Простой шаговый автомат_____ https://owen.ru/forum/showthread.php?t=38239&page=29#285
Простой шаговый автомат, новый TON с паузой_____ https://owen.ru/forum/showthread.php?t=38239&page=43#424
Прогр. управление 6 нагрузками 6 реж. 12 шагов _ФБ_фунции_____https://owen.ru/forum/showthread.php?t=38239&page=11#105
4 котла_Нараб_Ротация по времени_____ https://owen.ru/forum/showthread.php?t=38920&page=2#13
Каскадное управл. 8 котлами_____ https://owen.ru/forum/showthread.php?t=38608&p=420341#post420341
Управл. 12 насосами_12 аварий_ET_Включение по Уровню_____ https://owen.ru/forum/showthread.php?t=38891#6
Функции FLOAT_TO_INT и INT_TO_FLOAT на ST https://owen.ru/forum/showthread.php?t=22915&page=311&p=429821#post429821
Пример инициализации сетевых переменных https://owen.ru/forum/showthread.php?t=37840&page=54&p=431676#post431676
Кто первый встал, того и тапки на ST https://owen.ru/forum/showthread.php?t=26216&page=345&p=431504#post431504

Конвертация времени BCD формата панелей, HEX в DEC и обратно DEC в HEX https://owen.ru/forum/showthread.php?t=38239&page=20#200
Логарифмы _log(x) Изменяемое основание и функция
Логарифмы Натур_ln(x)_Десятичн_lg(x) Универсальный_log(x)_Двоичный_lb(x)_____ https://owen.ru/forum/showthread.php?t=9398&page=752#7515
Исправленные варианты сборки REAL из двух WORD https://owen.ru/forum/showthread.php?t=37203&page=10#95

askaev
12.02.2024, 15:47
Почему так сильно урезали ST в OwenLogic по сравнению с CodeSys 2.3? Как быть с десятичным логарифмом (LOG X)? Очень нужен.

kondor3000
12.02.2024, 15:58
Почему так сильно урезали ST в OwenLogic по сравнению с CodeSys 2.3? Как быть с десятичным логарифмом (LOG X)? Очень нужен.

Ну вы даете, прямо над вами в предыдущем сообщении, последняя ссылка на Логарифмы любого формата. Универсальный логарифм с изменяемым основанием и изменяемой функцией. Если функция А не нужна, замените её на X в теле функции.

А вообще в Лоджике, ST сильно урезан и только недавно появился, ждёмс )))

askaev
12.02.2024, 16:04
Ну вы даете, прямо над вами в предыдущем сообщении, последняя ссылка на Логарифмы любого формата. Универсальный логарифм с изменяемым основанием и изменяемой функцией.

:rolleyes: Задумался и пропустил как-то. Спасибо! Отправляюсь изучать и применять.

ПавелП
18.02.2024, 22:40
Привет всем.

В документации Язык программирования ST (https://docs.owen.ru/product/programmnoe_obespechenie_owen_logic/986/83454#topic-83454) описька небольшая

IF Time_1 :=T#0ms THEN

Как я понимаю, структура ST в OL повторяет CodeSYS на 100%?
Те реализации работы со временем аналогичны.


VAR
Time_1 : TIME:=T#0ms;
Time_2 : TIME:=T#0ms;
Q : BOOL:=FALSE;
END_VAR

IF Time_1 :=T#0ms THEN
Time_1 :=GET_TIME();
END_IF

Time_2 :=GET_TIME();

IF (Time_2 - Time_1) >=T#1000ms THEN
Q :=NOT Q;
Time_1 :=T#0ms;
Time_2 :=T#0ms;
END_IF


// добавляйте, пожалуйста, комментарии по алгоритму,
// желательно в каждую строку

73687

Избыточной информации в документации не бывает.

ПавелП
20.02.2024, 21:21
Продолжаю работать с документацией. :)

Очередная описька:

73722

Королев Кирилл
21.02.2024, 10:32
Продолжаю работать с документацией. :)

Очередная описька:

73722

Вложение не открывается. Продублируйте, пожалуйста

ПавелП
21.02.2024, 10:53
Вложение не открывается. Продублируйте, пожалуйста

У меня открывается.

Вот ещё:

73743

ПавелП
17.03.2024, 19:09
У меня открывается.

Вот ещё:

73743

Так никто ничего и не исправил.
А почему с 21.02.2024? А потому! (https://owen.ru/forum/showthread.php?t=39243&p=432355&viewfull=1#post432355) :)

Gans
22.03.2024, 07:57
Всем добрый день.
Пытался объявить массив таймеров вот так "arrTon: array [1..3] of SYS.TON;". Оказалось так не работает(
Возник вопрос: как объявить массив таймеров, тригеров и тд.?
Такое возможно в OWEN Logic?

kondor3000
22.03.2024, 08:08
Всем добрый день.
Пытался объявить массив таймеров вот так "arrTon: array [1..3] of SYS.TON;". Оказалось так не работает(
Возник вопрос: как объявить массив таймеров, тригеров и тд.?
Такое возможно в OWEN Logic?

Массив TON в ОЛ объявить не получится, не работает. Делайте с отдельными TON.

kondor3000
23.03.2024, 23:06
Для тех, кто хочет поломать голову в свободное время, на днях столкнулся со сборкой REAL из 2 WORD в этой теме https://owen.ru/forum/showthread.php?t=39248&page=4#39
Открыл что было быстрее, в ОЛ программу сборки от capzap ( когда то он её выложил в одной из тем), программу проверял в нескольких пределах, всё работало правильно.
Ввёл числа 52429 и 16268 и получил 0.1 74640 Потом проверил в другой программе Codesys 2.3 , получил 1.1 74641
Позже оказалось что Функция arrWToReal, врёт только на пределе от 1.0 до 1.99999 и от -1.0 до -1.99999, на остальных пределах считает правильно.
Вопрос, где ошибка в коде функции arrWToReal ?

Выложил вариант в Лоджике и в Codesys 2.3, кому как удобнее.
В Codesys 2.3, для сравнения функция через указатели, считает правильно.
Сам пока решил, вводом дополнительной строки в конце функции.

capzap
24.03.2024, 14:03
Для тех, кто хочет поломать голову в свободное время, на днях столкнулся со сборкой REAL из 2 WORD в этой теме https://owen.ru/forum/showthread.php?t=39248&page=4#39
Открыл что было быстрее, в ОЛ программу сборки от capzap ( когда то он её выложил в одной из тем), программу проверял в нескольких пределах, всё работало правильно.
Ввёл числа 52429 и 16268 и получил 0.1 74640 Потом проверил в другой программе Codesys 2.3 , получил 1.1 74641
Позже оказалось что Функция arrWToReal, врёт только на пределе от 1.0 до 1.99999 и от -1.0 до -1.99999, на остальных пределах считает правильно.
Вопрос, где ошибка в коде функции arrWToReal ?

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

if exponent = 0 then
mant_mult := 0;
else
mant_mult := 1;
end_if;
вместо него надо просто записать mant_mult := 1;

EFrol
24.03.2024, 14:51
Если верить Число одинарной точности (https://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D0%BE%D0%B4%D0%B8% D0%BD%D0%B0%D1%80%D0%BD%D0%BE%D0%B9_%D1%82%D0%BE%D 1%87%D0%BD%D0%BE%D1%81%D1%82%D0%B8)
то:
74658
получается:


..
exp_raw := shr(stuffAdd, 23) mod 256;
mantissa := stuffAdd mod 8388608;
if exp_raw = 0 then
mantissa := mantissa + 8388608;
end_if;

exponent := udint_to_real(exp_raw) - udint_to_real(127);
mant_mult := 1;
..

kondor3000
24.03.2024, 14:52
я посмотрел другие примеры, в них отсутствет такой код

if exponent = 0 then
mant_mult := 0;
else
mant_mult := 1;
end_if;
вместо него надо просто записать mant_mult := 1;

Согласен, так считает правильно, у меня получилось немного длиннее)))
Выкладываю исправленные варианты.

Валенок
24.03.2024, 15:36
..Выложил вариант в Лоджике..
секунда перфекционизма
Внешняя часть. А внутренности сами выше разобрали

А что может сподвигнуть на использование этой склейки?

---
и вот например

negative := shr(stuffAdd, 31) > 0;
==

negative := stuffAdd.31;
это ж не какое-то там си ))

kondor3000
24.03.2024, 15:48
секунда перфекционизма
Внешняя часть. А внутренности сами выше разобрали

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

Этот вариант у меня уже давно есть, только в выложенном варианте опять ошибка, получается 0.1 74662 а здесь правильно 1.1 74663

Валенок
24.03.2024, 15:51
в выложенном варианте опять ошибка...
))

А внутренности сами выше разобрали
я туда не лазил. Вам верю

Валенок
24.03.2024, 18:56
А с 31 битом в Лоджике проблемы и уже давно, ждём когда исправят, поэтому так не катит.
Катит. Это ж функция а не фБ. В нем не катит чего то.
Да и ДО того как сделаться 31-ым, он 15-й

Денисов Максим Сергеевич
25.03.2024, 20:13
Катит. Это ж функция а не фБ. В нем не катит чего то.
Да и ДО того как сделаться 31-ым, он 15-й

В функциях этот баг был исправлен ранее, в ФБ исправим и выпустим в ближайшем хотфиксе

Валенок
25.03.2024, 22:12
В функциях этот баг был исправлен ранее,
А чего в функцию нельзя пихнуть целочисленное 3млрд?

Ollema
26.03.2024, 12:16
можно и впихнуть, и выпихнуть

ElectroMan
28.03.2024, 14:30
Добрый день. Подскажите пожалуйста возможно ли внутри ФБ объявить входную переменную типа TIME? При попытке объявления переменной такого типа возникает ошибка, что данный тип не поддерживается в сигнатурах функций и функциональных блоков. И от сюда вопрос как же воспользоваться функция GET_TIME возвращающее значение типа TIME? ПР102-24.2416.03 v.2.61.

EFrol
28.03.2024, 14:45
Добрый день. Подскажите пожалуйста возможно ли внутри ФБ объявить входную переменную типа TIME? При попытке объявления переменной такого типа возникает ошибка, что данный тип не поддерживается в сигнатурах функций и функциональных блоков. И от сюда вопрос как же воспользоваться функция GET_TIME возвращающее значение типа TIME? ПР102-24.2416.03 v.2.61.

Перевести в ms:


time_to_udint(get_time());

petera
28.03.2024, 14:50
Добрый день. Подскажите пожалуйста возможно ли внутри ФБ объявить входную переменную типа TIME? При попытке объявления переменной такого типа возникает ошибка, что данный тип не поддерживается в сигнатурах функций и функциональных блоков. И от сюда вопрос как же воспользоваться функция GET_TIME возвращающее значение типа TIME? ПР102-24.2416.03 v.2.61.
Преобразовать, в другой тип, например time_to_udint(GET_TIME());

Например в таймере, уставку PT пришлось объявлять не в формате TIME

FUNCTION_BLOCK TON_P //(c) PeterA
VAR_INPUT
IN: BOOL;
P: BOOL;
PT: UDINT;
END_VAR
VAR_OUTPUT
Q: BOOL;
ET: UDINT;
END_VAR
VAR
clk: BOOL;
StartTime: UDINT;
tx: UDINT;
END_VAR

tx:= time_to_udint(GET_TIME());
IF P THEN
StartTime:= tx - ET;
END_IF
IF IN AND NOT clk THEN
StartTime:= tx;
clk:= TRUE;
ELSIF NOT IN THEN
clk:= FALSE;
Q:= FALSE;
ET:= 0;
END_IF
IF clk AND NOT Q THEN
//ET:= MIN(PT, tx - StartTime); функция MIN не поддерживается!
//лепим ее сами
IF PT > (tx - StartTime) THEN
ET:= tx - StartTime;
ELSE
ET:= PT;
END_IF
Q:= ET = PT AND IN;
END_IF

end_function_block

Королев Кирилл
28.03.2024, 16:00
Добрый день. Подскажите пожалуйста возможно ли внутри ФБ объявить входную переменную типа TIME? При попытке объявления переменной такого типа возникает ошибка, что данный тип не поддерживается в сигнатурах функций и функциональных блоков. И от сюда вопрос как же воспользоваться функция GET_TIME возвращающее значение типа TIME? ПР102-24.2416.03 v.2.61.

Добрый день. Запрет распространяется на входы и выходы функций и ФБ (var_input, var_output). Вы можете объявить локальные переменные типа TIME (var), а затем, если требуется передавать значение на выход или задавать с входа, как верно подсказывают коллеги, использовать преобразования типов udint_to_time и time_to_udint.

Валенок
28.03.2024, 19:18
можно и впихнуть, и выпихнуть
Уверены? //для 2.6.347

Ну пихните

function f: udint;
var_input
i : udint;
end_var
i.25 := false; //даже не 31 и даже не выпихивая
end_function

Ollema
30.03.2024, 14:01
Тренируйтесь на моем примере (версия 2.6.345):

74857

Валенок
30.03.2024, 17:08
Тренируйтесь на моем примере (версия 2.6.345):


IN.25 := true; //ну тренируйтесь
Q.25:= IN.25;
Q.26:= false;
Q.29:= true;

2.6.347.0
345 даже в архиве на сайте нет

Dimensy
30.03.2024, 19:57
Тренируйтесь на моем примере (версия 2.6.345):

А что мы должны тренировать?

Ollema
31.03.2024, 08:03
А что мы должны тренировать?

Запутались кони, люди... :) Давайте сначала. Речь была про:


А чего в функцию нельзя пихнуть целочисленное 3млрд?

Вот код ФУНКЦИИ:

function function1: udint; //имя функции и тип данных выхода
var_input //объявление входных переменных
IN : udint;
end_var

function1 := IN;
end_function

Вот результат ввода и вывода 3 млрд.:

74870

Я в полном объеме подтвердил свое высказывание?


можно и впихнуть, и выпихнуть

Валенок
31.03.2024, 11:23
..
... далее мне по ТЗ потребовались некие действия где одно из них

IN.2 := false; //я ж в курсе про, а тута 2 (два), чего парится то?
и ..... всё встало.
Я в полном объеме подтвердил свое высказывание что невпихуемо?

Ollema
31.03.2024, 11:38
Давайте последовательно: Мой код работает? Впихуемо? Выпихуемо? Я прав?

А то, что у вас там какие то еще требования появились, про их реализацию я ничего не говорил. Считаю, что на изначальный тезис я ответил правдиво.
Блин, сперва спрашивает про 3 млрд., а потом туда же приплетает какие то записи во второй бит и спрашивает уверен ли я в своих высказываниях... Что за билиберда в голове...

Да, косяк в лоджике имеется. При изменении любого бита в 32-разрядном числе, все ломается.

Валенок
31.03.2024, 12:39
Мой код работает? Впихуемо? Выпихуемо? Я прав?

Я тоже как-то через мкад перебежал и жив. Поэтому заявляю - перебегать через мкад безопасно?


Блин, сперва спрашивает про 3 млрд.,
Вы даже не вкурили что 3млрд не причем? Ну 2.5млрд


А то, что у вас там какие то еще требования появились, про их реализацию я ничего не говорил.
Какие требования? Это функция с входом 32-битным целочисленным. Где то заявлены ограничения для входа?
Что там делает эта функция - без разницы. Работала функция со всеми 2^32 вариантами и норм. А потом внутри покрутили (ничего запрещеного - заметьте) и опс - перестала.

---
Извините, но невпихуемо

Я прав?
Нет. И в чем - вы сами знаете (и вопросы задаете там)

Ollema
31.03.2024, 12:58
Да согласитесь уже, что вопрос поставили некорректно. По вашему тогда можно спросить: "а что, функциями пользоваться невозможно"? И тоже бы доказали, что возникает ошибка.

Валенок
31.03.2024, 13:28
Вот Вы в соседней теме про что вопрос задаете?
Про превусловотый 31й бит уже поняли что проблема. Так я показал что даже не трогая его можно споткнутся на ровном месте. И самое страшное - в рунтайме. Во всяком в случае в эмуляции. Когда компиляция говорит про проблему это норм, вы ж еще не уехали с обьекта.
Железки нет, Буду благодарен если покажете рез-т того на железе.


вот мне прилетает даже не число, а маска состояний 32х гравицап. И мне нужно запустить пепелац если есть еще одна, кроме 32й, гравицапы. Ой тут проблема доступа к 31-му биту? Ну ок, перецепил провода 32й и 12й гравицапы. Написал
маска.11:= false;
пепелац := маска > 0;
Погонял в нескольких вариантах - пепелац взлетает. Ну ок, я поехал.
Сижу дома, пью пиво довольный сам собой, и тут звонок...

Ollema
31.03.2024, 13:53
В соседней теме не вопрос, а указание на проблему, которую вы обнаружили. Считалось, что в функциях пофиксили проблему с 31 битом, а оно вот как вновь вылезло. В лоджике баги выгоняют через дверь, так они обратно через окно залазят :)

Валенок
01.04.2024, 16:27
1exan сказал что пепелац в натуре взлетит, все норм.
https://owen.ru/forum/showthread.php?t=12264&page=357

Сергей0308
03.04.2024, 10:23
1exan сказал что пепелац в натуре взлетит, все норм.
https://owen.ru/forum/showthread.php?t=12264&page=357

Бабочка без гравицаппы не очень:
https://ru.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D0%B2%D0%B8%D1%86%D0%B0%D0%BF%D 0%BF%D0%B0

74933

AlexCrane
17.04.2024, 09:33
Если есть поделитесь функциональными блоками для работы с utime в ПР205.
т.е. на входе сек, мин, час, день, мес, год на выходе utime и обратно.

melky
17.04.2024, 09:41
AlexCrane такие блоки были от petera в FBD, а вот делали их на ST или нет, надо смотреть в теме.

Dimensy
17.04.2024, 10:48
Если есть поделитесь функциональными блоками для работы с utime в ПР205.
т.е. на входе сек, мин, час, день, мес, год на выходе utime и обратно.

Вот, в свое время делал,

AlexCrane
17.04.2024, 12:45
Вот, в свое время делал,

Благодарю, долго мне пришлось бы их самому делать...

novinky
03.05.2024, 12:10
хотел бы больше типов переменных, напр int, array, режим эмуляции, так же и в ФБ

Денисов Максим Сергеевич
03.05.2024, 14:03
хотел бы больше типов переменных, напр int, array, режим эмуляции, так же и в ФБ

Эмуляцию планируем зарелизить осенью, новые типы данных не планируем

Денисов Максим Сергеевич
03.05.2024, 14:03
хотел бы больше типов переменных, напр int, array, режим эмуляции, так же и в ФБ

Эмуляцию планируем зарелизить осенью, новые типы данных не планируем

Васильев
05.05.2024, 14:41
1. поиск и замена в редакторе ST
2. Запись чисел в шестнадцатеричном, двоичном виде.
3. Выполнение логических операций над числами udint (над целыми) числами

Спасибо большое