for() to, для пользовательского блока

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
Аватара пользователя
VirSpy
Рядовой
Сообщения: 62
Зарегистрирован: 03 дек 2015, 22:40
Откуда: Минск, РБ

for() to, для пользовательского блока

Сообщение VirSpy »

...не знаю, как описать мысли. из курса ZXBasic что-то припоминается...
Суть: при определенном условии (например, и далее в кавычках, - при поступлении данных с КОМпорта) запустить пользовательский блок. Он, в свою очередь, выполняется (сверка принятых данных с массивом), пока не будут достигнуты - А: конец цикла (нет совпадений), Б: условие выхода (есть совпадение с Н элементом). Ну и соответственно на выходе блока имеем bА, bБ и iН . Только после продолжаем выполнение основной программы.
Спасибо.
Последний раз редактировалось VirSpy 08 мар 2016, 14:41, всего редактировалось 1 раз.
Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13 окт 2015, 16:47
Контактная информация:

for() to, для пользовательского блока

Сообщение Олег »

В новой версии программы появился вход En для пользовательских блоков FBD или LD, ну а внутри блока компаратор. Если я правильно понял что вы хотите.
Аватара пользователя
VirSpy
Рядовой
Сообщения: 62
Зарегистрирован: 03 дек 2015, 22:40
Откуда: Минск, РБ

for() to, для пользовательского блока

Сообщение VirSpy »

Не пойму, как зациклить середину блока, и как пропускать весь блок при En=0. На Бейсике начала 90х это выглядело гдето так

89 ...
90 if En=0 to goto 100
91    let Cycl=0
92         if Cycl=9 to goto 99
93                ...
...                     "проверка массива"
97          let Cycl=Cycl+1
98         goto 92
99    let x=   "выводим результат"
100 ...   "продолжаем прогу"
У вас нет необходимых прав для просмотра вложений в этом сообщении.
TVG
Рядовой
Сообщения: 47
Зарегистрирован: 15 сен 2015, 14:40

for() to, для пользовательского блока

Сообщение TVG »

Помоему  это все можно нарисовать не на коде си а блоками там для этого всего есть блоки (бейсик довольно сильно отличеатся от си) а главно продумать алгоритм :))
у вас уже нарисован блок пользователя что то я не совсем понял что вам еще нужно ?
Последний раз редактировалось TVG 08 мар 2016, 22:09, всего редактировалось 1 раз.
Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13 окт 2015, 16:47
Контактная информация:

for() to, для пользовательского блока

Сообщение Олег »

Вы просто объясните что вы хотите словами, мне например бэйсик неведом.
SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04 окт 2015, 10:01
Откуда: Томск

for() to, для пользовательского блока

Сообщение SirYorik »

что такое "проверка массива"? от этого зависит вид решения (бейсик то я понял)


А: конец цикла (нет совпадений), Б: условие выхода (есть совпадение с Н элементом).
вообще у автора есть видеоурок по использованию массивов в обработке потока с ком-порта

Добавлено (09.03.2016, 12:09)
---------------------------------------------
по моему похоже на ваше хотение

эта схема
5333523.jpg
делает такой код:

