сразу разъясните, этот поиск нужной переменной из-за того что всё впритык? Или по мимо этого схема на весь экран не влазит еще?
Вид для печати
Вложение 74776
Вот так например.
Ничего не упустил?
Разумеется куч надо избегать, но не всегда так получается. Тем более что этот шаг соответствует стандартным расстояниям между линиями блоков.
Про цвета писал выше, они должны быть не броскими.
Опять же, я как инженер и архитектор систем, вижу здесь следующую задачу: сделать НАСТРАИВАЕМЫЕ представления объектов.
По аналогии с тем, как в текстовых редакторах исходного кода можноо настроить шрифт, цвет фона и текста для разных сущностей: ключевых слов, переменных, строк, комментариев.
Вот в Owen Logic давно просится система настроек (резервное копирование проекта при сохранении, расположение папки макросов), где пользователь мог бы настраивать внешний вид объектов под себя. Тогда не надо будет спорить: кто-то настроить вид в полосочку и с рамкой, кто-то в виде другого цвета фона и так далее.
Вот тут не соглашусь. Должен быть единый стандартный вид, чтобы схема была понятна всем, а не только её хозяину. Про полосочки - идею развил Dimensy, в виде пунктирной рамки, по аналогии с линией задержки. Чтобы её сохранить я и предложил полосатый фон, что конечно сложней в реализации. Изначально я предполагал просто другой цвет фона.
Что касается организации макросов, тут согласен. Только знакомлюсь со средой, и мне сразу показалось очень неудобным и непонятным текущая организация. Фиг че найдешь.
Почему бы не сделать раздел библиотека пользователя, в которую он набивает СВОИ макросы? И она не должна быть привязана ник какому проекту. Потом нужные макросы просто выдергиваются в поле проекта, и работа идет с ними. А сейчас все валится в проект, захламляется, и потом надо выискивать и чистить то, что не нужно.
Вложение 74782
Предлагаю итоговый вариант.
Закрашенный треугольник слева подразумевает запись переменной в конце цикла
Бледно-зеленые - экранные, бледно-розовые - энергонезависимые
Библиотека имеется
Вложение 74783
Вложение 74784
Ты не первый, кто начинает предлагать доработки Owen Logic. Я тоже много предлагал с матами. Часть из моих идей пойдёт в новое окно переменных Owen Logic.
Однако ОВЕН делает всё медленно и тяжко: до последних двух лет Owen Logic развивался несистематически, и ща там происходит много внутренних изменений и рефакторинга кода.
Я давно хочу, чтобы у Owen Logic были настройки, где можно указать папку для хранения макросов и ещё чего-нить под себя поднастроить.
А у меня вопрос, есть поиск переменных на поле?
Есть возможность из таблицы переменных перейти на поле с подсветкой этой переменной на поле программы ?
Или все только глазками?
melky Из той таблицы переменных, которая открывается в отдельном окне - нет.
А вот из списка переменных слева - да. Там под переменной есть список ссылок на неё, и если нажать на ссылку - то переменная на схеме подсвечивается, а схема прокручивается так, чтобы её было видно.
Есть вот такое
Вложение 74786
Dimensy, Cs-Cs спасибо, подойдет. А то глазами запарился искать где, что не так.
А ведь могли сделать простое по Ctrl+F и далее F3 как в большинстве программ штатно работает.
Ха. Так вот она где "локальная библиотека". А я все глаза сломал в её поисках, и непонятках куда пропадает загруженное. Может все-таки стоит придерживаться одинаковых названий?
И опять одни неудобства.
Почему нельзя работать в среде не закрыв менеджер компонентов? Это очень неудобно.
Где хранится эта библиотека? Я бы хотел таскать её на флешке, и работать с ней просто указав к ней путь в среде.
Нет простого перетаскивания компонентов мышью туда/обратно. Неудобно.
Так и не понял как их вытянуть оттуда в проект.
И раз пошла такая пьянка, очень удивляет отсутствие отрицательных целочисленных
Для отрицательных целочисленных есть макросы пересчёта, возможно со временем они и появятся.
Функции FLOAT_TO_INT и INT_TO_FLOAT на ST и FBD https://owen.ru/forum/showthread.php...=9&p=429067#84
Мой вариант чем не устроил, вроде и универсальный, в смысле диапазона INT/DINT, здесь последний раз выкладывал: https://owen.ru/forum/showthread.php?t=25067&page=77
Вложение 74847
По умолчанию INT16, в смысле, он, мне кажется, чаще встречается, но там присутствуют настройки в свойствах макроса, можно и в INT32 преобразовать, об этом всё там написано(по ссылке), кстати, в проекте и обратная функция присутствует, тоже универсальная, в смысле, диапазона INT/DINT.
Вложение 74848
Вложение 74849
Верхняя картинка преобразование в INT16, нижняя в INT32.
У меня диапазон ограничен, поэтому на верхней картинке максимальное значение в отрицательную сторону показывает!
Ваши предложения, в смысле, какое должно быть значение, Вы наверно первую картинку посмотрели, на второй преобразование в INT32:
Вложение 74850
Если нет, может Вы какой другой код имели ввиду, кроме дополнительного кода бывает ещё прямой и обратный код, в одной из тем я макрос выкладывал, где тип кода можно выбирать!
Естественно. Если учесть время моего ответа и вашего добавления
Позже еще посмотрю
Сергей верхний макрос INT-FLOAT считает не правильно, скрин Вложение 74852 вот его модернизировал Вложение 74851
Перевод во FLOAT надо делать после вычитания, иначе теряется часть последних цифр. При чём на пределах -1 000 000, -10 000, -1000 разные цифры в конце.
Число 4294867296 это -100 000
Тогда и у Вас неправильно, потому что цифры совпадают с моими!
И Вы не макрос модернизировали(что Вы нарисовали), а сделали другой макрос, в смысле обратную функцию, я писал, что в проекте есть и обратная функция, в смысле преобразование INT_TO_FLOAT:
Вложение 74853
И, обратно значения совпадают с вашими, короче, Вы на этом основываете свои заключения, что неправильно считает?
И, почему то всем лень по ссылке перейти и посмотреть, короче, чтобы никого не утруждать кишки и этого макроса:
Вложение 74854
Почти 2 года назад выложил!
Прочитали бы пару строчек по ссылке, что я давал, что там написано:
Вложение 74855
Переписал функции на ST, теперь они подходят для INT и для DINT Вложение 74859
Посмотрел этот макрос, вот преобразование самого большого по модулю отрицательного числа:
Вложение 74863
Никакой погрешности там нет! Зачем было обманывать, мне не понятно в принципе!
Этот макрос для преобразования диапазона INT(INT16), для преобразования DINT(INT32) он не подходит!
Собственно для этого и усовершенствовал макрос, он чуть ниже, я его на скриншоте показывал(к которому у Вас претензий нет), он уже универсальный в смысле диапазона INT(INT16)/DINT(INT32), настройки в свойствах макроса!
Короче, не заметил настроек у вашего макроса, он универсальный или только диапазона DINT(INT32)?
Обычно используется диапазон INT(INT16), например во всех овенских ТРМ-ах!
Ну, это "плата" за универсальность, в смысле никто не запрещает создать отдельные макросы для каждого диапазона!
В моём варианте это минимальная плата, всего один SEL:
Вложение 74867
Что сводит к минимуму необходимость в отдельных макросах!
Мне кажется один из самых универсальных вариантов для расчёта отрицательной части диапазона Пётр из Минска предлагал, в смысле, инверсия(кода числа) + 1, получается значение отрицательного числа по модулю, я свой вариант предложил, мне он проще показался!
в моем варианте это приведение внешних i16 в i32.Цитата:
В моём варианте это минимальная плата, всего один SEL:
и в моем варианте не нужно создавать отдельные макросы для каждого диапазона. Он 1.Цитата:
в смысле никто не запрещает создать отдельные макросы для каждого диапазона!
0 - uЦитата:
инверсия(кода числа) + 1
Если есть функции для 32 битных, типа DINT, то как сказал Валенок, для 16 битных они не нужны. Скрин Вложение 74868
Вы передаёте 1 регистр если число меньше 65535 и через 2 регистра если больше и 32 битными функциями работаете с любыми переменными.
На скрине передан 1 регистр, а функции 32 битные. На ST функции универсальные, выложил выше. Переключатель делать не стал, хотя это возможно.
Я то это в принципе рассматриваю, без привязки к конкретному случаю, в смысле, к сетевым переменным!
ОЛ в принципе не умеет работать с 32 -х битными целочисленными сетевыми переменными в режиме слейв(подчинённого устройства), в смысле, в любом случае, их придётся разделять на два соседних регистра. Может со временем это поправят, но это не точно!
Вроде понял, что Вы хотите! В смысле всегда использовать один макрос DINT(INT32)_TO_FLOAT. Если надо преобразовать INT(INT16), то предварительно преобразовываете его в DINT(INT32).
Короче, мне кажется это не очень логичным, в смысле, чаще всё-таки INT(INT16) встречается, а DINT(INT32) намного реже. Вам надо всё равно знать, что это INT(INT16), иначе правильное преобразование невозможно, уже писал об этом, даже пример приводил! И, мне кажется в FBD проще значение INT(INT16) сразу преобразовать во FLOAT, чем ваше промежуточное преобразование в DINT(INT32). Если Вы говорите в ST это проще, поверю Вам на слово(я в ST не шарю), но это получается частный случай, не более!