Вход

Просмотр полной версии : Создать функцию на ST



Страницы : 1 [2] 3

Вольд
27.12.2021, 16:40
Filini кажется вы тоже не понимаете простой вещи, в ПР никакой код НИКОГДА и не совался, как и в большинство ПЛК. Все, что вы видите - квадратики TON, TOF, BLINK и так далее, будь они квадратиками или на ST - это все уже реализовано в прошивке (firmware) ПР. ОЛ всего лишь обертка с указанием что, когда и как выполнять, не более того.

Filini бесполезно это объяснять. Он дремуч и этим все сказано.

Filini
27.12.2021, 16:47
Filini кажется вы тоже не понимаете простой вещи, в ПР никакой код НИКОГДА и не совался, как и в большинство ПЛК. Все, что вы видите - квадратики TON, TOF, BLINK и так далее, будь они квадратиками или на ST - это все уже реализовано в прошивке (firmware) ПР. ОЛ всего лишь обертка с указанием что, когда и как выполнять, не более того.

Вот это оборот, язык ST перестал быть кодом)))))

Вольд
27.12.2021, 16:51
Filini Хотя смотря на реализацию ОЛ не удивлюсь, что в ПР загружается картинка с холстом ОЛ, а тот бедолага мучается ее воспроизвести :)

melky, в МК ПР загружается откомпилированный исходный текст, т.е. бинарный файл. Компиляция делается в приложении OL. Сам OL крутится на ПК. МК вообще до лампады на каком языке написан исходный текст. Если правильно выполнена компиляция (т.е. исходный текст правильно переведен в машинные команды), то МК все переварит, лишь бы ресурсов хватило для исполнения кода.

Filini
27.12.2021, 16:51
Filini бесполезно это объяснять. Он дремуч и этим все сказано.

Проще всего заявить что оппонент дремуч, чем ответить на простой вопрос)))))

Вольд
27.12.2021, 16:53
Вот это оборот, язык ST перестал быть кодом)))))

Ты лучше больше ничего не пиши. Зачем срамить себя и род человеческий. Иди по новой в школу учиться.;) Там тебе на уроках информатики все доходчиво расскажут.

Filini
27.12.2021, 16:54
Не спеши. Вот это все для перевода на LD 58515

ага, именно ПЕРЕВОД, а не сам LD)))))))
LD - язык логических диаграмм, а теперь посмотрите, что у вас на первоначальной картинке. Пока смешите Вы))))

Filini
27.12.2021, 16:54
Ты лучше больше ничего не пиши, а иди по новой в школу учиться. Там тебе на уроках информатики все доходчиво расскажут.

может вам пойти в ПЛК, а не пытаться сделать ПЛК из ПР. Или денег не хватает?

Вольд
27.12.2021, 17:03
может вам пойти в ПЛК, а не пытаться сделать ПЛК из ПР. Или денег не хватает?

Ты бегаешь по кругу.;) Куда мне идти и что делать я без тебя разберусь. Твои глупые советы мне не нужны.

melky
27.12.2021, 17:09
Filini ПЛК для более сложных задач или по нехватке ресурсов ПР используют. А учитывая, что по математике даже на FBD Овеновские ПР, начиная с ПР114, рвут как тузик грелку все иностранные аналоги, то просто небольшие добавки на ST поставят его между иностранными ПР и ПЛК любого производителя.

Правда хромает до сих пор качество и некоторые другие возможности. которые есть в иноПР.

sot
27.12.2021, 17:29
Чуваки, потерял нить рассуждений где-то на пятом экране,
расскажите вкратце,
кто здесь в этой ветке тролль?
Филини или Вольд?

ONTOP: Функция на ST - это должна быть вещь с интегрированием имен переменных из проекта.
Плюсом - сделать из неё ФБ. - это мечталка

Filini
27.12.2021, 17:45
Ты бегаешь по кругу.;) Куда мне идти и что делать я без тебя разберусь. Твои глупые советы мне не нужны.

без тебя тоже, не? Пока по кругу бегаешь ты от простых вопросов))))

Filini
27.12.2021, 17:51
Filini ПЛК для более сложных задач или по нехватке ресурсов ПР используют.

Я об этом писал на много выше, осталось это понять тем, кто пытается ST применять на ПР.



А учитывая, что по математике даже на FBD Овеновские ПР, начиная с ПР114, рвут как тузик грелку все иностранные аналоги,

Спорное утверждение, посмотрите линейку ПР от Schneider Electric.


то просто небольшие добавки на ST поставят его между иностранными ПР и ПЛК любого производителя.

короче недоПЛК, который еще добавит проблем в ПР.


Правда хромает до сих пор качество и некоторые другие возможности. которые есть в иноПР.
[/QUOTE]
и? Для чего в этом букете болячек еще ST? Чтобы убить отечественные ПР?

Филоненко Владислав
27.12.2021, 19:49
В.Филоненко, скажите, пожалуйста, какой код будет занимать больше места в памяти ПР, тот что получен после компиляции ST текста или FBD полотна ? Предполагается, что программируется одна и та же задача.

оба кода транслируются в P-code, который и заливается внутрь ПР.
P-code для ST и FBD одинаков
Что будет больше - вопрос сложный, т.к. для одних случаев ST генерит более компактный код, для других FBD.
Если не использовать циклы, массивы и прочий сахар ST, а также вызывать все функции только 1 раз за цикл - размеры будут +- одинаковые на большой программе.
Но если использовать - ST выиграет за счёт переиспользования кода функций и сжатия программы в циклах.
Но FBD для описания связей нагляднее - так что рисуем общие связи на FBD, а сложные функции на ST и будет счастье, мир и премия!
А ещё и шоколадка!

Филоненко Владислав
27.12.2021, 19:51
Денег нет, но вы держитесь (с)

А по сути - клёво, что можно то, что не можно, например, на сегнетиксе.
Это экономит и силы и нервы. описывать цикличную логику - та ещё лабуда.

но вот ответы разработчиков - напрягают.
Они вообще видят цель?

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

Филоненко Владислав
27.12.2021, 19:52
Чуваки, потерял нить рассуждений где-то на пятом экране,
расскажите вкратце,
кто здесь в этой ветке тролль?
Филини или Вольд?

ONTOP: Функция на ST - это должна быть вещь с интегрированием имен переменных из проекта.
Плюсом - сделать из неё ФБ. - это мечталка

Троль здесь я! Это одна из штатных обязанностей нежно, но настойчиво направить Вас на путь истинный - славить ОВЁН в веках! Офтоп прекращаем!

Ollema
27.12.2021, 20:37
Но FBD для описания связей нагляднее - так что рисуем общие связи на FBD, а сложные функции на ST и будет счастье, мир и премия!


Именно! Вчера не выдержал, перенес программу из старого лоджика в новый - надо было переделать и очень подмывало функцию на ST сделать. Сделал, в пару строк, вместо сетки паутин :) Очень изящно получилось, быстро и удобно! Спасибо овеновцы!

melky
27.12.2021, 21:43
Filini так качество изделия не в плане программной части. Вот не надо тут про ZelioLogic, если вы о нем, по математике он дите, как и ABB и Logo

У Овен хромает качество самого ОЛ. Ибо пишут студенты...

Filini
27.12.2021, 22:08
Filini так качество изделия не в плане программной части. Вот не надо тут про ZelioLogic, если вы о нем, по математике он дите, как и ABB и Logo

У Овен хромает качество самого ОЛ. Ибо пишут студенты...

о да, куда им-то до нас)))))

sot
28.12.2021, 04:45
Утверждение по меньшей мере спорно. ST был очень сильно протестирован перед релизом как автотестами, так и на железе.

https://owen.ru/forum/showthread.php?t=35757&p=371596&viewfull=1#post371596

В этой теме я конкретно утверждаю, что существует БАГ логического аппарата ST.
Признайте и назначьте дату релиза без бага.
Дискуссия уместна???

(очень сильно протестирован... - ты, ты реально тролль)) что приятно, но для дела не полезно)

СергейНовосиб
28.12.2021, 04:47
Вообще из тут присутствующих есть, кто знает как работают микроконтроллеры?? А?
А кто из вас пробовал на микросхемах (И, И-НЕ, ИЛИ, операционниках и т.д.) спаять какое-нибудь работающее устройство?

Как тут уже много раз было сказано, что микроконтроллеру до лампочки на каком языке написана программа.
Вопрос только в ресурсах микроконтроллера, примененного в конкретном ПЛК, ПР и т.д.

А вы знаете, что есть замечательный язык программирования, на котором не только маленькие программки писали, а целые операционные системы для ПК?
Все наверно помнят такую ОС "MSDOS", так вот в 90-е бала написана ОС на ассемблере кажется название "PCDOS" или "PSDOS". Так вот, у нее размер файлов был меньше, чем у MS, а функционала чуть больше. Дальнейшее развитие не получил, потому что винда пришла.

Это ассемблер! И программы получаются компактные и быстродействие высокое. А еще лучше писать вообще в машинных кодах. Но для этого, кто не знает, нужно ОЧЕНЬ хорошо знать архитектуру конкретного микроконтроллера.

Я тут вижу некоторых сильное недовольство, что кто-то у нас в стране что-то делает и старается не стоять на месте. Да, ПР - может это не совсем ПЛК, хотя для меня большой разницы нет. Я ПР200 выбрал для своих проектов исходя из имеющегося функционала - дисплей(!), наличия 2-х RS, количества входов и выходов, и по надежности полностью устраивает. Из пару тройку сотен ПР200, что мы применили вышло из строя 2 или 3 штук и то из-за корявых рук эксплуатационщиков.

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

lagutin
28.12.2021, 09:21
Попробовал функцию определения дня из темы. Если ввести несуществующий месяц отладка виснет. А в реальном приборе тоже зависнет весь ПР? Или как он себя поведет? Прибора у меня нет "живого".
То что нет отладки самого кода функции по точкам останова(или есть?) вкупе с отсутствием обновления блока функции, лично для меня прямо непреодолимая преграда для написания какого то "существенного" кода.
Вот шпаргалку по основам ST накопал. Основы "разжеваны" прямо дальше некуда...
https://www.mitsubishielectric.com/fa/assist/e-learning/pdf/rus/1-Program_Basics_ST_na_rus.pdf

X200881
28.12.2021, 10:40
А кто из вас пробовал на микросхемах (И, И-НЕ, ИЛИ, операционниках и т.д.) спаять какое-нибудь работающее устройство?
Я имею такой опыт, и в разработке счетных, звуковых устройств и.т.д, на всей этой рассыпухе.(в далёком 2000г). Присоединяюсь к вашему суждению и на основании ваших же слов спрашивал о добавлении, именно добавлении, языка LD, несмотря на мои познания в микросхемах (аналог FBD), по душе именно LD, для описания и модернизации алгоритмов управления для автоматических линий. А вот хитрые пересчеты пишу на IL(похож на асемблер).
Подытожу: мне нужна ПР, с поддержкой языка LD. ST считаю хорошей перспективой. Использовал бы его для хитрых расчётов, а основной алгоритм на LD.
Все конкуренты ПР пропали бы быстро, в том числе для вновь проектируемых машин. К сведению ОВЕН (да вы и сами знаете), у большинства конкурентов для сегмента промавтоматики устройств класса ПР, у большинства есть LD и FBD, пиши на чем хошь.

melky
28.12.2021, 14:32
X200881 покажите это большинство, очень интересно...

keysansa
28.12.2021, 15:23
Еще важно не только на каком языке пишется УП. Важно, что бы вся линейка этот набор поддерживала.
Вот, недавний пример.
Есть программа, на ST, на контроллере, отлажена, вылизана, работает.
Но в очередной реализации, функциональные узлы системы не компактно расположены, а удаленно, 100-300м.
Вместо кабелей на 30 жил, я решаю поставить ПР и протянуть в локальные шкафчики только 3 кабеля. Питание, связь и безопасность.
И начинается... Вместо того, что бы отлаженный кусок я бы просто скопировал, привязал к вводу/выводу, я обязан алгоритм переложить на новый язык и заново его отладить. И все это в пределах одного вендора.
Просто удаленный ввод я не могу использовать, так как узлы, из-за того, что стали удаленными, требуют независимого управления.

ЗЫ. А в общем - со времен TraceMode 4 слышу, что "программирование квадратиками мы ввели для того, что бы не только программисты могли реализовать свои замыслы, но и технологи". При этом, хорошим технологам пофиг на чем реализовать свои замыслы (G-code ЧПУ не даст соврать), а плохим и квадратики не милы.

keysansa
28.12.2021, 15:44
X200881 покажите это большинство, очень интересно...
По цене, наверное не все конкуренты, но... Из того, что знаю:

Mitsubishi - есть LD, есть китайские конкурентные по цене клоны. Alpha, аналог PR 200 - нет (там "квадратики").
Omron - Есть LD, ZEN - очень похожее на LD
Delta - не помню, точно ли LD, но похожее
Siemens - есть, Logo - не пробовал. Но вроде тоже "квадратики".
B&R - есть LD, у них как раз, все контроллеры все языки поддерживают.

Однако, всякие ZEN и Logo разрабатывались, когда "телефоны были маленькие а процессоры большие". Сейчас играть в ту же нишу, как-то... Когда ESP8266 имеет на порядок больше ресурсов...

Filini
28.12.2021, 18:12
Вообще из тут присутствующих есть, кто знает как работают микроконтроллеры?? А?
А кто из вас пробовал на микросхемах (И, И-НЕ, ИЛИ, операционниках и т.д.) спаять какое-нибудь работающее устройство?

Вы решили чем-то впечатлить? В конце 80-х, начале 90-Х полно спаяно, от цветомузык до мелодичных звонков и миниавтоматики для первых кооперативных станков, еще в школе и техникуме.


Я тут вижу некоторых сильное недовольство, что кто-то у нас в стране что-то делает и старается не стоять на месте.

Оставьте политику и теории заговора для других ресурсов, здесь не об этом.


Каждая железяка для своих задач. Вы же не будете на легковушку ставить колеса от грузовика только потому, что на них можно больше увезти.
Как-то так.
Вот и я об этом, а не о торможении прогресса))))

keysansa
28.12.2021, 18:28
Вы решили чем-то впечатлить? В конце 80-х, начале 90-Х полно спаяно, от цветомузык до мелодичных звонков и миниавтоматики для первых кооперативных станков, еще в школе и техникуме.


Думаю, я понял, чем он хотел впечатлить. Verilog.
ЗЫ. Да, круто.

Filini
28.12.2021, 18:45
Думаю, я понял, чем он хотел впечатлить. Verilog.
ЗЫ. Да, круто.

Тюююю, да это семечки.
Помню в технаре писали программы для ЧПУ станков, язык не помню как назывался, но вся текстовая часть на русском, типа "иди из точки А по линии Б до линии В. При чем "до", "на", "за" линию в этой проге уже имело значение))))))

keysansa
28.12.2021, 18:56
Тюююю, да это семечки.
Помню в технаре писали программы для ЧПУ станков, язык не помню как назывался, но вся текстовая часть на русском, типа "иди из точки А по линии Б до линии В. При чем "до", "на", "за" линию в этой проге уже имело значение))))))

Для ЧПУ, это G-code. К Verilog - никакого отношения не имеет. Там все исходит из теории дискретных устройств.

ЗЫ. Вы на G-code уверенно умеете?

Filini
28.12.2021, 19:09
Для ЧПУ, это G-code. К Verilog - никакого отношения не имеет. Там все исходит из теории дискретных устройств.

ЗЫ. Вы на G-code уверенно умеете?

Уже нет, практики последние года очень мало, чисто для развлечения.
Вот лет 15 назад)))))))))

keysansa
28.12.2021, 19:30
Уже нет, практики последние года очень мало, чисто для развлечения.
Вот лет 15 назад)))))))))

За 15 лет ничего в G-code существенного не изменилось.

Filini
28.12.2021, 19:33
За 15 лет ничего в G-code существенного не изменилось.

в G-code да, мало что изменилось, а вот нюансы обработки забываешь, те же режимы. Пока ArtCam больше

СергейНовосиб
29.12.2021, 06:24
Все языки хороши, пусть нас научат!!!!! :o

X200881
29.12.2021, 08:34
Mitsubishi - есть LD, есть китайские конкурентные по цене клоны. Alpha, аналог PR 200 - нет (там "квадратики").
Omron - Есть LD, ZEN - очень похожее на LD
Delta - не помню, точно ли LD, но похожее
Siemens - есть, Logo - не пробовал. Но вроде тоже "квадратики".
B&R - есть LD, у них как раз, все контроллеры все языки поддерживают.



У Logo есть LD, на нем и пишу.
Шнайдер-зелио, Аленбредли-пико, TECO SG2, тоже есть.

sot
29.12.2021, 14:08
Попробовал функцию определения дня из темы. Если ввести несуществующий месяц отладка виснет. А в реальном приборе тоже зависнет весь ПР? Или как он себя поведет? Прибора у меня нет "живого".
То что нет отладки самого кода функции по точкам останова(или есть?) вкупе с отсутствием обновления блока функции, лично для меня прямо непреодолимая преграда для написания какого то "существенного" кода.
Вот шпаргалку по основам ST накопал. Основы "разжеваны" прямо дальше некуда...
https://www.mitsubishielectric.com/fa/assist/e-learning/pdf/rus/1-Program_Basics_ST_na_rus.pdf

Как вариант, для отладки кода на ST, установите CodeSYS 2 или 3, отлаживайте в нём в эмуляции, готовый код в OL.

Филоненко Владислав
29.12.2021, 14:20
Как вариант, для отладки кода на ST, установите CodeSYS 2 или 3, отлаживайте в нём в эмуляции, готовый код в OL.

А чем Вас симулятор не устраивает?

sot
29.12.2021, 17:53
А чем Вас симулятор не устраивает?

нет ^F

;-)

а также, действительно, вы же не претендуете на полноценную среду разработки ST ???

И, правда, почему бы не добавить глобальные переменные?
Так, чтобы FunST могли внутри видеть переменные проекта?

IVM
29.12.2021, 18:07
нет ^F

;-)

а также, действительно, вы же не претендуете на полноценную среду разработки ST ???

И, правда, почему бы не добавить глобальные переменные?
Так, чтобы FunST могли внутри видеть переменные проекта?

А что мешает подать на входы функции переменные проекта ?

f1 := m1;

Функция присваивает себе значение m1 из таблицы переменных. Что еще надо ?

keysansa
04.01.2022, 18:08
Думаю, я понял, чем он хотел впечатлить. Verilog.
ЗЫ. Да, круто.




Тюююю, да это семечки.
Помню в технаре писали программы для ЧПУ станков, язык не помню как назывался, но вся текстовая часть на русском, типа "иди из точки А по линии Б до линии В. При чем "до", "на", "за" линию в этой проге уже имело значение))))))




Для ЧПУ, это G-code. К Verilog - никакого отношения не имеет. Там все исходит из теории дискретных устройств.
ЗЫ. Вы на G-code уверенно умеете?




Уже нет, практики последние года очень мало, чисто для развлечения.
Вот лет 15 назад)))))))))




За 15 лет ничего в G-code существенного не изменилось.




в G-code да, мало что изменилось, а вот нюансы обработки забываешь, те же режимы. Пока ArtCam больше


Как сказали в соседней ветке - не хочу поддерживать эпистолярный жанр. Спасибо.

keysansa
04.01.2022, 18:10
нет ^F



Симулятор не умеет в указатели?
Я, конечно, сейчас засомневался, но мне кажется, не так давно отлаживал программу, как раз содержащую ссылки.

keysansa
04.01.2022, 18:14
А что мешает подать на входы функции переменные проекта ?

f1 := m1;


Читабельность кода, внесение изменений в программу.
Вы, предположу, один работаете над проектом. Вот вам 3 - вариант - когда второй разработчик изменит порядок массива, но вам забудет сказать.
ЗЫ. Да и найти все ссылки на конкретный элемент массива по программе та еще задача получается. Ни по имени, ни по адресу.

ЗЫЫ. Sot
Можно INOUT использовать, а не указатели. Так-то тоже самое.