int _FLPArray155448289[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
int _gtv1 = 7; //этонайти
int _gtv2 = 0; //найденный индекс
void setup()
{
}
void loop()
{
if (((_findElementFromIntegerArray(_FLPArray155448289, 10, (_gtv1))) > -1)) {
_gtv2 = (_findElementFromIntegerArray(_FLPArray155448289, 10, (_gtv1)));
}
}
int _findElementFromIntegerArray(int array[], int arraySize, int value) {
for (int i = 0; i < arraySize; i = i + 1) {
if (array == value) {
return i;
}
}
return -1;
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось SirYorik 09 мар 2016, 12:10, всего редактировалось 1 раз.
Аватара пользователя
VirSpy
Рядовой
Сообщения: 62
Зарегистрирован: 03 дек 2015, 22:40
Откуда: Минск, РБ

for() to, для пользовательского блока

Сообщение VirSpy »

Попытаюсь описать на FLProg так:

Плата N-1: основная прога
Плата 56: идет сравнение (условие), если =1, то перейти на плату 60  , иначе далее
Плата 57: обработка данных
Плата 58: сравнение данных, если =0, то перейти на плату 56 , иначе записать данные в переменную и продолжить с п60
Плата 60(N+1): продолжение основной проги

Другой вариант: устранение дребезга на резистивной клавиатуре. На сколько понимаю, без Си невозможно зациклить плату.:-

31.......прога....
32 прочитать значение порта =в А0
33 если А0 равен 1023 (кнопки не нажаты), перейти на 40
34 иначе: записать значение порта в Аt(emp)
35 сравнить: A0 равно At, значит перейти на строку38
36 иначе: перейти на строку 34 и выполнять это в течении (100 миллисекунд)
38 вывести значения Аt
40 .....продолжение проги.....

Еще раз повторюсь: в программировании я пасс (помню только Бейсик а-ля конца 80-х) По аналогии могу читать на Си, но не могу понять архитектуру как таковую и т.д., т.п. построения, в основном самого принципа написания прог на Си (почему здесь, а не там, зачем повторять, объявлять здесь...). Создавая проекты, я их пишу по-этапно, записывая каждую измененную версию, и просматривая код в Си, вижу изменения и понимаю что-как. Но это в основном 30-40%
SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04 окт 2015, 10:01
Откуда: Томск

for() to, для пользовательского блока

Сообщение SirYorik »

значит так, пишу про то как менять мышление при переходе с бейсика на Си/FLprog:
но надо иметь в виду и то, что FLProg сам тоже сильно отличается от чисто сишного подхода.

Бейсик-Си
1) "перейти" - всегда помнить что НЕТ номеров строк и НЕЛЬЗЯ сделать прямой переход.
2) места где хочется поставить "перейти на 40" заменять на команду "пропустить"
3) это самое "пропустить" реализуется через
if (условие) {
// одно
} else {
// другое
} // есть возможность добавить "третье" и тд...
в терминах FLprog это Компаратор и Вход разрешения(En)
4) перейти назад можно только при помощи циклов (for, while, ..)

FLprog
1) " то перейти на плату 60" - нет такого, и не будет никогда судя по всему.
плата обрабатывается всегда.
но если очень надо, то: содержимое платы заворачиваете в "блок пользователя", и управляете блоком ножкой EN (недавно появилось).
при этом оно как бы изолируется от программы, и у вас появляется возможность использовать этот блок несколько раз в программе (в бейсике подпрограммы проходили?)
2) " то перейти на плату 56" - возврат назад невозможен вообще, забудьте. только сверху вниз, и бесконечно зациклено.
3) про такие ожидания:
35 сравнить: A0 равно At, значит перейти на строку38
36 иначе: перейти на строку 34 и выполнять это в течении (100 миллисекунд)
38 вывести значения Аt

такой подход сам по себе плох
- значения с аналоговых входов всегда скачут, вы можете прождать все 100мс, а А0 меж тем будет скакать +-1,+-2,.. вокруг At и не совпасть строго ни разу.
- для этой проблемы используют усреднители разные и сравнения >,<
- ваша программа будет простаивать, для простых применений это нормально, но для приличного количества датчиков и действий это уже недопустимо.
4) "устранение дребезга на резистивной клавиатуре." решается в настройках аналогового входа. гляньте, попробуйте, и забудьте о этой проблеме. Вообще, если ваш пример в строках 32..38 это устранение дребезга, то вопрос вообще закрыт.
5) локальные циклы ожидания, итераторы и тд.. на базе For-to, goto, while, и тп... в FLprog стандартными блоками не используются!, за исключением штучных блоков работы с массивами. Цикл в FLprog один, главный цикл перебора плат loop().

PS:
если хотите вот прям стопорить программу и "зацикливать плату" могу написать вам нужный  "CODE-block"

PPS: на правах юмора с долей правды. если набрать FLprog на русском регистре получится АДзкщп.  Изображение
Последний раз редактировалось SirYorik 13 мар 2016, 09:09, всего редактировалось 1 раз.
Аватара пользователя
VirSpy
Рядовой
Сообщения: 62
Зарегистрирован: 03 дек 2015, 22:40
Откуда: Минск, РБ

for() to, для пользовательского блока

Сообщение VirSpy »

Простой пример. Анти дребезг аналоговой клавиатуры:

сделать темп входа
выждать
сравнить со входом, если не равно повторить предыдущую строку
записать в переменную

на Си много разных примеров, а как организовать в FL?
(пример)
Последний раз редактировалось VirSpy 18 мар 2016, 23:20, всего редактировалось 1 раз.
Ответить

Вернуться в «Спросить у знатоков»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей