Когда я случайно так сделал - написал "Ошибка компиляции".
Пробовал специально на пустом проекте - он даже запустился в эмуляции/
Похоже, что компилятор это понимает как то, что переменная подключена одновременно ко входу и к выходу блока
Вид для печати
я не спорю про удобство. Вот только это удобство возникает при унификации вывода. Опять же, 0.00000001 выглядит хуже, чем 1.0e-8, но 0.01e-6 выглядит еще лучше, хоть и не соответствует стандарту. Но проблема не в этом, а в том, что при отладке числа на блоках постоянно меняют способ отображения. То стандартный, то простая десятичная дробь, то экспонента меняется. Постоянно меняются порядки. Ну, невозможно адекватно оценивать числа, когда они ежесекундно меняются так: 9,82 -> 1.01e+01 -> 1.23e+02... Здесь не научная статья, а представление чисел должно быть максимально удобно для анализа. Вот я и предложил форматировать следующим образом: 0,752 -> 9,82 -> 10,1 -> 123,0 -> 1,05e+03... Т.е. экспоненты кратны 3-м например. Это дает, что близкие значения очень редко меняют экспоненту (кстати, даже эти изменения тоже можно сократить - например, если текущая экспонента всего на 1 отличается от предыдущей кратной 3, то использовать предыдущую). Наиболее популярные значения в тысячных долях в пределах тысячи представляются в виде классической десятичной дроби (0,001 ... 999,999). Это очень удобно для разработчика схем в OL, и сделать это не сложно для программистов.
Если ну принципиально хочется стандартное отображение, то никто не запрещает отказаться от простого вида в пользу 1,000e+00. Но только с сохранением кратности порядков, чтобы скакания не было, а то полумера получается.
Всем доброго времени суток!
Я надеюсь этот форум читают разработчики данного софта. :)
Возможно я сейчас задам очень глупый вопрос, но тем не менее. Почему в данной программе нет функции скажем так описания проекта, вернее что то подобное есть "Сведения о проекте", но там нет текстового поля куда я смог бы руками написать те изменения которые я в нес в текущую версию программы, что бы я ее скажем открыл через полгодика и смог понять что там было изменено, сейчас приходится все это впихивать в имя файла, что не айс, не понимаю, неужели так трудно добавить текстовое поле, что бы можно было за комментировать какие нить детали, не, я понимаю, эти комменты можно по на вставлять в саму схему проекта, но я не хочу перегружать поле избыточной информацией.
В общем сейчас это выглядит вот так:
Вложение 81623
Вложение 81624
Но хотелось бы что бы это выглядело примерно так, как в Zelio Logic:
Вложение 81625
Это трудно сделать? :)
Ну хоть что то, но все равно хотелось бы что бы было поле куда можно забить более подробную информацию
Ну вот это плохо, не знаю может для кого то и хорошо, что в реле можно только залить, а прочитать уже ничего нельзя, какая то инфа все равно должна считываться...Цитата:
В ПР100 и 102 - куда вы залезете чтобы посмотреть название?
В общем, кое-какую информацию по ПР200 и ПР102 можно в Лоджике посмотреть
Вложение 81630
По ПР103 и ПР205, как я уже говорил, скорее всего, в конфигураторе надо смотреть
ПР100 пролетает.
Почему так сделано - программистов из Овен умом не понять, они на какой-то другой планете живут
ага, в каком-нибудь Цинь-Дзяне :)
ПР200, кажется не очень давно, "подружили" с OwenConfigurator. Там можно подключиться к ПР200 в любой момент и посмотреть эти данные.
Не очень уверен, но при включении питания или в системном меню была возможность увидеть на экране сведения об алгоритме.
Если будет поле "Комментарии", доступные только в среде разработки - будет неплохо, я бы нашёл им применение.
Хотя, для ведения реестра изменений, лучше пользоваться чем-то независимым от среды разработки и более распространённым, чтобы представитель эксплуатации после прочтения выдал на руки самую свежую версию.
Добрый день,
Писал в поддержку, решил продублировать сюда.
Использую битовые маски. Для комфортной работы с битами состояния извлекаю их из целочисленной маски и присваиваю ячейкам булевого массива.
Чтобы не делать жесткое присвоение (arrayB[0]:= udintVar.0) решил прогнать целочисленное значение циклом FOR смещая бит в право и записывая его в каждую ячейку массива.
Выглядит следующим образом:
var_input
udintVar: udint;// битовая маска
end_var
var
udintArray: array [0..15] of bool; // булевый массив для записи каждого из битов состояния
selectIn: udint; // итератор цикла
end_var
for selectIn := 0 to 15 do
udintVar:= shr(udintVar,selectIn);
udintArray[selectIn]:= udintVar.0;
end_for
В итоге провожу тест:
целочисленное 1 = bit0 true
целочисленное 2 = bit1 true
целочисленное 3 = bit0 true и bit1 true
целочисленное 4 = все биты 0, вместо того, чтобы bit2 был true.
Соответственно все, что больше 4 в десятичном виде, уже откровенно не совпадает с действительность.
Сделал подобное при помощи FBD SHR и EXTRACT и все работает корректно, а в рамках ST не работает.
Либо я делаю что-то неверно, либо это баг.
У вас проблема здесь: udintVar:= shr(udintVar,selectIn);
Вы сдвигаете на бит и запоминаете число, потом в этом новом числе вы сдвигаете на два бита и т.д.
В общем,
Код:var //объявление локальных переменных
bitArray : array [0..15] of bool;
flag : udint;
i : udint;
end_var
for i := 0 to 15 do
flag := shr(bitMask, i);
bitArray[i] := flag.0;
end_for
Почему в окне слейв-сетевых переменных нет столбца "Использование в проекте" как на вкладке с обычными переменными?
Причём в слейв переменных это более важно, т.к. неподключенные сетевые переменные "выпадают" из области памяти слейва и напрочь рушат весь опрос мастера.
Вот и сидишь тычешь в каждую переменную списка, проверяя наличие ссылок на неё - просто капец как удобно.
Или сделайте так, чтобы все объявленные слейв-сетевые переменные были доступны для опроса, независимо от участия их в схеме
Добрый день.
При выполнении арифметического действия в программе (вычитание), в разных строчках программы переменная имеет разное значение, меньше на 1. При этом с переменной в этом месте программы ни каких действий не производится.
Пробовал переносить строчку в разные места программы, удалял и из новых компонентов писал строчку, ни чего не помогает. Эта ошибка проявляется как при выполнении программы в контроллере, так и в режиме симулятора.
Прошу подсказать, где ошибка.
Вложение 81804
Среда разработки Овен Лоджик 2.8.362.0
ПР103-24.1610.03.X.0
Вы в пошаговом режиме смотрите, так выходная переменная уже получила новое значение, а входная получит в следующем цикле.
А вообще вычитание (любое действие) надо делать в одном месте, а не в 3 как у вас, на пол страницы размахали вместо 2 элементов.
Либо вы просто перемудрили в программе, тогда выкладывайте проект.
делал и в пошаговом и в непрерывном цикле видно, что из-за разницы значений уменьшается общий результат вычислений.
То что сделано на несколько шагов, на скриншоте видно, что одна и таже переменная имеет разные значения. Так быть не должно.
Столько много действий - пытался выловить почему происходит ошибка.
Куда выложить проект?
пока на скрине всё логично, сперва считается разность, далее идет селектор который присваивает переменной Уменьшаемое значение из переменной СумматорРасходомерСмолы Вложение 81805
Прикладываю проект
Всё как и сказал, работа не синхронизирована, выходы уже получили число 25, а входы (где число 24) получат в следующем цикле.
Но 1 шаг сделать нельзя, потому что счётчик насчитает ещё 25, до 50.
Вот смотрите, период BLINK увеличил с 2 мс до 200, сразу стало видно, Вложение 81807
что у вас периодически уменьшаемое, становится меньше вычитаемого
А если поставить 20 мс, то через раз переменные становятся равны, то есть на вход успевает записаться число. Вложение 81808
А через раз также разница в 1.
Но дело не в этом, при 2 мс всё работает, а разные числа из за отсутствия синхронизации. Вложение 81810
Вот скрин, перенёс Разность -1 и Разность в одно место и всё чётко считает
Вложение 81812
Есть счет еще в одном месте, выделил зеленым.
Так же считает правильно.
Красным выделил, где считает неправильно.
Думаю вопрос не в шагах симулятора, т.к. в режиме реального времени на ПР103 эта ошибка так же проявляется.
На одном проходе программы эти строки должны были посчитаться одинаково. Если они не считаются одинаково, то как можно сказать, что в ходе работы оно будет считаться правильно.
Где здесь ошибка.
Это не ошибка - это вопрос последовательности обработки ФБ (которая в OL устанавливается по своим алгоритмам и никак не отображается к сожалению).
Там где у обведено красным - подключите вместо переменной "Уменьшаемое" непосредственно выход блока SEL и все будет считаться так. как ожидаете
Обновление 2.9 Перестало работать быстрое копирование имен переменных Ctrl С - Ctrl V.
Пришлось откатиться на последнею 2.8. Вбивать полностью имя для каждой новой переменной, крайне не удобно.
Проверил, вставка Ctrl С - Ctrl V нормально работает. Вставляет и текст и блоки.
А ещё, Реализован режим симуляции кода для языка ST, теперь можно в работе тестировать Вложение 81819
Где у вас не копируется? Скрином покажите
Вот мой скрин, накопировал блоков и текста без проблем Вложение 81820
Ютуб не работает. Как же все бесит!!!:(
Ладно. Работаем в 2.8 ждем следующего обновления. Но на этом ноуте я с 2020 работаю, ни с одним обновлением такого не было.
Версия 2.9. Идея распределить переменные по папкам хорошая, но невозможность свернуть эти папки в панели переменных сводит на нет эту идею
Вложение 81829
Я разочарован! Это не то, что я ожидал, и не то окно, как я его представлял, когда мы с Максимом Денисовым всё обсуждали.
Попробуй ради интереса нажать + и - на NumPad'е, когда курсор будет стоять на папке в дереве.
Если это стандартный контрол "Дерево", то он должен такие кнопки обрабатывать штатно, даже если плюсиков нет.
Ужас какой то а не обновление. Ошибка драйвера! Не могу связаться с ПР200.
Что натворили??? Было же все нормально.Вложение 81850
2 часа уже на объекте бьемся. До обновы все в норме было.
Разрабы что делать то?
Полный снос и переустановка не помогли!!!