dan75
05.01.2022, 13:10
Первый шаг сделан. Надо двигаться разработчикам дальше. Функция на ST хорошо, но ее возможности ограничены. Надо делать ФБ на ST. Также надо расширять типы данных. Нужны математические функции: LN, LOG, EXP, SIN, COS, ABS, ASIN, ACOS.

ABS есть и даже работает. Из математических функций есть ещё POW. Для целочисленных есть SHL, SHR, CD32, DC32.
Короче, просьба ко всем сведущим: ткните, плз, носом в справку по ST применительно к ОЛ. В справке по ОЛ я упоминания о вышеперечисленных функциях не нашёл.

IVM
05.01.2022, 14:10
ABS есть и даже работает. Из математических функций есть ещё POW. Для целочисленных есть SHL, SHR, CD32, DC32.
Короче, просьба ко всем сведущим: ткните, плз, носом в справку по ST применительно к ОЛ. В справке по ОЛ я упоминания о вышеперечисленных функциях не нашёл.

Я думаю со временем все появится. Главное что процесс пошел.

keysansa
06.01.2022, 00:00
Я думаю со временем все появится. Главное что процесс пошел.

OSCAT же есть. Зачем изобретать велосипед заново?

dan75
06.01.2022, 23:47
Ещё один вопрос. В справке ОЛ про логические операторы сказано, что они могут использоваться побитово. Однако, при попытке применить логический оператор к переменной udint, программа выдаёт ошибку. Может я просто не знаю синтаксис ST? Или данного функционала ещё нет? И как тогда осуществлять побитовые логические операции типа (udint:=udint&udint)? Рассусоливать каждый раз по 32 строки?

melky
07.01.2022, 12:50
dan75 а просто dint или int ? посмотрите в справке тип переменных, какие применимы. В режиме FBD работает AND с целочисленными

dan75
07.01.2022, 12:56
dan75 а просто dint или int ? посмотрите в справке тип переменных, какие применимы. В режиме FBD работает AND с целочисленными

В FBD -- да. Собсно, и вопрос-то возник, когда я попытался перевести один свой макрос на ST. Так-то ST в ОЛ работает только с 3мя типами данных: bool, udint, real, насколь мне известно. Никаких "просто dint или int".

keysansa
08.01.2022, 18:52
Ещё один вопрос. В справке ОЛ про логические операторы сказано, что они могут использоваться побитово. Однако, при попытке применить логический оператор к переменной udint, программа выдаёт ошибку. Может я просто не знаю синтаксис ST? Или данного функционала ещё нет? И как тогда осуществлять побитовые логические операции типа (udint:=udint&udint)? Рассусоливать каждый раз по 32 строки?

ST между целыми типами выполняет как раз побитовую логическую операцию.
У вас ошибка, скорее всего, в том, что в ST, нет оператора "&", вместо него "AND".

ЗЫ.
Булевые операции над целыми числами в ST выполняются так:
bool A:= (3=3); //TRUE

ЗЫЫ.
int A:= 3 AND 3; // 3

Филоненко Владислав
09.01.2022, 12:29
нет ^F

;-)

а также, действительно, вы же не претендуете на полноценную среду разработки ST ???

И, правда, почему бы не добавить глобальные переменные?
Так, чтобы FunST могли внутри видеть переменные проекта?

Всё это будет в следующих этапах. Это большой объём работы, разбитый на этапы

Филоненко Владислав
09.01.2022, 12:30
Ещё один вопрос. В справке ОЛ про логические операторы сказано, что они могут использоваться побитово. Однако, при попытке применить логический оператор к переменной udint, программа выдаёт ошибку. Может я просто не знаю синтаксис ST? Или данного функционала ещё нет? И как тогда осуществлять побитовые логические операции типа (udint:=udint&udint)? Рассусоливать каждый раз по 32 строки?

пример ошибки в студию. Битовые операции все побитовые и работают с UDINT

Филоненко Владислав
09.01.2022, 17:41
.... в лоджик-ST?

Да, именно там

dan75
09.01.2022, 18:55
пример ошибки в студию.
Хм, а не проще ли сразу показать, как правильно? Ну ОК, вот на скорую руку примерчик. В 11й строке ошибки нет. В 12 -- есть.
58653

melky
09.01.2022, 19:09
dan75 в ОЛ нет разделения типа, там все переменные udint но просто напишите INT - ошибка пропадет?

dan75
09.01.2022, 19:18
Мелкий, В разделе var? "Неизвестный тип undefinded", ибо ST в ОЛ не поддерживает просто INT.

Ollema
10.01.2022, 01:11
Всё это будет в следующих этапах. Это большой объём работы, разбитый на этапы

Сделайте, пожалуйста, первым этапом возможность размещения функций в макросах.

Сергей0308
10.01.2022, 01:31
Мелкий, В разделе var? "Неизвестный тип undefinded", ибо ST в ОЛ не поддерживает просто INT.

Вообще-то представитель Овен в одной из тем категорично настаивал, что тип данных в ОЛ следует называть именно INT(DINT), а не UINT(UDINT), как я и другие думали и отстаивали!
Вероятно они забыли, короче, непонятно, как они теперь станут выкручиваться.
Не могут же они сказать: это вчера мы так думали, а сегодня наше мнение изменилось на 180 градусов(на прямо противоположное), это как-то некрасиво и нелогично, я так думаю!

Филоненко Владислав
10.01.2022, 08:58
Сделайте, пожалуйста, первым этапом возможность размещения функций в макросах.

А зачем? Функция и есть, по сути, макрос. Просто вызывайте её из нужного места. Или я чего-то не понимаю?

bayk
10.01.2022, 09:14
потому что функция позволяет решать мелкие прикладные задачи, которые было бы удобно разместить внутри более крупного макроса с определенным функционалом!

melky
10.01.2022, 09:32
Сергей0308 вот и я про то же, раньше говорили одно, а теперь переобулись...

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

Ollema
10.01.2022, 09:35
А зачем? Функция и есть, по сути, макрос. Просто вызывайте её из нужного места. Или я чего-то не понимаю?

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

prolex888
10.01.2022, 14:27
Итон Изи4 поддерживает полноценно 3 языка - LD, FBD, ST

Ollema
10.01.2022, 19:25
Да, тоже считаю, что ST достаточен в минимальной версии, только пусть будет возможность размещать функции в макросах. Все таки это не ПЛК же.

bayk
10.01.2022, 21:55
Итон Изи4 поддерживает полноценно 3 языка - LD, FBD, ST

и что? еатон почти нигде не продается. с сервисом по-любому будет беда и т.д.
пысы да на Ютубе про него на русском 3 видео..... это смешно. тоесть с любой значимой проблемой останешься один на один

sot
11.01.2022, 05:24
Всё это будет в следующих этапах. Это большой объём работы, разбитый на этапы

Некоторые не поняли )) или не так поняли.
^F - это Ctrl-F он же <Ctrl><F> он же Search. Просто поиск по тексту, может быть, даже, с заменой.

Но вопрос-то не в этом.
dan75 показал Вам пример, где не работают логические операции внутри fSt над UDINT.
https://owen.ru/forum/showthread.php?t=35489&p=372362&viewfull=1#post372362

Вы можете привести пример - где работают???

Валенок
11.01.2022, 08:34
ту sot,
Ну что вы, тут еще 50 страниц ковырять в носу будут пока поймут заданный вопрос. После чего скажут - работаем над этим. Причем укажут что это уже тоже сказано.

Филоненко Владислав
11.01.2022, 09:07
потому что функция позволяет решать мелкие прикладные задачи, которые было бы удобно разместить внутри более крупного макроса с определенным функционалом!
Сделать функцию, вызывающую другие функции?
Просто макрос - это такой кривой и сучковатый костыль, введённый временно и ставший дефакто "стандартом кодинга" на ПР.
Теперь, пусть и не сразу, появились функции, т.е. ПЕРЕИСПОЛЬЗУЕМЫЙ код (а не копии кода как в макросе).
И теперь программы будут радикально меньше и немного быстрее.

Филоненко Владислав
11.01.2022, 09:08
Хотелось бы компактности. Размещая функцию в макросе получаем "единый обрабатывающий блок", а не дробим весь функционал по мелочам.

вызывайте мелкие функции в большой. Макрос - это как раз не про компактность, а ровно наоборот

melky
11.01.2022, 17:06
Филоненко Владислав опять 25....

Большая функция будет так же ограничена одним выходом?
Так же ограничена отсутствием функциональности FBD ?

bayk
12.01.2022, 08:59
Сделать функцию, вызывающую другие функции?
Просто макрос - это такой кривой и сучковатый костыль, введённый временно и ставший дефакто "стандартом кодинга" на ПР.
Теперь, пусть и не сразу, появились функции, т.е. ПЕРЕИСПОЛЬЗУЕМЫЙ код (а не копии кода как в макросе).
И теперь программы будут радикально меньше и немного быстрее.

вы как-то странно смотрите на проблему, или никогда не писали больших программ в ОЛ.

Алексей1801
16.01.2022, 21:43
Доброго дня уважаемые форумчане!
Вопрос разработчикам: "- а когда будут ФБ?"

Филоненко Владислав
17.01.2022, 09:01
вы как-то странно смотрите на проблему, или никогда не писали больших программ в ОЛ.

Да, разработчик ОЛ не писал больших программ. Даже не смешно.

Ollema
20.01.2022, 16:51
Там же было не просто "больших программ", а "больших программ в ОЛ".

А вообще, спасибо за ОЛ!

keysansa
20.01.2022, 19:55
вызывайте мелкие функции в большой. Макрос - это как раз не про компактность, а ровно наоборот

Смотря, какой макрос.
Macros MS Office - изначально - просто возможность записывать и потом нужное количество раз воспроизводить последовательность нажатий клавиш. Позднее расширился до VBA
Macros С - отдельный, хоть и упрощенный, транслятор.
Macros ОВЕН - на сегодня, это FBD, причем, полноценное, с вложением. В данном контексте - лучшее. Лучше этого - текст и компилятор (ИМХО)

Филоненко Владислав
21.01.2022, 10:41
Смотря, какой макрос.
Macros ОВЕН - на сегодня, это FBD, причем, полноценное, с вложением. В данном контексте - лучшее. Лучше этого - текст и компилятор (ИМХО)

И чем же хорошо дублирование кода в макросе?

keysansa
21.01.2022, 21:20
И чем же хорошо дублирование кода в макросе?

Вариант 1.
У вас есть, например, загрузчик и разгрузчик. В каждом из которых - несколько заслонок. Поэтому, макрос заслонка - встраивается по нескольку раз и в загрузчик и разгрузчик. Называется - повторное использование кода - не надо каждую заслонку описывать заново.

Вариант 2.
Та же ситуация. Когда смотришь код загрузчика, сразу видишь несколько заслонок, код которых уже посмотрел, и он не захламляет взгляд. Называется - повысить читаемость кода.

Вариант 3.
Та же ситуация. Вы допустили ошибку в алгоритме работы заслонки. Меняете в одном месте и уверены, что не пропустите это исправление где-то среди заслонок загрузчика и разгрузчика. Не помню, как это называется )

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

Филоненко Владислав
22.01.2022, 08:33
Вариант 1.
У вас есть, например, загрузчик и разгрузчик. В каждом из которых - несколько заслонок. Поэтому, макрос заслонка - встраивается по нескольку раз и в загрузчик и разгрузчик. Называется - повторное использование кода - не надо каждую заслонку описывать заново.

Вариант 2.
Та же ситуация. Когда смотришь код загрузчика, сразу видишь несколько заслонок, код которых уже посмотрел, и он не захламляет взгляд. Называется - повысить читаемость кода.

Вариант 3.
Та же ситуация. Вы допустили ошибку в алгоритме работы заслонки. Меняете в одном месте и уверены, что не пропустите это исправление где-то среди заслонок загрузчика и разгрузчика. Не помню, как это называется )

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

Хм. Повторное использование кода это когда один экземпляр кода вызывается из разных мест.
В случае макросов N экземпляров кода (пусть и одинакового) вызываются каждый раз отдельно. Т.е. программа в N раз больше и несколько медленнее (т.к. Cache Miss чаще возникает).
Не путаем ФБ/Функции в ST и макросы ОЛ

Ollema
22.01.2022, 09:59
Тогда надо говорить, что не вызывается каждый раз, а каждый раз один и тот же код прописывается в программе. Правильно?

Филоненко Владислав
24.01.2022, 09:26
Тогда надо говорить, что не вызывается каждый раз, а каждый раз один и тот же код прописывается в программе. Правильно?

Правильно, именно так

keysansa
24.01.2022, 14:33
Хм. Повторное использование кода это когда один экземпляр кода вызывается из разных мест.
В случае макросов N экземпляров кода (пусть и одинакового) вызываются каждый раз отдельно. Т.е. программа в N раз больше и несколько медленнее (т.к. Cache Miss чаще возникает).
Не путаем ФБ/Функции в ST и макросы ОЛ

Не путаем. Код - он бывает и текстовый и исполняемый. Если знакомы с С, это как вызов обычной функции, и вызов той же функции Inline. И в том и в другом случае, есть повторное использование кода. В разных случаях - для разных задач. В случае inline - для быстродействия, в случае обычной функции - для экономии.
Но изменив код в одном месте - он поменяется при всех вызовах - смотрим снова на все пункты.

ЗЫ. "Убегание кэша" вам вообще ничем не грозит, так как:
1. Вы его не получите, так как булева алгебра очень близка к машинному коду = компактна. Даже при использовании строк.
2. Чем код менее оптимизирован компилятором под размер (меньше переходов, линейный), тем он больше но и быстрее исполняется, так как меньше операций PUSH, POP.
2. Даже, если, вдруг, каким-то чудом, получите множественную очистку кэша, вас, как программиста автоматики, это не должно волновать. Так как у вас есть отведенное технологическим оборудованием время цикла, например, 10мс. И пока вы из него не выбиваетесь - остальное не важно. Прогармма должна выполнить цикл менее или равно, чем за отведенное время. Если нужны короткие циклы, то для этого придумали ПЛИС (я месяца 3 назад решил поизучать - просто восторге от их быстродействия).

Alexandr21
30.01.2022, 19:53
да, столкнулся с этим. Только беззнаковый тип. или переходи на реал

Alexandr21
30.01.2022, 20:01
Я завел обр связь с вых функции на вход и получил возможность на ST писать свои счетчики, триг со всякой нужной мне логикой. мне показалось, что это удобно и очень компактно. Интересно, кто нибудь так делал?

Сергей0308
30.01.2022, 21:53
Я завел обр связь с вых функции на вход и получил возможность на ST писать свои счетчики, триг со всякой нужной мне логикой. мне показалось, что это удобно и очень компактно. Интересно, кто нибудь так делал?

Это не ваша заслуга, а ваша невнимательность, другие(в том числе и я) так давно(всегда) делали для удобства!

https://owen.ru/forum/showthread.php?t=35810

59027

Филоненко Владислав
31.01.2022, 14:50
Не путаем. Код - он бывает и текстовый и исполняемый. Если знакомы с С, это как вызов обычной функции, и вызов той же функции Inline. И в том и в другом случае, есть повторное использование кода. В разных случаях - для разных задач. В случае inline - для быстродействия, в случае обычной функции - для экономии.
Но изменив код в одном месте - он поменяется при всех вызовах - смотрим снова на все пункты.

ЗЫ. "Убегание кэша" вам вообще ничем не грозит, так как:
1. Вы его не получите, так как булева алгебра очень близка к машинному коду = компактна. Даже при использовании строк.
2. Чем код менее оптимизирован компилятором под размер (меньше переходов, линейный), тем он больше но и быстрее исполняется, так как меньше операций PUSH, POP.
2. Даже, если, вдруг, каким-то чудом, получите множественную очистку кэша, вас, как программиста автоматики, это не должно волновать. Так как у вас есть отведенное технологическим оборудованием время цикла, например, 10мс. И пока вы из него не выбиваетесь - остальное не важно. Прогармма должна выполнить цикл менее или равно, чем за отведенное время. Если нужны короткие циклы, то для этого придумали ПЛИС (я месяца 3 назад решил поизучать - просто восторге от их быстродействия).

быстродействие получают с inline за счёт убирания преамбулы и выхода из функции. Но это работает за счёт размера кода и в какой-то момент код, 100% попадающий в кэш вылазит за него и тут, вдруг, в 3-4 раза начинает медленнее выполняться. И вся "оптимизация" идёт в пустыню Наска. Так что утверждать, что в ПР макросы быстрее функций можно на какой-нибудь нанопрограмме. А вот на больших проектах это не так.

Alexandr21
31.01.2022, 19:28
Это не ваша заслуга, а ваша невнимательность, другие(в том числе и я) так давно(всегда) делали для удобства!

https://owen.ru/forum/showthread.php?t=35810

59027

В ST не видел, чтобы делали с обр связью.

Сергей0308
31.01.2022, 20:03
В ST не видел, чтобы делали с обр связью.

Вероятно ST-шникам не до этого(не до обратных связей), они, буквально все плачут, что-то не по ихнему сделали(они не так хотели) и слёзы глаза застилают!

Alexandr21
31.01.2022, 20:19
Дефектов в самом деле много. Плохо, что нельзя вставить в макрос, нет глоб переменных. Но что есть, тоже много дает, если освоить.

Cheon
16.02.2022, 15:15
Функция преобразования для датчика температуры KTY81-110, интерполяция на основе данных даташита по средним (нормальным) значениям:

function KTY81_110_To_Temp: real; //Преобразование сопротивления датчика KTY81_110 в градусы
var_input //объявление входных переменных
resist : real; //входное сопротивление
end_var

var //коэффициенты кубического полинома
k1 : real := 1.76498e-8;
k2 : real := 0.0000953607;
k3 : real := 0.265696;
k4 : real := 162.834;
end_var

KTY81_110_To_Temp := k1*resist*resist*resist - k2*resist*resist + k3*resist - k4;

end_function

bayk
16.02.2022, 20:47
все классно, но полиномиальная функция постоянно меняет знаки между степенным множителями, потому универсальную функцию не сделать.

BETEP
17.02.2022, 08:48
Да нормально всё с полиномом.
Взял циферки из даташита, скопипастил в эксель, и он мне любезно полином подобрал.
Если полином подобрать не под полный диапазон из даташита, а только под тот, с которым собираешься работать, то точность будет заметно выше.

-------------
Оказалось что это сообщение было юбилейным, 1000. Какой же я старый...

Cheon
17.02.2022, 15:55
Может кому пригодится в помощь: файл excel, подготавливает ссылки с данными на сайт WolframAlpha, для нескольких типов аппроксимации

BETEP
18.02.2022, 22:11
Прикольно, я и не подозревал что есть такой сайт как WolframAlpha, а Вы похоже не знали про фичу экселя.
Пробовал на этом сайте найти как составить запрос на подбор функции по таблице, сразу не осилил, потом поленился, т.е. не смог.
А ваш файл ссылку на моём компе не генерит.

Cheon
22.02.2022, 17:55
Файл подправил для Excel, теперь работает

X200881
29.04.2022, 13:41
Здравствуйте. Как добавит второй выход для функции, как это записать? С входными ясно.

function Out_1: bool;
var_input //объявление входных переменных
in_1: udnt;
in_2: real;
end_var

var //

end_var

end_function

melky
29.04.2022, 14:03
X200881 это функции, а не блоки, выход может быть только один.

petera
29.04.2022, 14:04
Здравствуйте. Как добавит второй выход для функции, как это записать? С входными ясно.

function Out_1: bool;
var_input //объявление входных переменных
in_1: udnt;
in_2: real;
end_var

var //

end_var

end_function

Функция!!
Выходом является значение самой функции, о каком втором выходе у функции можно рассуждать?

Филоненко Владислав
29.04.2022, 14:16
У функций 2-х выходов не бывает. Можно передавать несколько значений либо запаковывая их в выходное значение, либо через глобальные переменные. В некоторых языках есть ещё указатели, но не с МЭК ST.

X200881
29.04.2022, 14:17
Ну 2 функции в одной? На IL функции все делается.

kondor3000
29.04.2022, 15:23
Ну 2 функции в одной? На IL функции все делается.

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

