Segnetics

Вернуться   Segnetics > Форум Segnetics > Вопросы о программировании

Вопросы о программировании Вопросы, касающиеся программирования на FBD

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2012, 17:58   #31
SSeVa
Member
 
Регистрация: Nov 2008
Сообщения: 50
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Логические головоломки

селектор получилось сократить на 1 блок и избавиться от двух делений
Вложения
Тип файла: msl TripleSensor2.msl (34.3 Кбайт, 20 просмотров)
SSeVa вне форума   Ответить с цитированием
Старый 16.02.2012, 18:10   #32
Sergey Cherevko
Senior Member
 
Аватара для Sergey Cherevko
 
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от SSeVa
не совсем понятно что происходит в вашем макросе при отказе одного из датчиков, а так же не совсем понятно назначение регистров в которых запоминаются значения температур, если в регистрах запоминается последнее правильное значение температуры датчика и оно участвует в дальнейших расчетах температуры, то в итоге вычисленное значение температуры может оказаться далеким от правильного.
Это издержки того, что многое переделывалось в процессе эксплуатации. Изначально было гораздо проще и понятнее.
В регистрах ничего не запоминается. Регистры при аварии или неактуальном значении (если датчик не участвует в вычислениях) обнуляют значение, чтобы оно не влияло на сумму.
Обнуление потом усложнило вычисление минимального значения при отказе, пришлось добавить несколько дополнительных блоков.
Основная изюминка не в вычислениях, там все просто. Основная изюминка в обработке аварий


__________________
Автомат АК - самый распространенный преобразователь стека в очередь
Sergey Cherevko вне форума   Ответить с цитированием
Старый 16.02.2012, 18:15   #33
Sergey Cherevko
Senior Member
 
Аватара для Sergey Cherevko
 
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от ujin
для реал
Респект и уважуха, это красивые решения!


__________________
Автомат АК - самый распространенный преобразователь стека в очередь
Sergey Cherevko вне форума   Ответить с цитированием
Старый 16.02.2012, 19:12   #34
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 761
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от SSeVa
ujin , шикарное решение. Вопрос только, почему для real не подойдет?
есть дробные числа по модулю меньше единицы.
ujin вне форума   Ответить с цитированием
Старый 17.02.2012, 10:55   #35
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 115
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от Sergey Cherevko
У меня на 2 блока больше получилось, зато гораздо функциональнее.
Хотя я тоже в итоге решил задачу "в лоб", не очень красиво...
Один из правильных "не лобовых" вариантов решения. Масштабируется.

http://forum.segnetics.com/showthrea...0872#post10872

35 блоков, количество обслуживаемых датчиков до 255 штук


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.

Последний раз редактировалось Arsie, 26.04.2012 в 17:05
Arsie вне форума   Ответить с цитированием
Старый 17.02.2012, 18:36   #36
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 761
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Логические головоломки

Использовать в качестве критерия работоспособности дисперсию (среднеквадратическое отклонение). Фильтр рабочий. А выбор датчиков только в качестве идеи без проверки работоспособности.
Вложения
Тип файла: msl filter_sigma_long.msl (63.3 Кбайт, 23 просмотров)
Тип файла: msl Выбор правильных датчиков.msl (24.2 Кбайт, 28 просмотров)
ujin вне форума   Ответить с цитированием
Старый 15.05.2012, 15:02   #37
canada
Senior Member
 
Регистрация: Oct 2011
Сообщения: 184
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Логические головоломки

Задачу выбор наименьшего из 10 надо было сюда постить...

Усложним: предположим есть 10 заданий выполняющихся по времени. У каждого задания есть время пуска. Как найти номер следующего задания, которое будет выполнятся?


Пример заданий:

1 задание 9:48
2 задание 14:40
3 задание 12:34
...
10 задание 3:12
canada вне форума   Ответить с цитированием
Старый 15.05.2012, 15:20   #38
canada
Senior Member
 
Регистрация: Oct 2011
Сообщения: 184
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от canada
Усложним: предположим есть 10 заданий выполняющихся по времени. У каждого задания есть время пуска. Как найти номер следующего задания, которое будет выполнятся?...
Мой вариант решения:

Алгоритм таков: сравниваем время каждого задания с текущим временем. Если меншье (т.е. задание прошлое) приравниваем к его часы и минуты к 99.

Все времена сравниваем между собой и находим наименьшее...

Недостатки: много блоков, возможность сравнения токлько в течении суток.
canada вне форума   Ответить с цитированием
Старый 15.05.2012, 16:24   #39
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 761
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Логические головоломки

Дату перевести в другой формат. В переключатели добавить второй переключатель предыдущего, текущего номера. Номер выставлять снаружи макроса. Сравнивать числа Long.
Вложения
Тип файла: msl Data.msl (6.0 Кбайт, 17 просмотров)
Тип файла: msl ~Data.msl (6.7 Кбайт, 11 просмотров)
ujin вне форума   Ответить с цитированием
Старый 15.05.2012, 17:03   #40
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 761
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Логические головоломки

Можно время представлять в UTC. В некоторых контроллерах внутреннее время так и представляется. Количество секунд, прошедших с 01.01.1970 00:00:000 по Гринвичу. Только перевода в UTC и обратно у меня нет.
ujin вне форума   Ответить с цитированием
Старый 15.05.2012, 17:12   #41
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 115
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от ujin
Можно время представлять в UTC. В некоторых контроллерах внутреннее время так и представляется. Количество секунд, прошедших с 01.01.1970 00:00:000 по Гринвичу. Только перевода в UTC и обратно у меня нет.
GetDays * количество секунд в сутках = UTC

На самом деле перевод в UTC не нужен, достаточно по любой формуле упаковать время в Long или Int и сравнить эти числа между собой. Из-за совпадений формул операция сравнения даст верный результат.

Вот как, например, сравнивает Конструктор (фото). Пакует время по формуле ЧАС*100+МИНУТЫ и сравнивает.
Изображения
Тип файла: png Безымянный.PNG (16.8 Кбайт, 53 просмотров)


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 15.05.2012, 17:26   #42
canada
Senior Member
 
Регистрация: Oct 2011
Сообщения: 184
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Логические головоломки

Видимо не верно я обрисовал задачу...
Перефразирую: задачи ЕЖЕСУТОЧНЫЕ, без определения даты.
Например как определить что следующая задача выполнится завтра в 6-00 ?
Т.е. все сравнения времен должны вестись относительно 24 часов, но с учетом перехода через 0-00.
canada вне форума   Ответить с цитированием
Старый 15.05.2012, 17:39   #43
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 115
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от canada
Видимо не верно я обрисовал задачу...
Перефразирую: задачи ЕЖЕСУТОЧНЫЕ, без определения даты.
Например как определить что следующая задача выполнится завтра в 6-00 ?
Т.е. все сравнения времен должны вестись относительно 24 часов, но с учетом перехода через 0-00.
И что от этого меняется? Делаете для дат параллельное сравнение или дату тоже пакуете в тот же Long.

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

Либо интерфейсно разделяете задания так, чтобы они задавались только в пределах дня по возрастанию.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 15.05.2012, 17:46   #44
canada
Senior Member
 
Регистрация: Oct 2011
Сообщения: 184
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от Arsie
Делаете для дат параллельное сравнение ...
Это как? Что Вы имеете ввиду?
canada вне форума   Ответить с цитированием
Старый 15.05.2012, 17:53   #45
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 115
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от canada
Это как? Что Вы имеете ввиду?
Как время сравниваете, так и даты. Математически разницы между ними нет - и то и то является числами


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 16.05.2012, 07:53   #46
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 761
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Логические головоломки

Раз требуется определить, какое событие будет первым по времени считая не от начала суток, а от текущего времени, то придется добавить сравнение с текущим временем. Предлагаю первым делом сделать блок сравнения каждого значения времени события с текущим временем. У тех событий где сравнения отрицательные (события уже прошли) добавить к времени события 24 часа. Затем это все использовать на определение минимального. Соответственно без перевода в UTC или что-нибудь подобное не обойтись. Так как в конце месяца будет 31 и 1 число, в конце года 12 и 01 месяц и так далее.
ujin вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать свои сообщения

BB code is Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +4, время: 10:42.


Версия vBulletin: 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Segnetics 2005 - 2024