Вопросы чЯйника

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

Re: Вопросы чЯйника

Сообщение mim (mim) » 06 сен 2017, 08:34

Barmaley_GMN писал(а):Я так понимаю, что программа генерит одни и те же имена (переменные) для обоих CAN модулей, что и приводит к ошибкам?
Наконец-то пошла мысль... Входишь в нужный компонент, находишь все константы и переменные и изменяешь им имя, например добавляя "_1", и проверяешь... Результат покажет - как у них написан код...
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе

Re: Вопросы чЯйника

Сообщение Barmaley_GMN (Barmaley_GMN) » 06 сен 2017, 09:21

Mim, поменять - не проблема. Проблема разобраться кто есть кто. А потом отловить их. Ведь даже на стадии инициализации их около 50. А что будет, когда программа будет написана...
Возможно существует более простой способ.
Матриксы пишут, что 6 поддерживает "дабл" из коробки. Пока попробую с ним.
Ник: Barmaley_GMN
Имя: Barmaley_GMN
(Герой!)
Практикант
Практикант
Информация о пользователе

Re: Вопросы чЯйника

Сообщение mim (mim) » 06 сен 2017, 09:26

Barmaley_GMN писал(а):Матриксы пишут что 6 поддерживает "дабл" из коробки.
Ок...

Менять все не нужно... только те, на которые ругается, и только в компоненте на столе...
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: Вопросы чЯйника

Сообщение Barmaley_GMN (Barmaley_GMN) » 06 сен 2017, 10:22

mim писал(а):Менять все не нужно... только те, на которые ругается, и только в компоненте на столе...

Вот тут реально спасибо!
Попробую что из этого получится. Но сомневаюсь, что в железе заработает.
Ник: Barmaley_GMN
Имя: Barmaley_GMN
(Герой!)
Практикант
Практикант
Информация о пользователе
Вернуться наверх

Re: Вопросы чЯйника

Сообщение щербатый (щербатый) » 07 сен 2017, 20:14

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

Появилась некоторая проблема. Пока не могу толком сказать, чего же хочу. Но чувствую что на правильном пути. Понимаю, что правильная постановка задачи, наполовину ее решение. Изложу как я ее сейчас понимаю. Суть задачи, что меня заинтересовала вот в чем.

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

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

Вот как бы уйти от языка логических уровней. То есть ноль единица. А прийти к языку событий. Нажата или не нажата кнопка. И уже в этом событии указывать что это такое. То есть что будет по нажатию: логическая единица, или логический ноль.

Приложил максимально простой проект (с тем, что бы было по возможности ясно, о чем же речь). Предположим. Исходно по нажатию кнопки дают логические единицы. И тогда если кнопки не нажаты, алгоритм пойдет по ветке 0. Нажата кнопка ноль, алгоритм пойдет по ветке один. Нажаты обе кнопки, по ветке 3. И тд.

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

То есть в самом начале только в одном месте указать полярность входных сигналов. С тем, что если они (полярности) изменяться. Не приходилось бы перелопачивать весь алгоритм.
У вас нет доступа для просмотра вложений в этом сообщении.
Последний раз редактировалось щербатый 08 сен 2017, 08:03, всего редактировалось 1 раз.
Ник: щербатый
Имя: щербатый
Супер разработчик
Супер разработчик
Информация о пользователе
Вернуться наверх

Re: Вопросы чЯйника

Сообщение agent_serg (agent_serg) » 08 сен 2017, 00:14

Именно так организована аппаратно-программная связка в промышленных контроллерах.
Принцип простой: сначала считываются состояния всех входных данных (входов) и их значения сохраняются в специальной области памяти. Это называют "образ процесса". Вся логика/математика основной программы оперирует не реальными входами, а данными из "образа процесса". По ходу обработки логики/математики формируются "выходные данные образа процесса" и только в самом конце цикла обработки программы из "выходных данных образа процесса" формируются состояния реальных выходов.

В FC первым в основном цикле программы я ставлю вызов макроса входов. В этом макросе читаю входы и присваиваю их состояния переменным, например, битовым In_01, In_02 и т.д.
Далее, в теле программы используются значения In_01, In_02 и т.п. Если необходимо изменить (инвертировать) логику входа, то делается это в одном единственном месте макроса входов. Именно так Вы и хотите.
Такая же "петрушка" и с выходами, только вызов макроса выходов стоит последним в основном цикле программы. Бывает, что использую выходы с NPN ключами, а бывает, что с PNP. Часто, за основу нового проекта берётся уже отработанный старый алгоритм (программа), только адаптируется к конкретной аппаратной реализации на NPN или PNP ключах.