ВладОвен
02.06.2022, 09:46
А вот так можно использовать функцию в ST?
Тут применены два оператора return внутри условия if.


FUNCTION myFunc: BOOL

VAR
a, b : INT;
END_VAR

...
... Некие вычисления а и b
...

IF a > b THEN myFunc:=FALSE; RETURN; END_IF
IF a < b THEN myFunc:=FALSE; RETURN; END_IF

myFunc:=TRUE; // Если условия не сработали, то возвращает TRUE

(конец функции. Тут автоматический выход из неё)


Эта функция возвращает false, если a и b неравны.
Она возвращает true, если a и b равны.

Правильна ли такая конструкция?

Филоненко Владислав
02.06.2022, 10:18
А вот так можно использовать функцию в ST?
Тут применены два оператора return внутри условия if.


FUNCTION myFunc: BOOL

VAR
a, b : INT;
END_VAR

...
... Некие вычисления а и b
...

IF a > b THEN myFunc:=FALSE; RETURN; END_IF
IF a < b THEN myFunc:=FALSE; RETURN; END_IF

myFunc:=TRUE; // Если условия не сработали, то возвращает TRUE

(конец функции. Тут автоматический выход из неё)


Эта функция возвращает false, если a и b неравны.
Она возвращает true, если a и b равны.

Правильна ли такая конструкция?

Да, вполне обычное применение, на 2-х return можно и не останавливатся.

Dimensy
02.06.2022, 10:42
А вот так можно использовать функцию в ST?
Тут применены два оператора return внутри условия if.


FUNCTION myFunc: BOOL

VAR
a, b : INT;
END_VAR

...
... Некие вычисления а и b
...

IF a > b THEN myFunc:=FALSE; RETURN; END_IF
IF a < b THEN myFunc:=FALSE; RETURN; END_IF

myFunc:=TRUE; // Если условия не сработали, то возвращает TRUE

(конец функции. Тут автоматический выход из неё)


Эта функция возвращает false, если a и b неравны.
Она возвращает true, если a и b равны.

Правильна ли такая конструкция?

а не проще написать так myFunc := (a = b)

Филоненко Владислав
02.06.2022, 11:08
а не проще написать так myFunc := (a = b)

ну это ж просто пример 2-х return

B.S.V
29.06.2022, 15:50
День добрый!
А почему функцию на ST нельзя вставить в макрос ? Или надо какой то шаманский обряд совершить для этого ?
Заранее благодарен.

kondor3000
29.06.2022, 16:18
День добрый!
А почему функцию на ST нельзя вставить в макрос ? Или надо какой то шаманский обряд совершить для этого ?
Заранее благодарен.

На данном этапе так сделали, заведите выход функции как переменную на вход макроса и используйте.

B.S.V
29.06.2022, 16:24
То есть надо выйти из макроса для использования функции и опять зайти в макрос... Прикольно...
Понял, Благодарю за ответ.

keysansa
29.06.2022, 22:22
ну это ж просто пример 2-х return

Так напишите лучший пример, ближе к реальным задачам.
Зы. Прошу прощения, не вам мой ответ.

Валенок
30.06.2022, 08:21
Нормальный пример с несколькими точками выхода

Сема
01.07.2022, 09:18
Добрый день, скажите, а ФБ когда можно будет писать в OL?? Или только функции и останутся?

Сергей0308
01.07.2022, 09:22
Добрый день, скажите, а ФБ когда можно будет писать в OL?? Или только функции и останутся?

Так, вроде представители Овена уже писали что - никогда!

IVM
01.07.2022, 12:35
Так, вроде представители Овена уже писали что - никогда!

Никогда не говори никогда. ;)

Ollema
01.07.2022, 21:05
Жизнь есть жизнь!

1exan
14.08.2022, 12:24
В качестве примера реализации третьего логического значения UNKNOWN приведу программу "Диагностика+", в которой разработали свой язык для описания правил диагностики.
Мне очень понравилась идея, что если что то неизвестно, то я об этом не беспокоюсь.

К сообщению прикрепляю описание системы, думаю в нём всё подробно описано.

"...В Z+ применяется трёхзначная логика, в которой логические переменные могут принимать не два, а четыре возможных значения: TRUE, FALSE и UNKNOWN..." - Л-логика!

А Codesys например делает так - если входной параметр ФУНКЦИИ не определён - выдаётся ошибка при компиляции. И тоже не надо беспокоиться.

stalke-z
01.09.2022, 11:59
Здравствуйте. возникла такая проблема, при выполнении функции на языке ST не происходит запоминания состояния локальных переменных в функции.

capzap
01.09.2022, 12:05
Здравствуйте. возникла такая проблема, при выполнении функции на языке ST не происходит запоминания состояния локальных переменных в функции.

62429 это общепринятое правило

kondor3000
01.09.2022, 12:27
Здравствуйте. возникла такая проблема, при выполнении функции на языке ST не происходит запоминания состояния локальных переменных в функции.

Что за формат такой в вашем вложении testFbST.owle ?
А функцию на ST выложить вообще текстом?

Удалил е в конце, файл не открывается, ошибка, если что у меня последняя версия 300.

Dimensy
01.09.2022, 12:59
Что за формат такой в вашем вложении testFbST.owle ?

если не ошибаюсь, то это новый лоджик, отсюда https://owen.ru/forum/showthread.php?t=36549

kondor3000
01.09.2022, 13:23
Здравствуйте. возникла такая проблема, при выполнении функции на языке ST не происходит запоминания состояния локальных переменных в функции.

Всё открыл новым Лоджиком 2.0, если правильно понял работу функции, нужно сделать обратную связь по часам с задержкой на цикл62431
И добавил R_триггер на вход тактов

stalke-z
01.09.2022, 15:23
Всё открыл новым Лоджиком 2.0, если правильно понял работу функции, нужно сделать обратную связь по часам с задержкой на цикл62431
И добавил R_триггер на вход тактов

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

kondor3000
01.09.2022, 18:03
не совсем. в функции реализован триггер регистрирующий возрастающий фронт, для этого использована локальная переменная но так как функция не запоминает состояние своих переменных каждый цикл опроса функции происходит инкремент переменной пока на входе true.
(как сделать с костылями я придумал :) хотелось бы чтоб без костылей работало)

Пока не сделают ФБ, на функциях только с костылями.

Andrey G
09.09.2022, 17:17
Добрый день.


Поддерживаются ли константы? В редакторе constant подсвечивается как ключевое слово, но использование вызывает ошибку
какой размер стека у функции? объявил 6 массивов булеанов по 18 элементов, и один массив интеджеров на 18 элементов. При запуске симуляции ошибка - "Превышен максимальный размер стека"

EFrol
09.09.2022, 17:50
Константы точно не поддерживаются.
Похоже, что есть ограничение на размер памяти для локальных переменных.

Andrey G
09.09.2022, 18:30
Спасибо.

В справке есть следующий текст:
ПРИМЕЧАНИЕ
При записи выражений допустимо использовать переменные (локальные и глобальные) и константы.

что в этом случае подразумевается под глобальными переменными? VAR_GLOBAL как ключевое слово не распознается

capzap
09.09.2022, 21:02
Функция не имеет памяти, поэтому инициализированая переменная неким значением это и есть константа, если её не записывать

Andrey G
10.09.2022, 15:01
спасибо за ответ.
к сожалению, переменная даже если ее не записывать не превратиться в константу. Так как все равно будет размещена в стеке.
Глобальные константы в стек не помещаются (по крайней мере обычно не помещаются), соответственно их использование могло бы помочь обойти проблему с ограниченным размером стека.

Andrey G
18.09.2022, 00:02
Добрый день,

Приведенный ниже код почему то возвращает 0 или 1 в зависимости от значения inputVariable
Если убрать оба exit; то возвращает как ожидается - 55 всегда
Такое ощущение что exit; неправильно работает внутри case of
может кто сталкивался?
версия 1.23.301.0


function function1: udint;
var_input
inputVariable : bool;
end_var
var
localVariable : udint := 0;
end_var
repeat

case bool_to_udint(inputVariable) of
0:
localVariable := 55;
exit;
1:
localVariable := 55;
exit;
end_case
until true
end_repeat

function1 := localVariable;

end_function

Andrey G
18.09.2022, 21:47
Этот код сам по себе не логичен, зачем здесь бесконечный цикл? Не удивительно что компилятор работает не корректно

Я собственно про некорректность работы компилятора и пишу.
Если компилятор код скомпилировал, то он должен работать в соответствии с документацией. Если не может скомпилировать - должен выдать ошибку.
Здесь налицо непредсказуемое поведение которое кому-нибудь точно потратит много времени
Я понимаю что у нас тут не gcc и никто ничего не вылизывал годами. Нашел ошибку, поделился с сообществом и разработчиками.
Пример написан для демонстрации неправильной работы компилятора, чтобы не утруждать Вас чтением 200+ строк кода.
Про логичность я кажется ничего не спрашивал.

Денисов Максим Сергеевич
19.09.2022, 09:35
Я собственно про некорректность работы компилятора и пишу.
Если компилятор код скомпилировал, то он должен работать в соответствии с документацией. Если не может скомпилировать - должен выдать ошибку.
Здесь налицо непредсказуемое поведение которое кому-нибудь точно потратит много времени
Я понимаю что у нас тут не gcc и никто ничего не вылизывал годами. Нашел ошибку, поделился с сообществом и разработчиками.
Пример написан для демонстрации неправильной работы компилятора, чтобы не утруждать Вас чтением 200+ строк кода.
Про логичность я кажется ничего не спрашивал.

Приложите, пожалуйста, проект здесь или если будет удобнее можете направить на почту.

Andrey G
19.09.2022, 12:20
ну тут вобщем то не к exit больше вопросов, а к самому репиту, любое его использование не дает правильный результат, я например добился того что если ни чего после репита не стоит, то функция возвращает ноль, если есть некая строчка, то единицу

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

Cs-Cs
19.09.2022, 12:28
Бесконечный репит использую для переключения нескольких состояний автомата за один скан, попробую по-другому сделать раз репит ненадежно работает
Не надо так! Надо переключать всё за один цикл программы ПРки, а не цикл в цикле.

Andrey G
19.09.2022, 12:59
Так автомат внутри ST функции. В чем может быть проблема? (кроме полного отсутствия отладки)

Andrey G
20.09.2022, 13:30
Вы совершенно правильно пишете. Функция исполняется каждый цикл, в течение исполнения состояния входов гарантировано не меняются. На следующий скан все повторяется.
Непонятно как из этого следует вывод что внутри функции нельзя несколько раз за один проход поменять состояние автомата описанного внутри функции?
Автомат это просто набор переходов между состояниями. Выход я записываю один раз (по-другому сделать и не получится) По сути это просто операции с локальными переменными.
Или проблема в том что используется цикл с нефиксированным количеством итераций? Ну так вроде никаких ограничений не наложено в документации.

melky
20.09.2022, 13:43
Andrey G для простоты, расположите все элементы вашей функции на основной экран программы - сколько раз они будут выполнены?

Andrey G
20.09.2022, 14:39
Один раз за цикл ПР. Но в FBD нет циклов, я не понимаю к чему вы клоните

Andrey G
20.09.2022, 15:21
а для чего это делается? Каждое состояние автомата, должно выдавать некое задание для управления чем либо, здесь же в языках контроллеров и ПР выход будет иметь значение последнего в него записанного, остальные состояния для чего в таком случае, чем это выгоднее последовательных вычислений

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

Andrey G
20.09.2022, 15:23
может в документации что найдете 62731

Вы намекаете что каждая итерация цикла (например того же repeat) выполняется один цикл ПР?

melky
20.09.2022, 16:33
Andrey G я клоню к тому, что функция, не имеющая памяти так же выполнится за один цикл один раз, как будто вы расположили ее потроха на основном экране.
Вот FBD можно заставить производить вычисления 1-но вычисление за один цикл и накапливать данные, и то придется попотеть... Например вам необходимо выполнить 10 вычислений в программе, но выполняться оно будет 10 циклов...

Andrey G
20.09.2022, 16:55
Да, выполнится один раз за один скан. Если в функции есть цикл, он так же выполнится весь в течение одного скана ПР.
Промежуточные результаты его работы получить нельзя. Зато можно вычислить за один скан то, на что в FBD понадобилось бы несколько.

Andrey G
20.09.2022, 16:57
Добрый день,

Приведенный ниже код почему то возвращает 0 или 1 в зависимости от значения inputVariable
Если убрать оба exit; то возвращает как ожидается - 55 всегда
Такое ощущение что exit; неправильно работает внутри case of
может кто сталкивался?
версия 1.23.301.0


function function1: udint;
var_input
inputVariable : bool;
end_var
var
localVariable : udint := 0;
end_var
repeat

case bool_to_udint(inputVariable) of
0:
localVariable := 55;
exit;
1:
localVariable := 55;
exit;
end_case
until true
end_repeat

function1 := localVariable;

end_function

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

melky
20.09.2022, 17:14
Зато можно вычислить за один скан то, на что в FBD понадобилось бы несколько.

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

могу понять конечно, если у вас цикл с каким-то приращением и расчет конечной переменной связан с этим, а еще что тут можно прикрутить ?

Валенок
20.09.2022, 18:45
Поддержка отписала что проблема действительно в компиляторе и ее когда-нибудь починят.
TRUE для repeat это выход из цикла (это про то, что тут нет бесконечных циклов до которых доколебались)

А так, видимо exit здесь мастерили сишники)) Описанные симптомы располагают

Andrey G
21.09.2022, 11:52
Не совсем понимаю, что вы собрались вычислять за один скан при условии что входы у вас неизменны в течении всего цикла ? какой в этом попс?

могу понять конечно, если у вас цикл с каким-то приращением и расчет конечной переменной связан с этим, а еще что тут можно прикрутить ?

Задачи связанные с сортировкой и поиском, например. Обработка массива. Вычисления до выполнения условия. Про переключение состояний автомата писал уже.
У Вас довольно общий вопрос - зачем вообще нужны циклы если если вся программа и так цикл.
Ничего принципиально нового Вы на ПР конечно не сделаете ST функцией, и в ПЛК он не превратиться. Это просто дополнительный инструмент который может Вам пригодиться.

Andrey G
21.09.2022, 11:59
TRUE для repeat это выход из цикла (это про то, что тут нет бесконечных циклов до которых доколебались)

А так, видимо exit здесь мастерили сишники)) Описанные симптомы располагают

Респект вам что код посмотрели ) Я так то про exit спрашивал но почему то дискуссия в сторону циклов ушла и советов как мне писать автомат.

repeat с безусловным выходом использую чтобы выскочить из case вызвав там exit. Я вообще думал это стандартная конструкция для ST, странно что такой ажиотаж вокруг нее.

melky
21.09.2022, 12:18
Andrey G я плохо знаю ST чтобы рассуждать о вашем коде. насколько понимаю exit это то, что в других break, и если есть совпадение то просто выход, не зачем искать что-то дальше....
на счет repeat вообще не в курсе что это :) разве в case есть циклы ? , хм, ну да, Валенок прав, зачем тулить цикл, который выйдет сразу по окончании кода ?

1exan
21.09.2022, 12:47
Респект вам что код посмотрели ) Я так то про exit спрашивал но почему то дискуссия в сторону циклов ушла и советов как мне писать автомат.

repeat с безусловным выходом использую чтобы выскочить из case вызвав там exit. Я вообще думал это стандартная конструкция для ST, странно что такой ажиотаж вокруг нее.

оператор CASE в ST:

"CASE
Аналогичен switch в C. Альтернативные ветки не имеют закрывающей программной скобки
и не могут выполняться одна за другой. Соответственно оператор break не имеет смысла и
отсутствует. "

в справке ОЛ по CASE тоже ни exit ни repeat не упоминаются

Andrey G
21.09.2022, 13:01
Andrey G я плохо знаю ST чтобы рассуждать о вашем коде. насколько понимаю exit это то, что в других break, и если есть совпадение то просто выход, не зачем искать что-то дальше....
на счет repeat вообще не в курсе что это :) разве в case есть циклы ? , хм, ну да, Валенок прав, зачем тулить цикл, который выйдет сразу по окончании кода ?

Совершенно верно, exit - просто выход из цикла. Выполнилось условие - вызвал exit и перешел сразу к инструкции после end_repeat. Просто exit не работал (по крайней мере в указаной версии OL)
case как и другие конструкции языка можно помещать в цикл.
repeat с безусловным выходом использую чтобы выскочить из case вызвав там exit. Из case в ST по другому по-моему выйти нельзя.

melky
21.09.2022, 13:03
а я думал exit относится к case, но суть в другом, case это набор констант в некотором роде, зачем вы его в цикл, даже если у вас единственная итерация ?

з.ы. я не знаю, как там в C, но в C# вроде из switch case все таки выходят при найденном при помощи break. Может конечно еще какие реализации существуют, надо посмотреть...

Andrey G
21.09.2022, 13:38
оператор CASE в ST:

"CASE
Аналогичен switch в C. Альтернативные ветки не имеют закрывающей программной скобки
и не могут выполняться одна за другой. Соответственно оператор break не имеет смысла и
отсутствует. "

в справке ОЛ по CASE тоже ни exit ни repeat не упоминаются

break; в СИ так же удобно использовать если вам не нужно выполнять всю ветку.
например если у вас в ветке несколько проверок перед выполнением остального кода. Тогда у Вас есть вариант поместить код который должен выполнится под условие


case 1:
if (условие)
{
код;
}
break;

Когда условий много, вложенность if становится большой.


case 1:
if (условие1)
{
if (условие2)
{
if (условие3)
{
код;
}
}
}
break;


В таком случае бывает удобно записать так:

case 1:
if (!условие1) break;
if (!условие2) break;
if (!условие3) break;

код;
break;

Andrey G
21.09.2022, 13:54
а я думал exit относится к case, но суть в другом, case это набор констант в некотором роде, зачем вы его в цикл, даже если у вас единственная итерация ?

з.ы. я не знаю, как там в C, но в C# вроде из switch case все таки выходят при найденном при помощи break. Может конечно еще какие реализации существуют, надо посмотреть...

Так вы сами и ответили на свой вопрос )
В Си есть break; В ST аналогичной команды нет. Если поместить case в repeat - exit будет выполнять ту же функцию что и break в Си

Andrey G
21.09.2022, 14:18
а с чего Вы решили что ST это Си-подобный язык?
62739

я такого не писал, Вам показалось

Andrey G
21.09.2022, 14:41
а зачем exit везде наставлены, потому что а так хотелось выйти из кейса?

ну да, хотелось выйти из кейса. Я с самого начала об этом и пишу.

Andrey G
21.09.2022, 14:57
так на скрине же пишеться о том что break не нужен, программа сама выйдет из кейса не выполнив нижеследующие, я об этом с самого начала не пишу, но такой код бесмсленный об этом упоминал и по поводу Вашего радостного согласия с Валенком, прочитайте справку из ОЛ, бесконечный это цикл или не очень 62740

Да, там ошибка в справке.
попробуйте такую функцию на холст кинуть. Будет ошибка "программа зашла в бесконечный цикл"

function function1: bool;
var_input
inputVariable : bool;
end_var
repeat

until false
end_repeat
function1 := true;
end_function

Я Вас использовать exit таким образом не агитирую. Обходитесь без него - прекрасно. Зачем и в каких случаях я им пользуюсь написал, так как были заданы такие вопросы

Andrey G
21.09.2022, 15:44
я за документацию не отвечаю, я ей обычно верю. Хорошо ошибка, тогда все работает и exit и тот способ который я бы использовал вместо констант

У Вас case 2: никогда не выполняется.
Это так же видно по тому что блок на выходе всегда дает 1. Если бы цикл выполнился дважды, было бы 2

repeat
count := count + 1;
case count of
2:
exit;
1:
foo := true; // в первый проход цикла попадаем сюда
else
end_case;
until foo // условие выполнилось, выходим из цикла


В остальном я сейчас так же делаю, поскольку exit не работает.
exit не работает, по крайней мере после выполнения кода ниже count = 2. Правда с поддержки написали что вроде бы починили в последней версии.

repeat
count := count + 1;
case count of
2:
count := 100;
foo := true;
exit;
1:
foo := false;
else
end_case;
until foo
end_repeat

Andrey G
21.09.2022, 16:04
в эмуляции отредактировать с 1 на 3 и проверить необходмио 10 секунд, считаете это проблема

попробуйте перед exit присвоение сделать, как ниже
Блок будет выдавать на выходе 2 вместо 100


repeat
count := count + 1;
case count of
2:
count := 100;
exit;
3:
foo := true;
else
end_case;
until foo
end_repeat

Andrey G
21.09.2022, 16:21
ну а я о чем говорил, exit тут не причем, с самим repeat что то не так

Это пусть разработчики разбираются, с exit, repeat или case у них проблема. Или со всем сразу )
Мне кажется что exit неправильно работает если вызывается внутри case, если его не использовать то отлично все работает

В функции вызывается exit, и она возвращает 2 вместо 105

repeat
count := count + 1;
case count of
1:
foo := false;
2:
count := 105;
foo := true;
exit;
else
end_case;
until foo
end_repeat
function1 := count;

та же функция, но вызов exit закомментирован. Работает правильно. Возвращает 105

repeat
count := count + 1;
case count of
1:
foo := false;
2:
count := 105;
foo := true;
//exit;
else
end_case;
until foo
end_repeat
function1 := count;

Andrey G
21.09.2022, 16:47
Ну раз верно работает теперь уберите все что относится к репит и убедитесь что он лишний

Если убрать repeat то функция будет выдавать 1, а не 105

melky
21.09.2022, 17:07
Ну так exit не относится к case, чего вы от него хотите? мозги ожидают либо следующего case, если вдруг не совпало предыдущее, а ему НА на выход иди :)

пытаюсь переварить код со своей колокольни, а чего там еще else делает? он от кого там? :)

Andrey G
21.09.2022, 17:27
Ну так exit не относится к case, чего вы от него хотите? мозги ожидают либо следующего case, если вдруг не совпало предыдущее, а ему НА на выход иди :)

пытаюсь переварить код со своей колокольни, а чего там еще else делает? он от кого там? :)

else в данном примере не нужен, просто у capzap был, я не стал убирать.
ограничений на использование exit не накладывается. Главное чтобы внутри цикла был. По крайней мере в в реализации CodeSys работает.
Может есть реализации где во вложенных операторах ветвления нельзя exit вызывать. Но в этом случае компилятор должен ошибку выдать, хотя бы.

Andrey G
21.09.2022, 17:37
Ну ведь потому что заходя в кейс счётчик имеет значение 1, а в единице ни каких присвоений нет, так что все верно

Верно. А в кейс 2, где есть присваивание он никогда не попадает, потому что нет repeat.
То есть repeat там не был лишним, если мы по прежнему ожидаем 105 на выходе

Andrey G
21.09.2022, 18:41
Для чего он?
Чтоб в одном блоке что то посчитать, перейти в другой опять что то посчитать, допустим перейти в третий и ещё продолжить вычисления и дать результат на выход При всех этих шагах входные условия не изменяются, зачем эта карусель?
Надеюсь хоть идемпотентность функции не нарушается иначе не место таким программистами в промавтоматике

Не знаю для чего. Пример то Вы написали

SiriusMan
18.11.2022, 14:00
Добрый день. подскажите как в Функции на ST в Owen Logic работать с датами и временем

kondor3000
18.11.2022, 15:00
Добрый день. подскажите как в Функции на ST в Owen Logic работать с датами и временем

В Лоджике нет переменных времени и даты, кроме Unix. Соответственно работать со временем в ST пока невозможно.
Есть макросы для работы со временем, только в целочисленном виде, смотри скрин.
Вы бы лучше написали, что вам надо конкретно. 63939
Например здесь (6-7 стр.) есть пример автомата состояний на ST, с внешними таймерами https://owen.ru/forum/showthread.php?t=35489&page=6#60
Есть макросы подсчёта времени наработки, недельный таймер включения, выключения по времени и т. д.

Сергей0308
18.11.2022, 20:19
В Лоджике нет переменных времени и даты, кроме Unix. Соответственно работать со временем в ST пока невозможно.
Есть макросы для работы со временем, только в целочисленном виде, смотри скрин.
Вы бы лучше написали, что вам надо конкретно. 63939
Например здесь (6-7 стр.) есть пример автомата состояний на ST, с внешними таймерами https://owen.ru/forum/showthread.php?t=35489&page=6#60
Есть макросы подсчёта времени наработки, недельный таймер включения, выключения по времени и т. д.

Куда же они делись, вроде как давным-давно добавили:

63942

Dimensy
18.11.2022, 20:50
Куда же они делись, вроде как давным-давно добавили:

Имеется ввиду, что в ST Лоджика нет переменных типа Data, Time и DataTime

Сергей0308
18.11.2022, 21:05
Имеется ввиду, что в ST Лоджика нет переменных типа Data, Time и DataTime

Как всё сложно! Так и в макросах их нет, в смысле нельзя добавить, но это ещё никому не помешало использовать макросы для работы со временем, проблема в чём, ввести переменную через вход?

ПавелП
26.11.2022, 17:28
Как работать с битами, и другими системами счисления???
Есть какие примеры?
ST для ПРxxx.

kondor3000
26.11.2022, 18:11
Как работать с битами, и другими системами счисления???
Есть какие примеры?
ST для ПРxxx.

А что конкретно интересует?
Выделять биты из маски упаковывать в маску, так же через точку как в обычном ST.
b0:=Mask.0;
b1:=Mask.1; и т. д.
AND, OR, NOT работают как обычно тоже.

В этой теме на разных страницах порядка 10 примеров есть.
Тут выкладывал пример автомата состояний на ST https://owen.ru/forum/showthread.php?t=12691&page=64#635
Пример сдвигового регистра https://owen.ru/forum/showthread.php?t=26216&page=260#2598

ПавелП
26.11.2022, 21:23
Выделять биты из маски упаковывать в маску, так же через точку как в обычном ST.
b0:=Mask.0;
b1:=Mask.1; и т. д. В хелпе про биты ничего нет.
Спасибо большое! :)
Примеры толковые.

>> "и другими системами счисления???"

не поддерживаются?

>> В этой теме на разных страницах порядка 10 примеров есть.

В примерах не написано же, что есть сегменты кода на ST. :(

kondor3000
28.11.2022, 14:18
В примерах не написано же, что есть сегменты кода на ST. :(
[/COLOR]
Тема в которой вы пишите, называется "Создать функцию на ST", об этой теме и пишу, что около 10 примеров есть,
тут все примеры на разных страницах на языке ST и текстом и некоторые файлами.
Например на 4 и 5 стр., petera выложил первые 2 свои функции, они текстовые, достаточно скопировать текст к себе в проект.
https://owen.ru/forum/showthread.php?t=35489&page=4#38
https://owen.ru/forum/showthread.php?t=35489&page=5#41

ПавелП
28.11.2022, 19:33
Тема в которой вы пишите, называется "Создать функцию на ST", об этой теме и пишу, что около 10 примеров есть, тут все примеры на разных страницах на языке ST Всё верно, я не эту тему имел в виду, а вообще! :)
Вот из вашего примера: MM: ARRAY [1..12] OF udint := [5,1,1,4,6,2,4,0,3,5,1,3];
Я могу только облизнуться, у меня ПР200, и там ТАКОГО нет...

Не полная реализация версии ST, только как функция... :(

Мне уже удалось высунуть через узкое место руки - единственную переменную udint 4 байта для обратной связи и управления. :cool:
И разобраться с особенностями такого взаимодействия методом тыка...
Так что уже пишу "полноценную" программу управления на ST
с учётом специфики железяки. ;)

P.S. Вспоминаются времена, когда ПК были громадными, и с однокристалками очень дохленькими!

petera
28.11.2022, 21:21
Всё верно, я не эту тему имел в виду, а вообще! :)
Вот из вашего примера: MM: ARRAY [1..12] OF udint := [5,1,1,4,6,2,4,0,3,5,1,3];
Я могу только облизнуться, у меня ПР200, и там ТАКОГО нет...



Все там есть!
Это пример мой, у меня ПР200 и там такое есть

https://owen.ru/forum/attachment.php?attachmentid=64122&d=1669660163

ПавелП
28.11.2022, 21:45
https://owen.ru/forum/image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQUAAADsCAYAAAB 9qrNvAAATs0lEQVR4nO2dS5LcNhKGkxNzGLV0iKoIW9fwfnQAx 3jVrJUcPoC89wE0B5AdwT6EJF9DdoS85CwodoEkMpF48AHm/ykU3UUSQJJFJDNB4O m7/ueCnO73ejx8bF0tQCADfhX6Qpvtxtdr1e63W6lqwYAbMC/S1bWNA211NKlvxCRP2JwnQWiCQCOR1Gn4HK5XKjruufPozMYHU FMJNE0jXf7CpkPMMD8fhrvI 4 c4 xwGpOgYgmacQ0KmiIqH3 EqQL3jSNd7/0BQLA4bufxm3udu6 s8DEKXz4/Q/6/Okje/DDy1f0 vvv1JVfLhe6Xq9OxNAQUf/t/436vqdbc8v AlwHofli3e3c71z983bGMpyDk2xzt fWI23THsNdu1LnqC0TskM61sVqp85l4hQ f/pI/3nzhj3413fvopzCkvFLGiKFEoRulNR65kg3n9bJzD9zT6zYekr jc4K551j6fKTvgDsHDjiPKcXfPsiMX5T SxifUPP/7v69KWUDV8 ZzrF0XSltc/cSGNjYKbiRQkSpbzfRmPdxIT6XL4a /BryR k83NCeOxfNMaF9OXbHfC h78xX37yzS7j3kXtdwMBioPHvv77QDz9 WBz42y vCzQ3HVNQl1LcqFxoqglT3Zz iOSExjntlECbPvjK PZp07wYhwKmeN8 5DqAW3Ojx943B2H4MsYJTiU4wpdcygZNPXs91da6zqXO5wj3wV lYOIWvX/9Jrmx84rbUeh3D Hryer3S5XJR1al5MqSMcnP1pNxY3Mh8yLaUerhwV2N/6BjtdY45x9TzkezIwdcenMmU4vMUXMcw0nUddV0X5Qzc kLbY29yrqy2Hi4FSbUhdvvav3N2lDqXVDtS98XYFXPMWZk4hYe Xr j9 /fswQ8vX6kqffbGDQ3OoR22d9/ AQCOS9Ov6BLxrhiA lh1mjM6OgD1sfE8BQDA0YFTAABMWDV9KIVmmTW0GQAoQxVOgUj q9A09PXWQgAOgEJWlDw3d101MF1c9Pj5CAg6AAlQTKQz03t/dKdNt20ZNFeYWV01axVsUYIjqIoWmocl/ovuqN1f ja2huavs Ka8zvfDIQBrVOYUeup7mvy/E54oJS259R3rcxgxv3OfNct7ufZTlhtL gHSdu5zzDliWXJ9VOYUlpHC/Z4rqwFQYq19KAoJLe/lFu/Mt2vq9UU9WntyzhHUR0VjCoMWQ9 PmgzrcaSb Ui2ABtU5BRG8Qzf6r2tbQkzPjFDoXZKvUTyEvGU mL3jft9S6eRMtRNZekDUd83zLjCcW7EkGZBTngdSiti65XKSfV ptBsQ5dRJRU5h1Bfsk8cUpLcNe6B5oubm THnV IJDwWk qkufVjeb3FjDCGlIK2SkO/38VgpStAoMXEqR26bGvWjcZs0GBijDDW3EZyTiiIFouVsRiJKU IgOhdmacJoLu0MKQNoQPzacj7FZW477nLoP1EE1kcLT0xMRdUT k/nTptjUIgJOyqvJSKWJz3QpOCYDDUkWkgE4OwHZUNqYAAFgbOAU AwIQq0gcoLwGwHVU4BSIoLwGwFZWlD1BeAmBtqokUBtKVl6TXm ni7AcCd6iKFVOWl cw9rPkHwE9lTiFPeUkipDTEqQlJQilSW1spIYXsK720G9RPZU5 hO WlOaUji7WUkFLscB0EIidQ0ZjCdspLe4EOCY5ARU5hG UlTjEpVOZuS54xqUpI2n3cCktECWCksvRhXeWl1I5RKuQPiZ6W 2MepPW VroDjU5FTyFdeOgJax4MOCvaiuvQhV3lJbCExfNamDzFKSCWf3 CElKfc1LdIIUFGkQFRSeSm0LUZpSKPAxB3PKSHF2pBqH5SSwJx qIgUoLwGwDVBeAgBMqCJSQCcHYDsqG1MAAKwNnAIAYMLhnQI0E gDYlkM7hdvtRtfrFY4BgA057EBj0zTUUkuX/kJE5JVbc50FpNgAKMNhnYLL5XKZCKiMzmB0BNpIYj5bj/t7jQBYpgqnQESTNGIaFTRE1EZ3cEznBcDPak7hw 9/0OdPH9n9Dy9f0evvv1PXd7lc6Hq9OhHDuOahJ6Ib9X1Pt aW1dm5NQK CEOKODiRlvlqRPd4X/3udu73Uvuka8Gdm6aumHPw1Qu2ZzWn8PnTR/rPmzfs/l/fvYtyCkvcNQ9tVEnfDRzTYbhy7sImTTspbcSQo7/g67Cp10hTf4l6QRkO/fZBZirxri614pJkzY0siZwQHbtDrGXXUc/XKhU7hfjVkUT3VYOxzoETVF2bUk/jmDrH68Od77jdFwWFrpGUZuxxfcGSVQca//7rC/3w44fF9t9 eV2g9umYwtpw e8W7cY6hhyHMG97LMNt55Zwc 34zkcaXwDbs/rbh1wHcGtu9Nj75iAMN9E4wSmWNQRFNPXFdJa90Awartk22JdV ncLXr/8klx07SUut1zGMryev1ytdLpesNnwpRczTNOZ1aOzxcztHOPWm UL05nTp0jbTXb34 82sCx7Avh56n4DqGka7rqOu6JGfAPaGl/b7tWrWi2O1a27ineMi2VLtTrlGobEobYBtWcwoPL1/R /fvxf0anp8cDQ3OoR22d9/ nYWjpA4AVKG8RBSXa1ZySgAckkOnDy7o6ABsQ8XzFAAAawCnAA CYUE36UArNMmtoMwDLmHMKRFKnb jpqfMKugBgBcPpQ0PLvzg1DGY Pj5CAg6YxbBTGNdNkPNzmCHZNA21bat6DbrW7DvM6gN7YdgpNN 6/Xj1OeXbl39gaZqIpAJwBw06hp76nyf87eZ3c1UbwrVEIfQ6Vj9 nmbne3zdvh7NfYKi2v5spzv8e2ozmOO29NOe5cNOV8n1P3bYlh p7CMFO7fQf5EKW6h1fwYrgxRnvbDWHa 2Ghed8im2Dbm 7jOJC3t1rYTc5y7L6Ycdy5auySkMntGnybfPoxaDH0/ajIk1OBZ5YdFPUtqvw65i9pqxKhTGEVCfKsm9bXkePOc8QjXCX H1pD65YmzKaSOm/bWfmqn1r/X97z1WZTh9IOr7hhlX0H0ZXEgaYosVka5tmrZ8No03JpdTx7bh 1qlpP6edGFLqn6cPMWgc454YdQrjAFKfNKYgdSD3mKOQY4v2xt eOm SyddSgae9I33UJTKcPy/s8fYxh0ULPKyxJT0SfY HEYbinyrwezZMn9ukktSGdO2e79prkHhdbjjuX XbNGwh3DEqyZ2 MRgpEy9mMRFqFaO3gk 8Jq/ksvSHgOhJXD9cpYz6ntpFju7YdzXG59WvOcX4 XEqivSa z1thMlJ4enoioo6I3J8u3bYGAXAgqlFeKkVs/mfs8gBgL1JAJwdAxvCYAgDAB5wCAGCCufQByksAyJhzCkRQXgJ AwnD6AOUlAHyYjBQGeu/v7h rbdtWfFvBrQcAoGZMRwq dQ/jDDSN8pJ7PJwBOAuGncJ6ykvPtSiVfiTFH9/2UP3uPq58jOKP1I7mOHe75nrM7Qido8b 3H2WMOwUtlNe8i2Y4aILKB9B WhvjI4p5Csv1ULtaY12cRYoh1GnUEZ5qTRQPtqm3Fg2FElZjRY Mpw/5ykslgfIRlI OglGnkKe8tCXaGx/KR6AUptOHZT/TjTFIqkLPLfRxSkCxTyepfncfJw4C5SPeHusYjRSIcpWXuM7mO y5FCYhrV1M/ZyPnBDT2aKKVnPOV6tec4/x8uJREe018n61gMlKA8hIAPFBeCmDs8gBgL1JAJwdAxvCYAgDA B5wCAGCCufQByksAyJhzCkRQXgJAwnD6AOUlAHyYjBQG8pWXiC hpFh8AR8Z0pJCrvFRiTT8AR8OwU8hTXpJWNbrHnE1xqLS9seeR Wi6mTuvO3bBTWFd56bkmZl5/jYpDkqJTqr2x57HG ecswz4jRscUjq 8pF0UtRepi7jA8THqFI6hvGRFcUgTmfgiqZz6pP2 5drWUwYXw nD/spL3PJeidoUh0L2htIKqQy3TJsrFzpHpA8DRp1CvvKSlFcnWVS Z4tBR7C1RJyTYpphOH5b3QdwYgy8MLVXW3T8XAtlLcYizqYS92 muXe81BGKORAlGO8pJLKMwNfa5NcWgte6X2tdct9Rxjzt8CJiM FKC8BwAPlpQDGLg8A9iIFdHIAZAyPKQAAfMApRNA0DdHPD/gZ AnqxtyYQpby0s8P1Hz5X2GLTsbPD0jRKsfcmAJRuvJS89OfRP9 d17ba6d2NsEkInh9KGhWOUl3PBhmp/ 3NsEkInJSGEgXnnJjRQkB2G5Y8Bx1o9hp9AsVkkOi6KGbU9PTx MHQTTc8M0XpwZP57feKZqf/qQeKVbVGE4f4pWXYiOA0UH0b18snIXmM7fN53hS9kmftfaFjgP 1gUhhxuAcelpOfV5GChr6ty enYn7 /wYbRnf9vkx2n0x58DZN/ MSKF jEYKd UlPlrwlEoYK8gdX6htfAKRQv0YjRTSlJdSIoWgJd estrONB4X4yykukPtcvZx5RAp1I9RpzDAazQ25FspWXqeQkooH 0pFpDKhfaE0QVMnIoX6MZw xCsvpdzwuZ2kdCdbo9O6ddaW7oAlRiOFNOWllEjBDb3nHUZ6Cn NlfNvn4b12n8b2kH3z4xAp1I/JtQ/DFObRAfgcwTDd Xq9TufxR659SEkPqgdrH6rHZKSQqryEtQ9hECnUj7lIIUt5Cas kwyBSqB5zA40 cVPpv4u5VCABRAonoAd63r7oiQg/Qz9B1ZhLHwAAMuYGGrOUlwAwgDmnQJSuvASABcwNNN6JV14CwA ImI4WBeOUll/kfJY39m4hWcK T73VwzvXiXi 77Un1 /7StbuvVrulujWYjhR86x76b68iu67T1 T8uXUg0wuvfEvUp63T/c7G/9IclprsTq17xLBTiFdeiqFpmuf/8 2hz 42tx53n/tzfryvfu4YyR6trb7zBPVi2CksI4XQKklvLZ5Qb 7NtR3GLeemI2P9c6/vOz7FXm05ztazREi1nkdpu42OKdyVl2IcwKKWFZ Omi/ad8zoINyfR8K9ZiVsS833ubBb087R7c4dAzHqFNKUl5bH6gaG5 uwVaudECfObMSY6cQm1H8rrY uLsUW6PjXZneu0DKcPg/KSf1xh3U67V9id0pFDjqT0efgGyda4VqUdc612 zDqFNKUlzhSn5qihYr6pNdPa6cOR0xNQBlMpw/Lezp9jMHtiL5QO6YObZnY4 d2jnCDiDH17kUof b2x44plGZNuzGmkIxPeal39nVi6VCeqM1NQ59Tt2tt85XnHI1U TmNf6U4Xqi9n/xnsTsWkU0hVXqoFhPYgB3NLp7OUlwAwgLlIAZ0cABmjbx8AABx wCgCACebSBygvASBjzikQQXkJAAnD6QOUlwDwYTJSGIDy0pZoZ nhy8yvWVhoCU0xHClBe2gaNvoRvJaavLDfNd81FSNYw7BSgvBS yp4Tyku/pv8YCMlAOw04ByksxlFZeKqknAMpidEwByktHYr4q0/fZpfSqQDDFqFOA8lJKuRLKS1IbHFwkxu0HeRhOH6C8pGEt5SVp sFA6DqyPUacA5aVctPVLbxS4ejAQuS m04flPQ3lpfGzm9Pnkno9fGV95TGmUBajkQLRcjYj0VR5SYYb5 HN/94XDms hujXHh2zz2TmvS7I1dB6cndpyko1cvZinUAaTkQKUlwDggfJSA GOXBwB7kQI6OQAyhscUAAA 4BQAABPMpQ9QXgJAxpxTIILyEgAShtMHKC8B4MNkpDBQVnkptL 00mll80ixCKBYBDtORQinlpb2QZvFpNB18MwGx5gAYdgrrKi8R 6VWNNEpLse1ikRFIxbBTKKO8pG4tUq4Mc/jBXhgdUyijvLQ3qSsPfeVz6gHnwqhTKKO8pCWkVJxKbgeeL5 GQwBEptOHbZSXpM52pDz/SLaAfTHqFMoqLx2NNaISYAfT6UOu8pJm8FAjPrKG nKK2tEWMm7g BiNFIhKKC FVH 0ykWSA9EoE2lsLFkvODcmI4WzKy8BkAOUlwIYuzwA2IsU0MkBk DE8pgAA8AGnAACYYC59gPISADLmnAIRlJcAkDCcPkB5CQAfhp1 CT/fJSlPlpaZpqG1b8fWlNJtxbXxtSNs0tnK/ 8qU0HwAx8WwU6hfeWmEW4W5FvjbjefGsFM4r/LSWA86K0jBsFOoV3kJy5zBmph8 3AW5SWi5YpMSWW6ZJtzEJWcB6NO4RzKSzGUdBRwAOfGcPoA5SU AfBh1CvUrL3GpAoRSQC6m04czKy/lIo0bYEzh3BiNFIhqV16S9kntau3hzit0zqB TEYKUF4CgAfKSwGMXR4A7EUK6OQAyBgeUwAA IBTAABMMJc QHkJABlzToEIyksASBhOH6C8BIAPk5HCQO/9/Xq9Pv/eti37tkJajbjFGw7u1er8z8tLx4RmJmraGI/TlNOU9W0PHRNqT1MXuGM6Uqhdeck3s3DeQUKzD3PL zqmNAsylVDHL92eZQw7hXMrL50NrCjdDsNOoV7lJQDWxOiYwjm UlzSrFWPHDWLKa1WfSnG0laRnxahTOIfy0rxzx66yLLF/65AejmF9DKcP51Je2ivnRqpzPow6hfqVl/ZGUn2KISWCwqDjuphOH5b3Xd3KS746clWStlBZ8r3SjC0TA5Sj ZIxGCkS1Ky9ptsfa56uLK6 1S9vZpDQk5hqEtoWuCTAaKUB5CQAeKC8FMHZ5ALAXKaCTAyBje EwBAOADTgEAMAFOAQAwAU4BADDh/zhsj/FjtqGJAAAAAElFTkSuQmCC
Проверил - посыпаю голову пеплом.

Очень благодарен, что делаете работу за ОВЕН...

Я пробовал один из примеров из кодесус перенести в ОЛ - там сразу проверка подавилась.

Это хелп такой...

Не понимаю, зачем они скрывают возможности?

kondor3000
29.11.2022, 20:58
Не понимаю, зачем они скрывают возможности?
Никто не скрывает, в Лоджике действительно пока урезанный ST, но кое что тут есть. Самое плохое, то что сделали только функции, был бы ФБ с несколькими выходами, уже бы намного лучше стало. Всё это писали ещё на первых страницах темы, а воз и ныне там.

Обещали сделать не только ФБ, но и TIME(); переменные TIME, DWORD, INT, BYTE. Год прошёл!!!
Одни баги и недоделки. На новой ПР103 урезали Мастера до 64 переменных!!! Не зря я только на ПЛК работаю, нахрен эти ПР.

Эдуард_Н
30.11.2022, 19:07
ST вариант моего макроса PLA (кусочно-линейная аппроксимация) по мотивам https://owen.ru/forum/showthread.php?t=10555&p=220263&viewfull=1#post220263
график по 10 точкам, метод поиска делением интервала пополам, известный также как двоичный поиск или Дихотомия (https://ru.wikipedia.org/wiki/Дихотомия)

function PLA_ST: real; // (c) PeterA
var_input //объявление входных переменных
x1: real;
x2: real;
x3: real;
x4: real;
x5: real;
x6: real;
x7: real;
x8: real;
x9: real;
x10: real;
y1: real;
y2: real;
y3: real;
y4: real;
y5: real;
y6: real;
y7: real;
y8: real;
y9: real;
y10: real;
In: real;
end_var

var //объявление локальных переменных
a:udint; (*Начало интервала поиска*)
b: udint; (*Конец интервала поиска*)
N: udint; (*Число точек в графике*)
i: udint;
x: array [0..9] of real;
y: array [0..9] of real;
end_var

N:= 10;
x[0]:= x1;
x[1]:= x2;
x[2]:= x3;
x[3]:= x4;
x[4]:= x5;
x[5]:= x6;
x[6]:= x7;
x[7]:= x8;
x[8]:= x9;
x[9]:= x10;

y[0]:= y1;
y[1]:= y2;
y[2]:= y3;
y[3]:= y4;
y[4]:= y5;
y[5]:= y6;
y[6]:= y7;
y[7]:= y8;
y[8]:= y9;
y[9]:= y10;

(*Начальные значения интервала поиска*)
a:=0;
b:=N-1;

(*Обрезание графика для крайних точек*)
IF IN<=x[0] THEN
PLA_ST:=y1;
ELSIF IN>= x[N-1] THEN
PLA_ST:= y[N-1];
(*Теперь можно начать поиск*)
ELSE
WHILE (b-a) <> 1 DO (*В конце концов, входной сигнал ТОЧНО попадет между двумя соседними точками X(a) и Х(а+1)*)
i:=(a+b)/2; (*Делим интервал поиска пополам*)
IF IN=x[i+1] THEN (*Может нам повезло, и мы сразу нашли точку? *)
a:=i; b:=i+1; (*Бинго! прекращаем итераций, нечего в пустую молотить :) *)
(*мимо :( ,тогда посмотрим в какую половину интервала попали*)
ELSIF IN>x[i] THEN (*Если входной сигнал больше середины интервала поиска,*)
a:=i; (*то следующий поиск будем делать начиная от середины и до конца массива*)
ELSE (*А если входной сигнал меньше середины интервала поиска,*)
b:=i; (*то следующий поиск будем делать начиная от начала и до середины массива*)
END_IF
(*Таким образом на каждой итерации отбрасываем из поиска заведомо ненужную половину значений
две соседние координаты X(a) и Х(а+1), меду которыми попадает входной сигнал найдем очень быстро
для 8 точек графика нужно не более 3 итераций
при 9..16 точек в графике нужно не более 4 итераций
при 17..32 точек в графике нужно не более 5 итераций
при 33..64 точек в графике нужно не более 6 итераций
при 65..128 точек в графике нужно не более 7 итераций
инфа точная - 100% ;) *)
END_WHILE;
(*Теперь самое простое - сделать линейную аппроксимацию по двум точкам ;) *)
PLA_ST:= y[b] - (x[b] - IN) * (y[b] - y[a]) / (x[b] - x[a]);
END_IF


end_function

58155

А нельзя добавить вход "Количество точек", "Слева от первой точки – прямая параллельная оси Х" и "Справа от последней точки – прямая параллельная оси Х", такие как в блоке Graf_4pnt_v1.04 из онлайн библиотеки?

petera
01.12.2022, 11:52
А нельзя добавить вход "Количество точек", "Слева от первой точки – прямая параллельная оси Х" и "Справа от последней точки – прямая параллельная оси Х", такие как в блоке Graf_4pnt_v1.04 из онлайн библиотеки?

Вариант

function PLA_STmod: real; // (c) PeterA
var_input //объявление входных переменных
x1: real;
x2: real;
x3: real;
x4: real;
x5: real;
x6: real;
x7: real;
x8: real;
x9: real;
x10: real;
y1: real;
y2: real;
y3: real;
y4: real;
y5: real;
y6: real;
y7: real;
y8: real;
y9: real;
y10: real;
N: udint; (*Число точек в графике*)
Is_L_Line:bool; (*Слева от первой точки. Если 1 прямая параллельная оси Х, если 0 продолжение кривой*)
Is_R_Line:bool; (*Справа от последней точки. Если 1 прямая параллельная оси Х, если 0 продолжение кривой*)
In: real;
end_var

var //объявление локальных переменных
i: udint;
a:udint; (*Начало интервала поиска*)
b: udint; (*Конец интервала поиска*)
x: array [0..9] of real;
y: array [0..9] of real;
end_var
IF N > 10 THEN N:= 10;
ELSIF N < 2 THEN N:= 2;
END_IF
x[0]:= x1;
x[1]:= x2;
x[2]:= x3;
x[3]:= x4;
x[4]:= x5;
x[5]:= x6;
x[6]:= x7;
x[7]:= x8;
x[8]:= x9;
x[9]:= x10;

y[0]:= y1;
y[1]:= y2;
y[2]:= y3;
y[3]:= y4;
y[4]:= y5;
y[5]:= y6;
y[6]:= y7;
y[7]:= y8;
y[8]:= y9;
y[9]:= y10;

(*Начальные значения интервала поиска*)
a:= 0;
b:= N-1;

(*Обрезание графика для крайних точек*)
IF IN <= x[0] THEN
b:= 1;
IF Is_L_Line THEN
In:= x[0];
END_IF
ELSIF IN >= x[N-1] THEN
a:= N-2;
IF Is_R_Line THEN
In:= x[N-1];
END_IF
(*Теперь можно начать поиск*)
ELSE
WHILE (b-a) <> 1 DO (*В конце концов, входной сигнал ТОЧНО попадет между двумя соседними точками X(a) и Х(а+1)*)
i:= (a+b)/2; (*Делим интервал поиска пополам*)
IF IN = x[i+1] THEN (*Может нам повезло, и мы сразу нашли точку? *)
a:= i; b:= i+1; (*Бинго! прекращаем итераций, нечего в пустую молотить :) *)
(*мимо :( ,тогда посмотрим в какую половину интервала попали*)
ELSIF IN > x[i] THEN (*Если входной сигнал больше середины интервала поиска,*)
a:= i; (*то следующий поиск будем делать начиная от середины и до конца массива*)
ELSE (*А если входной сигнал меньше середины интервала поиска,*)
b:= i; (*то следующий поиск будем делать начиная от начала и до середины массива*)
END_IF
(*Таким образом на каждой итерации отбрасываем из поиска заведомо ненужную половину значений
две соседние координаты X(a) и Х(а+1), меду которыми попадает входной сигнал найдем очень быстро
для 8 точек графика нужно не более 3 итераций
при 9..16 точек в графике нужно не более 4 итераций
при 17..32 точек в графике нужно не более 5 итераций
при 33..64 точек в графике нужно не более 6 итераций
при 65..128 точек в графике нужно не более 7 итераций
инфа точная - 100% ;) *)
END_WHILE;

END_IF
(*Теперь самое простое - сделать линейную аппроксимацию по двум точкам ;) *)
PLA_STmod:= y[b] - (x[b] - IN) * (y[b] - y[a]) / (x[b] - x[a]);

end_function

Эдуард_Н
01.12.2022, 13:03
Спасибо petera.

ПавелП
03.12.2022, 21:43
Вот интересно, в функцию ST вход и выход внешние.
Фильтры входа не включаем. ПР200

Какую частоту ST через себя пропустит, не искажая входной сигнал?

Какой мах цикл можно создать внутри, типа:


for i :=0 to 1 by X do i:=i+1; i:=i-1; end_for
X - мах число

ST, по идее должен работать на частоте ядра.

capzap
03.12.2022, 22:22
Вот интересно, в функцию ST вход и выход внешние.
Фильтры входа не включаем. ПР200

Какую частоту ST через себя пропустит, не искажая входной сигнал?

Какой мах цикл можно создать внутри, типа:



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

ПавелП
03.12.2022, 22:34
это не компьютерный язык программирования, здесь сперва придет значение текущее аналогово входа, потом выполнится весь код, включая функцию ST, затем что то уйдет на выхода и далее повториться следующая итерация цикла контроллера, поэтому ни о какой фильтрации внутри макроса речи быть не может Это понятно.
Я про булевый вход и выход (например байт -> байт), и только ST, без других кодов - только одна функция на чистом листе.
Выполнении цикла и вычислений в цикле произойдёт на частоте ядра?

Вроде как ничто не должно "мешать" выполнится ST функции???


for i :=0 to 1 by X do Input1:= Input1+1; end_for
X - мах число и выдать Input 8 бит на выход
Получится какой программный быстрый обработчик реализовать?
Интересует именно пик быстродействия.

И ещё - прирвёт ли что-нить обработку функции?

capzap
04.12.2022, 10:26
Это понятно.
Я про булевый вход и выход (например байт -> байт), и только ST, без других кодов - только одна функция на чистом листе.
Выполнении цикла и вычислений в цикле произойдёт на частоте ядра?

Вроде как ничто не должно "мешать" выполнится ST функции???


for i :=0 to 1 by X do Input1:= Input1+1; end_for
X - мах число и выдать Input 8 бит на выход
Получится какой программный быстрый обработчик реализовать?
Интересует именно пик быстродействия.

И ещё - прирвёт ли что-нить обработку функции?
догонит и еще раз прирвёт
Для начала Вы разберитесь как цикл FOR работает, если Х больше чем единица, то произойдет одна итерация
О каких 8 битах идет речь, если в ОЛ есть только були, целочисленные и вещественные числа, желательно бы сформулировать задачу, так чтоб она была понятна
Хотите какое то быстродействие проверить, собирайте схему сами, запускайте и вычисляйтевозможности ПР, если что то не понятно выкладывайте код с объяснением что хотели получить и что в итоге получается

ПавелП
04.12.2022, 12:28
О каких 8 битах идет речь, если в ОЛ есть только були,
А я про что?
>> Я про булевый вход и выход (например байт -> байт),
Входы I1..I8 сформируют входной байт.
Выходы Q1..Q8 выходной байт.

и вычисляйте возможности ПР, если что то не понятно выкладывайте код
Спрашивалось у народа про:
>> "Какую частоту ST через себя пропустит, не искажая входной сигнал?"
Если вы не знаете, то так и скажите.

Подразумевается, что тут гуру за годы уже "собаку съели"! :)

В понедельник на работе и проверим.
P.S. Кстати.

это не компьютерный язык программирования,
- Это компьютерный язык программирования!!!
То что его зажали в функцию, совершенно не мешает
управлять сложным устройством.
По крайней мере я справился, отчего и задался максимумом.

petera
04.12.2022, 13:25
А я про что?
>> Я про булевый вход и выход (например байт -> байт),
Входы I1..I8 сформируют входной байт.
Выходы Q1..Q8 выходной байт.

Спрашивалось у народа про:
>> "Какую частоту ST через себя пропустит, не искажая входной сигнал?"
Если вы не знаете, то так и скажите.

Подразумевается, что тут гуру за годы уже "собаку съели"! :)

Никакой частоты пропускать он(ST) не будет!

ПРка, как и положено ПЛК, работает так
1. в начале каждого цикла опрашиваются все физические входы и полученные значения запоминаются в специальном буфере
2. выполняется код, в том числе и ST. При этом используются сохраненные на ш.1 значения входов. Физические входы и выходы НЕ ОПРАШИВАЮТЯ!!!
3. данные, получаемые на ш.2, в том числе и для физических выходов ПР запоминаются во втором специальном буфере
4. данные из буфера п.3 записываются на физические выходы.

далее циклы повторяются.

таким образом ни о какой "пропускаемой частоте" ST речи быть не может!
Быстрее чем время выполнения одного цикла все равно работать не будет!

melky
04.12.2022, 13:57
В ПР если установить единственный макрос на ST частота будет равно циклу программы ПР. То есть сразу все 8 входов подать на макрос, на выходе сформировать байт выходов и скинуть на выходы. Вот сколько времени займет ваш код ST столько времени и будет цикл ПР.

Почему, расписал petera как работает ПР и большинство ПЛК.

ПавелП
04.12.2022, 14:22
Никакой частоты пропускать он(ST) не будет!
Будет!. :)
Примет байт, обработает, и направит на выход!
А вот какие временные рамки - уже по факту завтра гляну на работе.
А что вы имели под пропустить через ST не понятно.


ПРка, как и положено ПЛК, работает так
1. в начале каждого цикла опрашиваются все физические входы и полученные значения запоминаются в специальном буфере
2. выполняется код, в том числе и ST. При этом используются сохраненные на ш.1 значения входов. Физические входы и выходы НЕ ОПРАШИВАЮТЯ!!!
3. данные, получаемые на ш.2, в том числе и для физических выходов ПР запоминаются во втором специальном буфере
4. данные из буфера п.3 записываются на физические выходы.

далее циклы повторяются.
Вот за эту инфу спасибо, видно что вы в теме. :)


таким образом ни о какой "пропускаемой частоте" ST речи быть не может!
Быстрее чем время выполнения одного цикла все равно работать не будет!
Не цикл надо обогнать, а внутри цикла выяснить скорость выполнения своего цикла.
Другими словами - сколько тактов успеет прога на ST пересчитать.
Отсюда и вопрос был: Если внутренний цикл "затянется" - что будет.
Но это уже к внутренней архитектуре оболочки вопросы выясняем.

ПавелП
04.12.2022, 14:24
В ПР если установить единственный макрос на ST частота будет равно циклу программы ПР. То есть сразу все 8 входов подать на макрос, на выходе сформировать байт выходов и скинуть на выходы. Вот сколько времени займет ваш код ST столько времени и будет цикл ПР.

Почему, расписал petera как работает ПР и большинство ПЛК.
Всё верно.
Задан цикл внутри функции на 200 шагов.
Впишется в цикл ПР?
500 шагов?
2000 шагов?

Вот этот предел и интересует.
На что рассчитывать???

melky
04.12.2022, 14:28
блин, да вы хоть 1000 шагов сделайте внутри своего ST, он обрабатывать будет ОДНО и тоже входное значение и запишется на выход ОДНО единственно значение после работы ваших 100500 циклов. Вы не догоняете принципы работы ПР и ПЛК.

"Это опять вы" :) еще раз вам говорю, если вам нужна обработка определенных входов и управление определенных выходов в процессе выполнения основной программы, ва нужен другой ПЛК, который это умеет делать, и это не ОВЕН.

melky
04.12.2022, 14:34
| начало цикла программы - чтение всех входов (см. комментарии petera) | Начало программы, программа стартует и что-то делает | Прерывание каждые 2 мс, проверка определенного входа | основная программа продолжается | Прерывание, проверка входа, условие выполнено, запись выхода | программа продолжается | Прерывание ... | Программа закончилась | Запись всех остальных выходов | => все сначала

(общее время выполнения программы ну скажем 15 мс)

То, что выделенно жирным, недоступно ПР и ПЛК от Овен... ПР, которые бы так умели вообще не видел.