Как-то так...
Делай не как хочется, а как надо и тогда всё будет как хочется...
-------------------------------------------------------------------------------------------------------
FC AVR v5.5.2.1 / Proteus v7.8 SP2 / Программаторы: Triton+ и USBasp / Win7 SP1 x64
Аватар пользователя
Ник: agent_serg
Имя: agent_serg
(White City)
Ученик
Ученик
Информация о пользователе
Вернуться наверх

Re: Вопросы чЯйника

Сообщение andrewproffi (Андрей) » 08 сен 2017, 03:22

другой вариант (но это не точно) использовании компонента switch флоукода, у него есть выбор active high или active low логический уровень. я не пользуюсь этим компонентом, так что чтобы убедится нужно проверить в протеусе или в железе
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

Re: Вопросы чЯйника

Сообщение щербатый (щербатый) » 08 сен 2017, 05:50

Ребята спасибо.
agent_serg писал(а):Именно так организована аппаратно-программная связка в промышленных контроллерах.

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

agent_serg писал(а):В FC первым в основном цикле программы я ставлю вызов макроса входов. В этом макросе читаю входы и присваиваю их состояния переменным, например, битовым In_01, In_02 и т.д.
Далее, в теле программы используются значения In_01, In_02 и т.п. Если необходимо изменить (инвертировать) логику входа, то делается это в одном единственном месте макроса входов. Именно так Вы и хотите.
Такая же "петрушка" и с выходами, только вызов макроса выходов стоит последним в основном цикле программы. Бывает, что использую выходы с NPN ключами, а бывает, что с PNP. Часто, за основу нового проекта берётся уже отработанный старый алгоритм (программа), только адаптируется к конкретной аппаратной реализации на NPN или PNP ключах.

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

agent_serg писал(а):В FC первым в основном цикле программы я ставлю вызов макроса входов. В этом макросе читаю входы и присваиваю их состояния переменным, например, битовым In_01, In_02 и т.д.

Направление понятно, спасибо. А нельзя ли какой то примерчик попроще. С тем что бы максимально ясно\понятно разобраться с сути вопроса.

andrewproffi писал(а):другой вариант (но это не точно) использовании компонента switch флоукода, у него есть выбор active high или active low логический уровень. я не пользуюсь этим компонентом

Андрей спасибо, мысль интересная. Я тоже не использую этот компонент, во всяком случае пока. Опрос входных сигналов всегда пишу ручками.
Ник: щербатый
Имя: щербатый
Супер разработчик
Супер разработчик
Информация о пользователе
Вернуться наверх

Re: Вопросы чЯйника

Сообщение Вячеслав (Вячеслав) » 08 сен 2017, 06:08

Можно попробовать так:
#define knob1_ ON 1;
#define knob1_OFF 0;
Далее в программе использовать логические переменные knob1_ ON и knob1_OFF. При изменении логики включения кнопки - 1 и 0 меняем местами в одном месте. Define можно задавать в основной программе, конкретном макросе или в #include...
Аватар пользователя
Ник: Вячеслав
Имя: Вячеслав
(Саратов)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

Re: Вопросы чЯйника

Сообщение щербатый (щербатый) » 08 сен 2017, 07:58

Вячеслав писал(а):Можно попробовать так:

Очень интересно, пока не работал с define, видимо уже пора. Вот нашел неплохое описание на него https://msdn.microsoft.com/ru-ru/library/teas0593.aspx ну и у нас на форуме конечно. Буду изучать.
Вячеслав, примерчик можно? А там я уже сам позанимаюсь поразбираюсь. Мне так проще будет, идти по протоптанному.
Я там выше выкладывал файл. Его можно брать для основы. Ну может и свой какой подходящий есть.
Ник: щербатый
Имя: щербатый
Супер разработчик
Супер разработчик
Информация о пользователе
Вернуться наверх

Пред.След.

Вернуться в ПЕСОЧНИЦА

Кто сейчас на форуме

Пользователь просматривает форум: vladimir21