ПавелП
04.12.2022, 14:39
блин, да вы хоть 1000 шагов сделайте внутри своего ST, он обрабатывать будет ОДНО и тоже входное значение и запишется на выход ОДНО единственно значение после работы ваших 100500 циклов. Вы не догоняете принципы работы ПР и ПЛК. Не в этом вопрос.
>> Я про булевый вход и выход (например байт -> байт),
Вопрос, сколько тактов в цикле можно обрабатывать этот байт за один вход/выход в функцию.

Давайте вылезем из танка и посчитаем число Пи. (например Пи)
Высчитать 20 знаков, 50 знаков, или 200 знаков.
Выдать число полученных знаков.
Результат функции 4 байта, берём нижний байт, двигаем в порт [0-255].
Выставили как результат.


"Это опять вы" :) еще раз вам говорю,
Так понятно? Никаких коллизий с архитектурой ПР!
Каков предел внутри функции?

ПавелП
04.12.2022, 14:40
То, что выделенно жирным, недоступно ПР и ПЛК от Овен... ПР, которые бы так умели вообще не видел.
Вот этот ответ, который и нужен.
Сложную обработку не делать, а примитивный шаговый автомат...

1exan
04.12.2022, 14:43
Не в этом вопрос.
>> Я про булевый вход и выход (например байт -> байт),
Вопрос, сколько тактов в цикле можно обрабатывать этот байт за один вход/выход в функцию.

Давайте вылезем из танка и посчитаем число Пи. (например Пи)
Высчитать 20 знаков, 50 знаков, или 200 знаков.
Выдать число полученных знаков.
Результат функции 4 байта, берём нижний байт, двигаем в порт [0-255].
Выставили как результат.


Так понятно? Никаких коллизий с архитектурой ПР!
Каков предел внутри функции?

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

melky
04.12.2022, 14:44
А что ,в в ST на ПР появились циклы? хотя собственно не важно, любой цикл в ПР или ПЛК просто увеличит время выполнения программы. Соответственно увеличится время между опросом входов и записью выходов. Так какая разница, сколько вы там собрались вычислять знаков ?

ПавелП
04.12.2022, 14:56
Скорее всего цикл будет увеличен. Можете также попробовать сделать бесконечный цикл, расскажете потом, как на него ПР отреагирует. Вот и я о том! Завтра гляну. :)

ПавелП
04.12.2022, 14:58
А что ,в в ST на ПР появились циклы? хотя собственно не важно Важно! Я очень рад, что смог вам помочь! :)

melky
04.12.2022, 14:59
ПавелП ну я и ST немного далеки :) не готов пока его использовать на ПР так вообще.

petera
04.12.2022, 15:10
Будет!. :)
...
Не цикл надо обогнать, а внутри цикла выяснить скорость выполнения своего цикла.
Другими словами - сколько тактов успеет прога на ST пересчитать.
Отсюда и вопрос был: Если внутренний цикл "затянется" - что будет.
Но это уже к внутренней архитектуре оболочки вопросы выясняем.
Так ведь время цикла у ПР никак не задается, а получается таким, какое нужно для выполнения конкретной программы,
при 200 внутренних циклах ST, предположим, время цикла ПР будет 1 мс, а при миллионе циклов FOR, время цикла ПР, положим, станет 1 минута.

Т.е. цикл ПР подстраивается под выполнение всего кода, а не наоборот.

ПавелП
04.12.2022, 15:32
Т.е. цикл ПР подстраивается под выполнение всего кода, а не наоборот.
Ага. Тогда интересно, на какой частоте работает код.
Код ST скомпилирован, и на частоте проца?

ПР200 - STM32F103VET6, Максимальная частота 72МГц,
минус потери времени на откомпилированные куски кода,
там же чистый АСМ получается (правда, это не известно).

Если в 1мс удастся "втиснуть" 100000 циклов, то это здорово!

ПавелП
04.12.2022, 15:40
ПавелП ну я и ST немного далеки :) не готов пока его использовать на ПР так вообще.
Кстати, я не зная про ограничения функции выхода одним словом в 4 байта,
разложил его на биты внутри, высунул руки через ... и выставил уже битами для работы
остальной схемы-программы.
Так что вполне работоспособно, и, что самое главное -
- эффективность программной реализации моего варианта!

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

Осталось "выжать" оптимальность из ЭТОГО всего ПР...
Тут очень бы помогли разработчики, но висит тяжёлое молчание...

Bone
08.12.2022, 07:25
Вот и я о том! Завтра гляну. :)
ПавелП, и каков результат?

Юлия Лукина
08.12.2022, 09:36
Добрый день, Павел! Форум не является официальным каналом технической поддержки. Если у Вас есть вопросы технического характера, Вы всегда можете их направить на почту support@owen.ru.

ПавелП
10.12.2022, 01:27
Добрый день, Павел! Форум не является официальным каналом технической поддержки. Если у Вас есть вопросы технического характера, Вы всегда можете их направить на почту support@owen.ru.
Доброй ночи, Юлия. Не буду спорить с организацией Вашей поддержки.
Но вопросы всегда одни и те же, судя по форумам. Бесконечное повторение.
И попытки прятать очевидное не помогают нам, пользователям Ваших железяк, и программных продуктов.
Что делать? :)

P.S. Прошу Вас - не спорьте с очевидным.
Я уже изложил ранее вариант поддержки сообществом наработанного сообществом софта.
Примите более эффективное решение.

ПавелП
10.12.2022, 01:34
ПавелП, и каков результат?
На меня свалился ПЛК110, и я, эээ, хожу по граблям, забыв про ПР200...
ПЛК110-24.30.P-M - грабли от поддержки прежние.

Таргет есть на "30.I" и "30.M". На мой "30.P-M" не находится на сайте.

CodeSys не опознаёт ПЛК, бодро сообщая:
"Выбранный профиль ПЛК не соответствует профилю целевой платформы. Соединение будет отменено."

Это я не вам жалуюсь, а Юле заодно отвечаю... :cool:

P.S. К сожалению ПЛК глючит, и не поддерживает ВООБЩЕ никакой таргет...

petera
10.12.2022, 04:31
На меня свалился ПЛК110, и я, эээ, хожу по граблям, забыв про ПР200...
ПЛК110-24.30.P-M - грабли от поддержки прежние.

Таргет есть на "30.I" и "30.M". На мой "30.P-M" не находится на сайте.

CodeSys не опознаёт ПЛК, бодро сообщая:
"Выбранный профиль ПЛК не соответствует профилю целевой платформы. Соединение будет отменено."

Это я не вам жалуюсь, а Юле заодно отвечаю... :cool:

Как все запущено..
Тяжелый случай
Целевая платформа нужна - PLC110.30-M, для старых контроллеров, или PLC110.30-M v2 для новых

ПавелП
10.12.2022, 13:04
Как все запущено..
Тяжелый случай
Целевая платформа нужна - PLC110.30-M, для старых контроллеров, или PLC110.30-M v2 для новых
Ага. Тяжёлый. Я проверил это всё, перед тем как сюда написать...
И, главное, где почитать про эту версию "ПЛК110-24.30.P-M".
Поисковик на сайте ничего не находит.
Полезу в соответствующий форум спрашивать. Спасибо. :)

capzap
10.12.2022, 13:12
ПЛК110-24.30.P-M

М на конце это про размер памяти конфигурации, а v2 это когда на конце модификации у плк написано М02

kondor3000
10.12.2022, 14:26
Ага. Тяжёлый. Я проверил это всё, перед тем как сюда написать...
И, главное, где почитать про эту версию "ПЛК110-24.30.P-M".
Поисковик на сайте ничего не находит.
Полезу в соответствующий форум спрашивать. Спасибо. :)

Как не находит, а это что?
Старый, руководство на станице, в Документации https://owen.ru/product/plc110_old
Новый https://owen.ru/product/plk110_m02

ПавелП
10.12.2022, 18:15
64456

Как не находит, а это что?
Старый, руководство на станице, в Документации https://owen.ru/product/plc110_old
Новый https://owen.ru/product/plk110_m02
Перепробовал все варианты, перед тем как тут спрашивать...
Без загрузки таргета прога грузится, эмулируется, работает, но без входов и выходов...

А что значит:
Версия 2.12 (с поддержкой OwenCloud)?
https://owen.ru/forum/image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYEAAACfCAYAAAA f8mV7AAAUuklEQVR4nO3deWyc5YHH8e87Mz7jcQ47E IkDo6Dc5UkkIgUpWpLshWoog0RortqhVQqtVuhHguCbou2qGLL bleFVj1AlfpPV/zRFpUNq6pHtE2gCy7dYAcnmBwmjqmTOImxg2975r32D9vpdJjj nfGMZ z395FG8cx7PM/zzpvn995juK7rIiIivhQodgVERKR4FAIiIj4WAnjooYeKXQ8RE Zln3// 96dDYPaNiIj4w zGvw4HiYj4mEJARMTHFAIiIj6mEBAR8TGFgIiIjykERER8LGMI GIZx/eVV/DTZTJdreSIii51hGLS3t6cc3t7enlO/mTYEDMPAdd3rr2wKyGW6uZQnIrKYtbW1cfveDyUNgvb2dm7f yHa2tqynm/KEJjtkOPl qy5XDt0PdtORGTarl27eK311fcFwWwAvNb6Krt27cp6vqHMo6Q W37Fn22HPThs/3WxYxH WLIziP0s2HxGRxSg CF5rfRVgTgEAcwgBL521l2kTp0sWBF7rICKy2MUHATCnAIAiXh 2U7uRv/OGjxENJ8R2/zhuIiMxN0UIg/gRwquFeOngFgYj4Sfw5gGTnCLKVMgSSda65drbZHN5JVxcd/hERP0s8CZzqZHE20u4JxHe qY7dp qc0w1LnNbrPBMpGETEL1JdBTTXIMh4YjhdB5vuUE6u882mPHX IuIXu3fvpq2tLelJ4Nkg2L17d9b94pwuERURkfmRqXPftWtXTh vGJR8Cug9ARKRwSj4E1PmLiBSOniIqIuJjCgERER9TCIiI JhCQETExxQCIiI phAQEfExhYCIiI8pBEREfEwhICLiYwoBEREfUwiIiPiYQkBExM cUAiIiPqYQEBHxMYWAiIiPKQRERHxMISAi4mMKARERH1MIiIj4 mEJARMTHFAIiIj6mEBAR8TGFgIiIjykERER8TCEgIuJjCgERER 9TCIiI JhCQETEx0LFrgBAf38/57u76e3tpa vj8HBQUZHRwEIh8PU1dXR0NBAY2MjG5qbiUQiRa6xiMjiUNQQ6 Orq4kRHB6dOnWJDczONjY3ccuut1NfVEa6tBWB0ZISBwUH6 vp4 9w5Dh8 zNatW9mxcyctLS3FrL6IyIJXlBAYGBigtbWVnp4edu7cyZf27c O9Nkj04iWm2o9z9do1 oZHiE1OEqoNU7FqJU1r17N1zx4Cd93Fm2 9xW9/ 1tOnz7N3r17qa vL0YzFhTDMHBd931/i4i/zXsInD1zhiNHj7KxuZnP3n8/E6dOM/7K/1Lx3jDWyROUDQ5SPjGF61o4josFmEaAawZEa2tZsm8fTZta2Hz ffZzs7OT5559n/759bNq8Oec6GYbxNz7SBnpy/ljtV13aLXc77DJ/F7nRVfh1TffWJdFZyLn1 /43kNgZMnT/LySy xb/9 Vts2Q0eOEo5O4bzyCs7AACHHAQcsHFzABrBcAoZJhWtTNjHB5C 9 wVAgQHj/fnZ8 CM0rFnD4cOHicZibNPee65foffiGtOAulnvmU2OZkwRDf8Sezk L5jkWzNWwicPXOGl196iXsOHsTo7GRqeITyEyeIdp3FcBws18W Je7nxnzkODuA4DobrUmnbjPzmN/T97ve0fPEfuefgQV48dIiK8vI57REkSvaf3 thldlhyba 4zubdOGTrqxM9fA6beI0iRLnkWpvIlWbEoelWh6Z3qeqT6F5 Y7TvYf04ZuqbYmfeR0/fpiX WSaR6phXsrKtM56LT xzqnqWKrrZ7qyS8G8hMDAwABHjh5l3/79GJ2dBK5exfnz/xHqv0xsYorY5CSBigqoqMC1bRwXLNfBsR0cZoLAcDEno9jjkzj lIYyKCioNg7M//BGbvvwl9u3fz5GjR6mrr8/pHMFcvqh0K16ylaKYhxm8/IdONW6q9ngNKC8Bmu4QTqa6ZyvTsp/Ld O1renWmUzzmX2frhyv30MuGwxeykomm/ITLbT1cyEcVpyX wRaW1vZ2NzMatsm2tWFe wYXLnM NAQVevXs 7RR6lsamJi6BqW42BaJpZtY7kOMdvGtG0mh0YI1tez7qtfpqZl E5PXBnGiUYLRKG/98EdEpqbY2NxMa2trTnWcXRETv0zDMNJ2PvErcTbnFlLNd/bzXIelM9cVsNArb7b1S7c85stcv5NCm61DsrApRKgmbuzMlpGs M8x3 aW4fi4EBQ Brq4uenp6uG33bvr/9CcqBwawL1wiOjrKkvVNRJ54gspPfII13/421eubGB0cxHRdYrZNzDSxHZup4WHKVq5kxcMPY93zSZY/ gjhrR9gcmQEKxaFiXGOf c/uG33bnp6eujq6spb/VN18PHDs5W49ZOsvFyHLZQVLx9SBXc 5 9lzymX72u pNtAyXfdsvkuSmHZFNpCaVvBQ BERwc7duxg8nw3ZRcuYp04gTkxRlkkwurvfhduuGF6xEiE5qe/R3jzZiYHBnAcB8u2iQ69R/nqBuofewy7uZmJy1cZra5mxT8/SuX69URHRzEnp5js6eHq7w zc dOTnR0FLpZC04p7obGy aww3zyW7BKcqW6fuZDQUOgv7 fU6dOcfO2bYx1n4fLfVhmFNM0cTCgsvJvJ7hhFU1PP03tzTcz1 t/P1PAQoTXrqHvsG9gbNmCOjGBFo6yorWXNlq2MBQJELYuY62BGo 7zz6xe5eds2Tp06RX9/f1Z1jd tT7bbmmpLL9V06eYZP12 pKvnbJn5KiNdezK1NVU9c/kPlm7Ze2mL12lyCYLEZeJ1HK/L0mv9vcxnru3wUlau5Wej1NbPTGWXioKGwPnubjY0N MODTP 6qtYFy9iWhZ2eTnvdZ/j3MMPw9AQALZtMzk5iVVfz9p/ 3eWbt5MaGWEyGOPYTc2Yg4NEYvFWNnQwNLqav7r7rvpf UVrGvXiF26xNjFCwyfeRvr8mWaN27kfHe353rG75omriDJPks1 bbr5ehmWbsXLNCzdvLys0F7Gm2tbE//OVK7XNmcTfKnmnWz XueV7n2mQx5e1zuvw7IZ18t3ka6OXstKJpvy05XptQ7FWD 9lF0KChoCvb29NDY2MvmXC9D/LrZtY1kOpm3jVlVx5U9/pvOrX50 /BMMYpomseFhoktraXjiCVZ 85tMrVrF5LVrjI PUxeJUFtVxa/uuouJtjaqXRfbsnAsC8OyMAcHePf112lsbKS3t7eQTRORDEp56 1f qqAh0NfXR0NDA2N/6cEZG8WybCzHnr7yx7YJLV1K/7FjnHroIUb7 rCCQaamphi/do3R6mrstWuJjY4SjUZZtXYty2tqeOGTnyR68iQ1M/cOGDONMABncpLBN95g9erV9PX1FbJpGS22FT8f7Vlsy0TSm8 tX62fuStoCAwODlJfV8fEpQu4U5PEXIeY7eA41vSloLZJcPly3 n2tlbc /3mGT59mwjSZmpoiNjGBOTaGZVmsbmhgeU0NLx48SLS9nSWOA0D QdQkCwZmGuKbJ0Jmz1NfVMTg4WMimiYgsCgUNgdHRUcK1tYye7 cKJmdev ImZNpbjYAFT/f3E q5w6eWXeefxx5mamMCcuTx09lWzZAl//MpXGD92jFrHITBT8QBguO50GLguQdtmov/qdJkzj6Je6BLvWRARyaeCXyLqOA7BcPj6df WbWMBVizGRHc34319TBoGNfX1rHjgAaK2jRmdvoLINKeD4 Tp09xw772sXb8em78GQBAoi/u3DCAUWlS7dfFXF5RCu0otiEqtPiILTUFDIBwOMzI8QnlkFSZM PwsoYBAbH2fs7NnprX7DoGrFCtb9 MdYN9 MMzWFZZqYAMEg2DZONMpwXR0NTz/N8vXrAQi5LiHXpTzuVWEYVEUijI6MEA6HC9m0eVXKVxaIyMJW0 BCoq6tj4No1qtetxQKcQIDoxCTjPT1EDYMpw6BixQoan3kGc NG3PHx6XMA69axbeNGxvr6MINBAoZByDSZWrWKG3/yE5atWwck7AW4LmWBAMs2bWJgcJC6ujrP9Uzcmkz2PpvHOKT7L Nv5pHufbHqvZWf6LNWwXJdHqulSzcfrcBGZm4KGQENDA5f7LrF kQxOWEcCKRpno7sYyDGygcskSbvzBD7Buugl3fBwzFqNh3Tpqq 6v59d138 7XvoZ1tR juprKigoqHIfQjTey5bn/ZNmaNQRcl4rZvQBgAoPI7l1cvnyZhoaGvLRh9jDM7GGZRIlb6O nGT/Z5/PipypgdL51sr5lPVmaq66Xj65hrO9ItF533ECmegoZAY2MjvRd 6qVy7FsuA8QsXMA0DEwhVVdH87LNYW7bgjo1hmSYNjY3UVlfz3 wcPMtXZSejKFUa/ S 4/f2UL1/OkqoqKlyXmm3bueWFF6ipj0zvAcy83BUrqN91KxcuTN fkC/Z3tmYaUs520M7hTofkO87NtOZS/3ns54iflPQENjQ3Mw753swasK4NTWYgcD0SWHDwK2txVyxAjsW wzRN1qxbx9KqKg7dcw9T7e2EZ64Ccnp7Gf7GN3CvXKG6vp4lS5 awpKoSY 1a7JpqyoHKgEGospKmL36BYOQGznefZ0Nzc97akc 7IdNt7c nxK37Ysp08jubPTERyU5BQyASibB161a6zp2j b77cCorsQMBXGC4v5/ur3 diUuXaGhqora6mhcOHCB6/Dg1M/cBGEyfAOb8ea584QtYFy yrL6e6NAQbZ/5DO4771AVDFIRCHI5EGDlB/fw5ludbNmyhUgkUsimzdvVOnMtp1SuKiqUUghUkYWs4JeI7ti5 k46ODhoOHmTJli0Eq6uxANcweO/0aS4 /jjDb77Jrz5xN9GODqpnj0Pz18tAQ65LoLeXiw88wOVDhzh //2EXnqJlcEg5YEATmUV5Xv2sPQD2 l4o4MdO3dmXc/Ek5rxx8mTDUt37D3TCdrE54qke8BUoQIgvtxMEsfNpR2ZHqKVb q klC6RFVlsCv7LYi0tLZw fZpjbW3sefJJ/ufTnyFk20xFo7jA6Nmz/PHeewkBVa7L7H9zAwi4LoGZSoYA58wZuj79aapcl9qyMkKGQay sjLfDNfzdk0/yens7TU1NtLS0ZFXHZJ1LfOfo9YFS6eaXzYOxsplvuvFyqWeqz xNPEnudbi5l5TpcRLybl18W27t3L e6u3m3qorbvv2vlIXDhCoqpn9IHijn/WlkMPM4iJlHQ4Rcl/JgkGWGQW1ZGWWGgVVezunKSvY8/T2uVlTw9rlz7N27dz6aJCKyKMxLCNTX17N/3z6OHjlC5e23c9t3vkPZsmVUV1VhGwZOkkoF4/YCDCBoGAQDAULBIEHDYLK8nFNLl3LbM88Q3L2LI3/4A/v37cvp94WT0RZmcrksFy1LkdI1LyEAsGnzZj56xx28eOgQ0W3b uOvnP6dw4qqqupKCvDhet7BokVDLouZUZweuu/rIyzwSAXbtvDvhdeYHzjRl48dIiP3nEHmzZvnq/miIgsCgU/JxBv /btVJSXc ToUTY2N/ORX/6Coc5OLv3uMOee/yXm8BAhxyFgWTBziahrGLjBIFcDAcYDAVZ87GPc/Pf/QN1HPsyxtjbOdXdz5513KgBERHIwryEA03sEdfX1tLa28rPnnm P79u1sf/ifuOlzn2Xs3DmGTp2i/43jDPecZ2h0jPC69VRu3kTLLTtZfsutBFetorOzk18/9xxNTU186lOfytshoHQng/0q/iopEVl85j0EYPocwYEDB jq6uJERwfPPPssG5qbaWxspOHAAZo 9znCtbUAjI6MMDA4SF9fH6 /8Qbnu7vZunUrH//4x7O CigdXYL4flomIotfUUJgVktLCy0tLfT393O u5ve3l7eOH6cwcHB678HEA6Hqauro6GhgZs2buTOO /M 41gmTq7dHsIqbaUk02TWE78 3TDUpWT7/kl1j/VpbPpykxsc7KyvN75m2oZJps21b0Jc1mGc50mVbtESklRQ2BWJ BIhEonwwdtvL3ZV3sdrR5vqRq9cHwiXqg65Pnso1/llezgo1YPl4v/2Unaq5Z5u2lSBlKoemcx1mmymEymWkgiBhSyXxxbMdgzpnqbpt ZxM5edSVuK08X/Hb3Vn0zGWglyWYT5CXKSUKQTmyMshk1zmldjJeLnjNpuOyUv9s mlDrncS51N82CULvlyWYb6Xu0ipmbf7BEpZusM2 Tafhwd0KKK0KCykFGlPYEZiEMQ/fyfVib5kwxIfQDf7d6rn cylbl6my3V XtqdePw9WZvnUvf5bnOxphEpJoVAnHw9GM3rFUTpHoSW6X0h5p dp/tmM66UjzDT/bJZ7tsvH6zj5mibd5yLFpBCQrOjmMZHFRSGQZ162HBcyr 1bTG0WWcx0YlhExMcUAiIiPqYQEBHxMYWAiIiPKQRERHxMISAi 4mMKARERH1MIiIj4mEJARMTHFAIiIj6mEBAR8TGFgIiIjykERE R8TCEgIuJjCgERER9TCIiI JhCQETExxQCIiI phAQEfExhYCIiI8pBEREfEwhICLiY6HZP4aHh4tZDxERKQLtCY iI JhCQETExxQCIiI phAQEfExhYCIiI8pBEREfEwhICLiYwoBEREfC2UeRURk/jzyyCPFrsKC8dRTT815HgoBESk5P/3pT4tdhZL24IMPYppmXualEBCRknTx4sViV6EkHTlyJK/zUwiISMkKh8PFrsKipxPDIiI phAQEfExhYCIiI8pBEREEixbtuz6K9mwdO8XGp0YFhGJs2zZMo aGhlK TzfuQqQ9ARGRGck69aGhoZR7BAs9AEAhICKStcUSAKAQEBHxNY WAiEiWUh0iWogUAiIiM5J17qkO/SyWINDVQSIicRI793TH/mfHXcjnBxQCIiIJMnX8XsddCHQ4SETExxQCIiI phAQEfExhYCIiI/pxLCIlKR8/4KWJKcQEJGS8 CDDxa7Cr6hEBCRkpOvH1GXzBQCIlJSnnrqqWJXwVd0YlhExMcU AiIiPqYQEBHxMYWAiIiPKQRERHxMISAi4mMKARERH1MIiIj4mE JARMTHrt8x/K1vfauI1RARkWIwXNd1i10JEREpDh0OEhHxsf8H1HtUuDXHvH4 AAAAASUVORK5CYII=
https://owen.ru/forum/image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYEAAACfCAYAAAA f8mV7AAAUuklEQVR4nO3deWyc5YHH8e87Mz7jcQ47E IkDo6Dc5UkkIgUpWpLshWoog0RortqhVQqtVuhHguCbou2qGLL bleFVj1AlfpPV/zRFpUNq6pHtE2gCy7dYAcnmBwmjqmTOImxg2975r32D9vpdJjj nfGMZ z395FG8cx7PM/zzpvn995juK7rIiIivhQodgVERKR4FAIiIj4WAnjooYeKXQ8RE Zln3// 96dDYPaNiIj4w zGvw4HiYj4mEJARMTHFAIiIj6mEBAR8TGFgIiIjykERER8LGMI GIZx/eVV/DTZTJdreSIii51hGLS3t6cc3t7enlO/mTYEDMPAdd3rr2wKyGW6uZQnIrKYtbW1cfveDyUNgvb2dm7f yHa2tqynm/KEJjtkOPl qy5XDt0PdtORGTarl27eK311fcFwWwAvNb6Krt27cp6vqHMo6Q W37Fn22HPThs/3WxYxH WLIziP0s2HxGRxSg CF5rfRVgTgEAcwgBL521l2kTp0sWBF7rICKy2MUHATCnAIAiXh 2U7uRv/OGjxENJ8R2/zhuIiMxN0UIg/gRwquFeOngFgYj4Sfw5gGTnCLKVMgSSda65drbZHN5JVxcd/hERP0s8CZzqZHE20u4JxHe qY7dp qc0w1LnNbrPBMpGETEL1JdBTTXIMh4YjhdB5vuUE6u882mPHX IuIXu3fvpq2tLelJ4Nkg2L17d9b94pwuERURkfmRqXPftWtXTh vGJR8Cug9ARKRwSj4E1PmLiBSOniIqIuJjCgERER9TCIiI JhCQETExxQCIiI phAQEfExhYCIiI8pBEREfEwhICLiYwoBEREfUwiIiPiYQkBExM cUAiIiPqYQEBHxMYWAiIiPKQRERHxMISAi4mMKARERH1MIiIj4 mEJARMTHFAIiIj6mEBAR8TGFgIiIjykERER8TCEgIuJjCgERER 9TCIiI JhCQETEx0LFrgBAf38/57u76e3tpa vj8HBQUZHRwEIh8PU1dXR0NBAY2MjG5qbiUQiRa6xiMjiUNQQ6 Orq4kRHB6dOnWJDczONjY3ccuut1NfVEa6tBWB0ZISBwUH6 vp4 9w5Dh8 zNatW9mxcyctLS3FrL6IyIJXlBAYGBigtbWVnp4edu7cyZf27c O9Nkj04iWm2o9z9do1 oZHiE1OEqoNU7FqJU1r17N1zx4Cd93Fm2 9xW9/ 1tOnz7N3r17qa vL0YzFhTDMHBd931/i4i/zXsInD1zhiNHj7KxuZnP3n8/E6dOM/7K/1Lx3jDWyROUDQ5SPjGF61o4josFmEaAawZEa2tZsm8fTZta2Hz ffZzs7OT5559n/759bNq8Oec6GYbxNz7SBnpy/ljtV13aLXc77DJ/F7nRVfh1TffWJdFZyLn1 /43kNgZMnT/LySy xb/9 Vts2Q0eOEo5O4bzyCs7AACHHAQcsHFzABrBcAoZJhWtTNjHB5C 9 wVAgQHj/fnZ8 CM0rFnD4cOHicZibNPee65foffiGtOAulnvmU2OZkwRDf8Sezk L5jkWzNWwicPXOGl196iXsOHsTo7GRqeITyEyeIdp3FcBws18W Je7nxnzkODuA4DobrUmnbjPzmN/T97ve0fPEfuefgQV48dIiK8vI57REkSvaf3 thldlhyba 4zubdOGTrqxM9fA6beI0iRLnkWpvIlWbEoelWh6Z3qeqT6F5 Y7TvYf04ZuqbYmfeR0/fpiX WSaR6phXsrKtM56LT xzqnqWKrrZ7qyS8G8hMDAwABHjh5l3/79GJ2dBK5exfnz/xHqv0xsYorY5CSBigqoqMC1bRwXLNfBsR0cZoLAcDEno9jjkzj lIYyKCioNg7M//BGbvvwl9u3fz5GjR6mrr8/pHMFcvqh0K16ylaKYhxm8/IdONW6q9ngNKC8Bmu4QTqa6ZyvTsp/Ld O1renWmUzzmX2frhyv30MuGwxeykomm/ITLbT1cyEcVpyX wRaW1vZ2NzMatsm2tWFe wYXLnM NAQVevXs 7RR6lsamJi6BqW42BaJpZtY7kOMdvGtG0mh0YI1tez7qtfpqZl E5PXBnGiUYLRKG/98EdEpqbY2NxMa2trTnWcXRETv0zDMNJ2PvErcTbnFlLNd/bzXIelM9cVsNArb7b1S7c85stcv5NCm61DsrApRKgmbuzMlpGs M8x3 aW4fi4EBQ Brq4uenp6uG33bvr/9CcqBwawL1wiOjrKkvVNRJ54gspPfII13/421eubGB0cxHRdYrZNzDSxHZup4WHKVq5kxcMPY93zSZY/ gjhrR9gcmQEKxaFiXGOf c/uG33bnp6eujq6spb/VN18PHDs5W49ZOsvFyHLZQVLx9SBXc 5 9lzymX72u pNtAyXfdsvkuSmHZFNpCaVvBQ BERwc7duxg8nw3ZRcuYp04gTkxRlkkwurvfhduuGF6xEiE5qe/R3jzZiYHBnAcB8u2iQ69R/nqBuofewy7uZmJy1cZra5mxT8/SuX69URHRzEnp5js6eHq7w zc dOTnR0FLpZC04p7obGy aww3zyW7BKcqW6fuZDQUOgv7 fU6dOcfO2bYx1n4fLfVhmFNM0cTCgsvJvJ7hhFU1PP03tzTcz1 t/P1PAQoTXrqHvsG9gbNmCOjGBFo6yorWXNlq2MBQJELYuY62BGo 7zz6xe5eds2Tp06RX9/f1Z1jd tT7bbmmpLL9V06eYZP12 pKvnbJn5KiNdezK1NVU9c/kPlm7Ze2mL12lyCYLEZeJ1HK/L0mv9vcxnru3wUlau5Wej1NbPTGWXioKGwPnubjY0N MODTP 6qtYFy9iWhZ2eTnvdZ/j3MMPw9AQALZtMzk5iVVfz9p/ 3eWbt5MaGWEyGOPYTc2Yg4NEYvFWNnQwNLqav7r7rvpf UVrGvXiF26xNjFCwyfeRvr8mWaN27kfHe353rG75omriDJPks1 bbr5ehmWbsXLNCzdvLys0F7Gm2tbE//OVK7XNmcTfKnmnWz XueV7n2mQx5e1zuvw7IZ18t3ka6OXstKJpvy05XptQ7FWD 9lF0KChoCvb29NDY2MvmXC9D/LrZtY1kOpm3jVlVx5U9/pvOrX50 /BMMYpomseFhoktraXjiCVZ 85tMrVrF5LVrjI PUxeJUFtVxa/uuouJtjaqXRfbsnAsC8OyMAcHePf112lsbKS3t7eQTRORDEp56 1f qqAh0NfXR0NDA2N/6cEZG8WybCzHnr7yx7YJLV1K/7FjnHroIUb7 rCCQaamphi/do3R6mrstWuJjY4SjUZZtXYty2tqeOGTnyR68iQ1M/cOGDONMABncpLBN95g9erV9PX1FbJpGS22FT8f7Vlsy0TSm8 tX62fuStoCAwODlJfV8fEpQu4U5PEXIeY7eA41vSloLZJcPly3 n2tlbc /3mGT59mwjSZmpoiNjGBOTaGZVmsbmhgeU0NLx48SLS9nSWOA0D QdQkCwZmGuKbJ0Jmz1NfVMTg4WMimiYgsCgUNgdHRUcK1tYye7 cKJmdev ImZNpbjYAFT/f3E q5w6eWXeefxx5mamMCcuTx09lWzZAl//MpXGD92jFrHITBT8QBguO50GLguQdtmov/qdJkzj6Je6BLvWRARyaeCXyLqOA7BcPj6df WbWMBVizGRHc34319TBoGNfX1rHjgAaK2jRmdvoLINKeD4 Tp09xw772sXb8em78GQBAoi/u3DCAUWlS7dfFXF5RCu0otiEqtPiILTUFDIBwOMzI8QnlkFSZM PwsoYBAbH2fs7NnprX7DoGrFCtb9 MdYN9 MMzWFZZqYAMEg2DZONMpwXR0NTz/N8vXrAQi5LiHXpTzuVWEYVEUijI6MEA6HC9m0eVXKVxaIyMJW0 BCoq6tj4No1qtetxQKcQIDoxCTjPT1EDYMpw6BixQoan3kGc NG3PHx6XMA69axbeNGxvr6MINBAoZByDSZWrWKG3/yE5atWwck7AW4LmWBAMs2bWJgcJC6ujrP9Uzcmkz2PpvHOKT7L Nv5pHufbHqvZWf6LNWwXJdHqulSzcfrcBGZm4KGQENDA5f7LrF kQxOWEcCKRpno7sYyDGygcskSbvzBD7Buugl3fBwzFqNh3Tpqq 6v59d138 7XvoZ1tR juprKigoqHIfQjTey5bn/ZNmaNQRcl4rZvQBgAoPI7l1cvnyZhoaGvLRh9jDM7GGZRIlb6O nGT/Z5/PipypgdL51sr5lPVmaq66Xj65hrO9ItF533ECmegoZAY2MjvRd 6qVy7FsuA8QsXMA0DEwhVVdH87LNYW7bgjo1hmSYNjY3UVlfz3 wcPMtXZSejKFUa/ S 4/f2UL1/OkqoqKlyXmm3bueWFF6ipj0zvAcy83BUrqN91KxcuTN fkC/Z3tmYaUs520M7hTofkO87NtOZS/3ns54iflPQENjQ3Mw753swasK4NTWYgcD0SWHDwK2txVyxAjsW wzRN1qxbx9KqKg7dcw9T7e2EZ64Ccnp7Gf7GN3CvXKG6vp4lS5 awpKoSY 1a7JpqyoHKgEGospKmL36BYOQGznefZ0Nzc97akc 7IdNt7c nxK37Ysp08jubPTERyU5BQyASibB161a6zp2j b77cCorsQMBXGC4v5/ur3 diUuXaGhqora6mhcOHCB6/Dg1M/cBGEyfAOb8ea584QtYFy yrL6e6NAQbZ/5DO4771AVDFIRCHI5EGDlB/fw5ludbNmyhUgkUsimzdvVOnMtp1SuKiqUUghUkYWs4JeI7ti5 k46ODhoOHmTJli0Eq6uxANcweO/0aS4 /jjDb77Jrz5xN9GODqpnj0Pz18tAQ65LoLeXiw88wOVDhzh //2EXnqJlcEg5YEATmUV5Xv2sPQD2 l4o4MdO3dmXc/Ek5rxx8mTDUt37D3TCdrE54qke8BUoQIgvtxMEsfNpR2ZHqKVb q klC6RFVlsCv7LYi0tLZw fZpjbW3sefJJ/ufTnyFk20xFo7jA6Nmz/PHeewkBVa7L7H9zAwi4LoGZSoYA58wZuj79aapcl9qyMkKGQay sjLfDNfzdk0/yens7TU1NtLS0ZFXHZJ1LfOfo9YFS6eaXzYOxsplvuvFyqWeqz xNPEnudbi5l5TpcRLybl18W27t3L e6u3m3qorbvv2vlIXDhCoqpn9IHijn/WlkMPM4iJlHQ4Rcl/JgkGWGQW1ZGWWGgVVezunKSvY8/T2uVlTw9rlz7N27dz6aJCKyKMxLCNTX17N/3z6OHjlC5e23c9t3vkPZsmVUV1VhGwZOkkoF4/YCDCBoGAQDAULBIEHDYLK8nFNLl3LbM88Q3L2LI3/4A/v37cvp94WT0RZmcrksFy1LkdI1LyEAsGnzZj56xx28eOgQ0W3b uOvnP6dw4qqqupKCvDhet7BokVDLouZUZweuu/rIyzwSAXbtvDvhdeYHzjRl48dIiP3nEHmzZvnq/miIgsCgU/JxBv /btVJSXc ToUTY2N/ORX/6Coc5OLv3uMOee/yXm8BAhxyFgWTBziahrGLjBIFcDAcYDAVZ87GPc/Pf/QN1HPsyxtjbOdXdz5513KgBERHIwryEA03sEdfX1tLa28rPnnm P79u1sf/ifuOlzn2Xs3DmGTp2i/43jDPecZ2h0jPC69VRu3kTLLTtZfsutBFetorOzk18/9xxNTU186lOfytshoHQng/0q/iopEVl85j0EYPocwYEDB jq6uJERwfPPPssG5qbaWxspOHAAZo 9znCtbUAjI6MMDA4SF9fH6 /8Qbnu7vZunUrH//4x7O CigdXYL4flomIotfUUJgVktLCy0tLfT393O u5ve3l7eOH6cwcHB678HEA6Hqauro6GhgZs2buTOO /M 41gmTq7dHsIqbaUk02TWE78 3TDUpWT7/kl1j/VpbPpykxsc7KyvN75m2oZJps21b0Jc1mGc50mVbtESklRQ2BWJ BIhEonwwdtvL3ZV3sdrR5vqRq9cHwiXqg65Pnso1/llezgo1YPl4v/2Unaq5Z5u2lSBlKoemcx1mmymEymWkgiBhSyXxxbMdgzpnqbpt ZxM5edSVuK08X/Hb3Vn0zGWglyWYT5CXKSUKQTmyMshk1zmldjJeLnjNpuOyUv9s mlDrncS51N82CULvlyWYb6Xu0ipmbf7BEpZusM2 Tafhwd0KKK0KCykFGlPYEZiEMQ/fyfVib5kwxIfQDf7d6rn cylbl6my3V XtqdePw9WZvnUvf5bnOxphEpJoVAnHw9GM3rFUTpHoSW6X0h5p dp/tmM66UjzDT/bJZ7tsvH6zj5mibd5yLFpBCQrOjmMZHFRSGQZ162HBcyr 1bTG0WWcx0YlhExMcUAiIiPqYQEBHxMYWAiIiPKQRERHxMISAi 4mMKARERH1MIiIj4mEJARMTHFAIiIj6mEBAR8TGFgIiIjykERE R8TCEgIuJjCgERER9TCIiI JhCQETExxQCIiI phAQEfExhYCIiI8pBEREfEwhICLiY6HZP4aHh4tZDxERKQLtCY iI JhCQETExxQCIiI phAQEfExhYCIiI8pBEREfEwhICLiYwoBEREfC2UeRURk/jzyyCPFrsKC8dRTT815HgoBESk5P/3pT4tdhZL24IMPYppmXualEBCRknTx4sViV6EkHTlyJK/zUwiISMkKh8PFrsKipxPDIiI phAQEfExhYCIiI8pBEREEixbtuz6K9mwdO8XGp0YFhGJs2zZMo aGhlK TzfuQqQ9ARGRGck69aGhoZR7BAs9AEAhICKStcUSAKAQEBHxNY WAiEiWUh0iWogUAiIiM5J17qkO/SyWINDVQSIicRI793TH/mfHXcjnBxQCIiIJMnX8XsddCHQ4SETExxQCIiI phAQEfExhYCIiI/pxLCIlKR8/4KWJKcQEJGS8 CDDxa7Cr6hEBCRkpOvH1GXzBQCIlJSnnrqqWJXwVd0YlhExMcU AiIiPqYQEBHxMYWAiIiPKQRERHxMISAi4mMKARERH1MIiIj4mE JARMTHrt8x/K1vfauI1RARkWIwXNd1i10JEREpDh0OEhHxsf8H1HtUuDXHvH4 AAAAASUVORK5CYII=

kondor3000
10.12.2022, 18:22
Перепробовал все варианты, перед тем как тут спрашивать...
Без загрузки таргета прога грузится, эмулируется, работает, но без входов и выходов...

А что значит:
Версия 2.12 (с поддержкой OwenCloud)?


Версия прошивки модуля.
Вероятнее всего вы неправильно меняете целевую платформу. После изменения надо нажать Дополнения/ Стандартная конфигурация. Вы получите чистую конфигурацию, а всё что в ней надо будет перенести с помощью программы переноса. Перед переносом обязательно пересохраните свой проект.
https://owen.ru/forum/showthread.php?t=18269

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

ПавелП
10.12.2022, 18:45
Версия прошивки модуля.
Вероятнее всего вы неправильно меняете целевую платформу. После изменения надо нажать Дополнения/ Стандартная конфигурация. Вы получите чистую конфигурацию, а всё что в ней надо будет перенести с помощью программы переноса. Перед переносом обязательно пересохраните свой проект.
https://owen.ru/forum/showthread.php?t=18269

Вам для проверки надо просто создать чистый проект с нужной платформой. Если подключиться, значит потом уже переносить конфигурацию.
Создаю нулевой первый вариант:

PROGRAM PLC_PRG

VAR
a: UDINT;
END_VAR

a:=A+1;

Прога крутится, начисляет в "а".
При загрузке в ПЛК глючит.
Похоже на неисправность...
грузил только это отдельно:
PLC110.30_l
PLC110.30_m

kondor3000
10.12.2022, 18:53
Создаю нулевой первый вариант:
грузил только это отдельно:
PLC110.30_l
PLC110.30_m

PLC110.30_l - Это не I это L,
а у вас PLC110.30_M _ этот и используйте PLC110.30_M 64459

И возможно у вас таргеты старые стоят. Нужна версия 2.17 По ссылке скачайте и установите.

И вообще вам надо было сначала фото ПЛК выложить и год изготовления написать.

ПавелП
10.12.2022, 19:09
PLC110.30_l - Это не I это L,
а у вас PLC110.30_M _ этот и используйте PLC110.30_M 64459
Всё по несколько раз пробовал ещё раньше.

Сейчас ещё раз прошёлся - PLC - браузер не работает с ПЛК.
Не откликается на команды, только эхо выводит.

А есть другой вариант настройки, по сети, с терминалки или флешки ?
Боюсь прошивку менять, ещё кирпич получится... :(

Похоже что ему хана. Буду в поддержку звонить после выходных.

Спасибо! :)

ПавелП
11.12.2022, 19:37
Разобрались с ПЛК-110 на соседнем форуме.
Оказалась некая переходная версия.
Запустили.
ПР200 пока в сторону. :)
Буду ST осваивать на ПЛК.

wwtp39
18.12.2022, 03:37
При редактировании ФБ на ST, лоджик не изменяет вид ФБ и не кричит о необходимости обновления блока на поляне. Изменяется вид ФБ только в библиотеке. А на поляне вид как до редактирования. Даже если вы сохраните проект и повторно откроете его, вид ФБ не изменяется. Содержимое, да другое, но облик прежний. Мне надо было добавлять входные переменные. Пришлось забрать новый вид ФБ из библиотеки, а старый с поляны удалить. Версия 2.2.317.0

petera
18.12.2022, 05:27
При редактировании ФБ на ST, лоджик не изменяет вид ФБ и не кричит о необходимости обновления блока на поляне. Изменяется вид ФБ только в библиотеке. А на поляне вид как до редактирования. Даже если вы сохраните проект и повторно откроете его, вид ФБ не изменяется. Содержимое, да другое, но облик прежний. Мне надо было добавлять входные переменные. Пришлось забрать новый вид ФБ из библиотеки, а старый с поляны удалить. Версия 2.2.317.0
Это не новость.
Так было всегда, если входы и выходы ST функции никуда не подключены на схеме.
Как только подключишь - сразу закричит.

Рогов Алексей
28.12.2022, 14:42
Добрый день!

Почитал книжки про ST а в Лоджике даже правописание другое, прошу начинающему в работе с тексом закончить триггер, чтобы запоминал состояние, долго бился, не получается. И как переменным состояние присвоить? R := 1; или 0 ругается...
function RS_trig: bool; //RS триггер и тип данных выхода bool
var_input //объявление входных переменных
R : bool; //входная переменная с типом данных bool
S : bool; //входная переменная с типом данных bool
end_var


if R > S then RS_trig := false; end_if
if S > R then RS_trig := true; end_if



end_function

petera
28.12.2022, 14:51
Добрый день!

Почитал книжки про ST а в Лоджике даже правописание другое, прошу начинающему в работе с тексом закончить триггер, чтобы запоминал состояние, долго бился, не получается. И как переменным состояние присвоить? R := 1; или 0 ругается...
function RS_trig: bool; //RS триггер и тип данных выхода bool
var_input //объявление входных переменных
R : bool; //входная переменная с типом данных bool
S : bool; //входная переменная с типом данных bool
end_var


if R > S then RS_trig := false; end_if
if S > R then RS_trig := true; end_if



end_function

Самое главное - RS trigger сделать не получиться. Т.к. функция не запоминает состояние внутренних переменных.

как переменным состояние присвоить
R := true
R := false

Рогов Алексей
28.12.2022, 15:09
Спасибо!

Зато получилось A XOR B XOR C - забавная и опасная штучка...
будем ждать развития и мануалов
С наступающим!

kondor3000
28.12.2022, 15:23
прошу начинающему в работе с тексом закончить триггер, чтобы запоминал состояние, долго бился, не получается. И как переменным состояние присвоить? R := 1; или 0 ругается...
function RS_trig: bool; //RS триггер и тип данных выхода bool
var_input //объявление входных переменных
R : bool; //входная переменная с типом данных bool
S : bool; //входная переменная с типом данных bool
end_var
if R > S then RS_trig := false; end_if
if S > R then RS_trig := true; end_if
end_function

Всё можно сделать, не хочет запоминать, можно заставить. Скрин==>> 64908


function RS_trig: bool; //RS триггер и тип данных выхода bool
var_input //объявление входных переменных
R : bool; //входная переменная с типом данных bool
S : bool; //входная переменная с типом данных bool
x : bool; // переменная с типом данных bool
end_var
if S then RS_trig := true; x := true; end_if
if x then RS_trig := true; end_if
if R then RS_trig := false; x:= false; end_if
end_function

Dimensy
28.12.2022, 15:55
Всё можно сделать, не хочет запоминать, можно заставить.


RS_trig := (S or X) and not R;

kondor3000
28.12.2022, 16:03
RS_trig := (S or X) and not R;

Не стал так писать, новичку не понятно будет.

Сергей0308
28.12.2022, 16:03
Всё можно сделать, не хочет запоминать, можно заставить. Скрин==>> 64908


function RS_trig: bool; //RS триггер и тип данных выхода bool
var_input //объявление входных переменных
R : bool; //входная переменная с типом данных bool
S : bool; //входная переменная с типом данных bool
x : bool; // переменная с типом данных bool
end_var
if S then RS_trig := true; x := true; end_if
if x then RS_trig := true; end_if
if R then RS_trig := false; x:= false; end_if
end_function


Я подобным образом счётчики делал(в виде макроса) ещё когда ST(в ОЛ) в помине не было, в смысле, значение сохранялось во внешней переменной(не в макросе счётчика), по необходимости можно и энергонезависимость добавить. Короче, так можно что угодно сделать, без всякого ожидания "чуда".
Мне не понятно, чего все выжидают!

melky
28.12.2022, 16:37
Сергей0308 наличие ST в FBD, больше одного выхода с блока это точное ожидание чуда :)

Филоненко Владислав
28.12.2022, 16:58
Сергей0308 наличие ST в FBD, больше одного выхода с блока это точное ожидание чуда :)

в функциональном блоке на ST может быть больше одного выхода. В FBD есть ограничения, и только 1 выход на FB

melky
28.12.2022, 17:16
FBD - функциональны блок
Сейчас ST вообще же блоки не поддерживает? только функции

ну тут может терминологии хромают и недопонимание? FB - просто функция, 1 выход, FBD - по сути макрос, выходов сколько поставим.
Ну или применительно к ОЛ английской версии приведите, в русской то понятия сокращения в латинице нет. Макрос, Функция только

Валенок
28.12.2022, 18:57
..больше одного выхода с блока это точное ожидание чуда :)
Ну если "больше одного" это несколько булей и/или числа в небольших диапазонах, то чудо можно сделать ректально - внутри фунции упаковать (там удобно с битами), а к выходу прилепить распаковщик. Можно и распаковщики на ST - каждая отдельная функция возьмет своё из общей маски и выдаст нужное.

--
Я не принуждаю к такому

melky
29.12.2022, 00:17
Не, что-то типа Q и PT у таймера, или Код ошибки и далее стековый выход к основному. В общем как сейчас у макросов, только код на ST внутри.
Просто функции с 2+2 не так интересны, а упаковывать и потом распаковывать это больше для инвалидов :) (костыли называются)

ну и понаглею немного - возможность работы с COM портом для организации обмена не только с Modbus устройствами, хотя бы чтобы ПР с несложными протоколами справлялся.... :)

bayk
29.12.2022, 06:02
Не, ну нативная работа с сом это вы уже совсем палку перегнули

Валенок
29.12.2022, 09:04
... а упаковывать и потом распаковывать это больше для инвалидов :) (костыли называются)..
Не мы такие, среда такая..

Упаковывать снаружи ненужно, все таки входов много.
Q и ET(видимо) - было б совсем просто, но нет TIME() (GetTickCount) и памяти. В конце концов часто ли нужно больше одного месяца?
Да, память заменит "обратная связь", а TIME() обычный счетчик снаружи или канкан с блинком - но это костыли еще большие.

А упомянутый Вами код ошибки в значении ai как раз пример упаковки 2х условно независимых и даже не бульных переменных (здесь потребовались бы прямая память и/или указатели)
//вопрос прямой памяти можно было бы решить, опять же ректально, сняв ограничения на использование разнотипных переменных по одному адресу регистра в слейве. Или уже есть?



Кстати
От ST был бы не плохой обратный подарок в квадратики если бы в художественных полях можно было бы обращатся к битам как в в ST
(если что - я автор предложения)

melky
29.12.2022, 09:10
Валенок да я образно про таймер.

bayk с чего вдруг перегнул? отправить массив, принять массив, посчитать простую CS на основе принятого. Я не говорю про ASCII там варианты и т.д. а хотя бы про простые байтовые...
Сами форум посмотрите - как прикрутить весы к ПР200 сколько тем было?

lagutin
29.12.2022, 10:28
Может и был уже счетчик, но посмотрев постом ранее на тригер, по образу и подобию сделал счетчик. И работает.
--------------------------------------------------

function funcSTU: udint; //имя функции и тип данных выхода
var_input //объявление входных переменных
inputVar : bool; //входная переменная с типом данных bool
min, max, mrom : udint;
end_var
var //объявление локальных переменных
temp : udint ; //локальная переменная с типом данных real и начальным значением 13.3
end_var
temp:= mrom;
funcSTU:= mrom;
if funcSTU < min then
funcSTU := min;
mrom:= funcSTU;
end_if

if inputVar and temp = funcSTU then
temp:= funcSTU;
funcSTU := mrom + 1;
if funcSTU > max then
funcSTU := min;
// funcSTU := 0 ;
end_if
end_if
if not inputVar then
funcSTU := mrom;
end_if
end_function
-----------------------------------------------------------
А вот детектор фронтов можно на ST сделать???
И где теги кода кнопочка? Или вручную дописать нужно или как?64926

melky
29.12.2022, 11:14
По идее можно и детектор фронтов делать, но так же обратную связь тянуть, как бы смысл уже?

Сергей0308
29.12.2022, 11:51
Я счётчики придумывал, потому что таких не было в ОЛ! В принципе что угодно можно довести до абсурда, непонятно зачем этим заниматься?
Помните как Портос говорил: Я дерусь, потому что я дерусь!

https://www.youtube.com/watch?v=uddYLe_9aAA

Dimensy
29.12.2022, 11:57
А вот детектор фронтов можно на ST сделать???

Можно


funR_trig := Clk and not M;
funF_trig := not Clk and M;
64928

Но зачем, если в ST их не применить, а в FBD и так есть

А в счетчике не хватает сброса

Рогов Алексей
29.12.2022, 12:36
День добрый!

Я спрашивал про присвоение значения переменной во почему -

function test: bool; //тестовый и тип данных выхода bool
var_input //объявление входных переменных
A : bool; //входная переменная с типом данных bool
B : bool; //входная переменная с типом данных bool
C : bool; //входная переменная с типом данных bool
end_var
if A = true then test := true; end_if
if B = true then test := true; end_if
if C = true then test := false; end_if
end_function

Как видно двоеточий нет и программа работает, а на двоеточие ругается
Спасибо,

Сергей0308
29.12.2022, 13:03
Подскажите как это 64929будет на ST?

Так изначальная картинка сильно усложнена, можно без усилий сделать проще в 2-3 раза!
А, зачем на ST, в целях образования?
Наверно там есть функция вставки(записи) бит, аналогичная как в нормальном ОЛ!

petera
29.12.2022, 13:08
Так изначальная картинка сильно усложнена, можно без усилий сделать проще в 2-3 раза!
А, зачем на ST, в целях образования?
Наверно там есть функция вставки(записи) бит, аналогичная как в нормальном ОЛ!

Пока я рисовал, сообщения уже нет?
64930

function bm_WeekDay: udint; //имя функции и тип данных выхода
var_input //объявление входных переменных
Mon : bool; //входная переменная с типом данных bool
Tue: bool; //входная переменная с типом данных bool
Wed: bool; //входная переменная с типом данных bool
Thu: bool; //входная переменная с типом данных bool
Fri: bool; //входная переменная с типом данных bool
Sat: bool; //входная переменная с типом данных bool
San: bool; //входная переменная с типом данных bool
All: bool; //входная переменная с типом данных bool

end_var

If All Then bm_WeekDay:= 254;
else
bm_WeekDay.1:= Mon;
bm_WeekDay.2:= Tue;
bm_WeekDay.3:= Wed;
bm_WeekDay.4:= Thu;
bm_WeekDay.5:= Fri;
bm_WeekDay.6:= Sat;
bm_WeekDay.7:= San;

end_if;
end_function
Может сам догадался?

Dimensy
29.12.2022, 13:09
Как видно двоеточий нет и программа работает, а на двоеточие ругается

На какие двоеточия ругается?

Эдуард_Н
29.12.2022, 13:22
Пока я рисовал, сообщения уже нет?
64930

function bm_WeekDay: udint; //имя функции и тип данных выхода
var_input //объявление входных переменных
Mon : bool; //входная переменная с типом данных bool
Tue: bool; //входная переменная с типом данных bool
Wed: bool; //входная переменная с типом данных bool
Thu: bool; //входная переменная с типом данных bool
Fri: bool; //входная переменная с типом данных bool
Sat: bool; //входная переменная с типом данных bool
San: bool; //входная переменная с типом данных bool
All: bool; //входная переменная с типом данных bool

end_var

If All Then bm_WeekDay:= 254;
else
bm_WeekDay.1:= Mon;
bm_WeekDay.2:= Tue;
bm_WeekDay.3:= Wed;
bm_WeekDay.4:= Thu;
bm_WeekDay.5:= Fri;
bm_WeekDay.6:= Sat;
bm_WeekDay.7:= San;

end_if;
end_function
Может сам догадался?

Спасибо, сам догадался.

Рогов Алексей
29.12.2022, 13:28
После входных переменных if A := true

function test: bool; //тестовый и тип данных выхода bool
var_input //объявление входных переменных
A : bool; //входная переменная с типом данных bool
B : bool; //входная переменная с типом данных bool
C : bool; //входная переменная с типом данных bool
end_var
if A := true then test := true; end_if
if B := true then test := true; end_if
if C := true then test := false; end_if
end_function

petera
29.12.2022, 13:32
После входных переменных if A := true

function test: bool; //тестовый и тип данных выхода bool
var_input //объявление входных переменных
A : bool; //входная переменная с типом данных bool
B : bool; //входная переменная с типом данных bool
C : bool; //входная переменная с типом данных bool
end_var
if A := true then test := true; end_if
if B := true then test := true; end_if
if C := true then test := false; end_if
end_function

Все правильно ругается!
Зачем оператор присваивания(:=) вместо проверки условия (=)
Нужно
if A = true then test := true; end_if
if B = true then test := true; end_if
if C = true then test := false; end_if

Но вообще это масло масляное, нужно быть проще
if A then test := true; end_if
if B then test := true; end_if
if C then test := false; end_if

Рогов Алексей
29.12.2022, 13:36
Все правильно ругается!
Зачем оператор присваивания(:=) вместо проверки условия (=)
Нужно
if A = true then test := true; end_if
if B = true then test := true; end_if
if C = true then test := false; end_if

Но вообще это масло масляное, нужно быть проще
if A then test := true; end_if
if B then test := true; end_if
if C then test := false; end_if

Спасибо, я так тоже делал, разбираюсь с правописанием

kondor3000
29.12.2022, 15:10
Выкладываю новые функции на ST, версия OWEN Logic2.6.345

Sin_Cos_Tg_CTg_ArcSin_ArcCos_ArcTg (x)

Рогов Алексей
29.12.2022, 15:23
Да, я понял

Когда Ладдер изучал, нашёл книжку от старинного контроллера Аллен Бредли 1982 года - хоть на английском, но лучше и доходчивей никто не писал - по моему мнению, конечно - у всех разное восприятие информации

Поэтому для ST от Овен мануал всё-таки нужен. Хороший, доходчивый, с разбором примеров.

kondor3000
29.12.2022, 15:39
Да, я понял

Когда Ладдер изучал, нашёл книжку от старинного контроллера Аллен Бредли 1982 года - хоть на английском, но лучше и доходчивей никто не писал - по моему мнению, конечно - у всех разное восприятие информации

Поэтому для ST от Овен мануал всё-таки нужен. Хороший, доходчивый, с разбором примеров.

Просто вы начали не с того, изучать ST надо было сразу на ПЛК.
На ПР он сильно урезан. Там есть не больше 1/4 настоящего ST.

lagutin
29.12.2022, 16:29
Просто вы начали не с того, изучать ST надо было сразу на ПЛК.
На ПР он сильно урезан. Там есть не больше 1/4 настоящего ST.
А где бы узнать, что поддерживается? Вот к примеру побитовое умножение.. 5&6 - и как я только не писал. Все не хочет, ошибку пишет. Может синтаксис какой другой?

kondor3000
29.12.2022, 16:56
А где бы узнать, что поддерживается? Вот к примеру побитовое умножение.. 5&6 - и как я только не писал. Все не хочет, ошибку пишет. Может синтаксис какой другой?

Скачайте CODESYS версия 2.3.9.41 (Русифицированная версия), таргеты ПЛК и библиотеки с сайта, создайте новый проект, с любым таргетом например ПЛК100-М, основную программу PLC_PRG на ST и упражняйтесь,
по справке F1 там много информации по ST.
https://owen.ru/product/codesys_v2
Там же по ссылке обучающие видео, посмотрите хотя бы первые 10

lagutin
29.12.2022, 17:01
Это да. Но мне нужно именно на ПР200.

kondor3000
29.12.2022, 18:44
Это да. Но мне нужно именно на ПР200.

Вы лучше напишите, что вы хотите сделать, вам помогут.

EFrol
29.12.2022, 18:54
F1 в редакторе функций:
64941

petera
29.12.2022, 18:55
А где бы узнать, что поддерживается? Вот к примеру побитовое умножение.. 5&6 - и как я только не писал. Все не хочет, ошибку пишет. Может синтаксис какой другой?

5 AND 6
пробовали?

lagutin
30.12.2022, 08:22
Да. Пишет, как на картинке. Но результат умножения то целое по идее должно быть?64957

Dimensy
30.12.2022, 09:13
А интересно, как это 64961 сочетается с этим 64962?
Раньше, вроде побитово логические операции выполнялись