Вверх ↑
Этот топик читают: Гость
Ответов: 43
Рейтинг: 1
#31: 2014-02-09 16:10:49 ЛС | профиль | цитата
Похоже это то, что нужно. Есть проблема с элементом "Поток" наверное. Мне необходимо отправлять данные не постоянно, а приостанавливать на время.
Должны быть точки метода на возобновление и приостановку передачи. Сейчас сделано так:
pf+ или pe+ - разрешена передача в определённом режиме (во Flash или в EEPROM)
17 - разрешена/возобновлена передача в порт
19 - приостановлена передача в порт
При поступлении сигнала разрешена/возобновлена передача в порт, должны данные построчно выводится в порт, а при поступлении сигнала приостановка передачи в порт, счётчик должен остановиться (не сбрасывая своё значение) и продолжить с того же места после сигнала разрешена/возобновлена передача в порт.
А сейчас получается, что пока всё не передастся, то сигнал приостановки игнорируется.
#pas
Add(FormatStr,8861281,497,329)
{
DataCount=1
Mask="%1
"
}
Add(Edit,2509772,350,224)
{
Left=5
Top=79
Width=180
Color=15532012
Text=""
Point(onDblClick)
link(onDblClick,15920882:doEvent1,[])
}
Add(ODialog,11538940,273,224)
{
Filter="HEX|*.hex|All|*.*"
Title=""
link(onExecute,12071243:doEvent1,[])
}
Add(ListBox,10579081,434,224)
{
Left=5
Top=203
Width=245
Height=71
DataType=1
}
Add(ArrayRW,15847349,448,329)
{
link(onRead,8861281:doString,[])
link(Array,10579081:Array,[])
}
Add(ProgressBar,16492872,420,280)
{
Left=5
Top=99
Width=240
Height=10
Color=32768
Max=0
ProgressColor=65280
Point(doMax)
}
Add(Hub,11231174,413,329)
{
link(onEvent1,15847349:doRead,[])
link(onEvent2,16492872:doPosition,[(438,342)(438,321)(410,321)(410,286)])
}
Add(DoData,638511,364,287)
{
link(onEventData,16492872:doMax,[])
link(Data,10579081:Count,[(370,278)(447,278)])
}
Add(Hub,12071243,315,224)
{
OutCount=4
link(onEvent1,10579081:doLoad,[(418,230)(418,258)])
link(onEvent2,2509772:doText2,[])
link(onEvent3,638511:doData,[(347,244)(347,293)])
link(onEvent4,6652350:doReset,[(341,251)(341,349)])
}
Add(Thread,12298523,301,329)
{
Delay=100
link(onExec,6652350:doNext,[])
}
Add(Counter,6652350,364,329)
{
Min=-1
Max=999999999
Default=-1
link(onNext,11231174:doEvent1,[])
}
Add(Hub,15920882,392,238)
{
link(onEvent1,10579081:doClear,[(423,244)(423,237)])
link(onEvent2,11538940:doExecute,[(413,251)(413,219)(267,219)(267,230)])
}

карма: 0

0
файлы: 1code_33017.txt [1.5KB] [181]
Ответов: 8928
Рейтинг: 823
#32: 2014-02-09 16:41:44 ЛС | профиль | цитата
mcmega, у Thread есть точки doStart и doStop, какие могут быть проблемы с приостановкой При Паузе не надо счётчик обнулять и следущем Пуске начнёт с места остановки
карма: 19

0
Ответов: 43
Рейтинг: 1
#33: 2014-02-09 18:10:48 ЛС | профиль | цитата
Леонид, я попробовал отдельно (кнопками) проверить схему с использованием Thread, и да, действительно всё ОК. Но я смотрю обмен в порту. Контроллер выдаёт сигнал приостановки передачи, но передача продолжается. Из-за чего это может быть?
0000011809.02.2014 16:57:03.214+0.0IRP_MJ_READUP0x0000000013 2e 11 ... - ЭТО ПРИОСТАНОВКА ПЕРЕДАЧИ (код hex 2e)
0000012109.02.2014 16:57:03.224+0.010IRP_MJ_WRITEDOWN0x000000003a 31 30 30 30 34 30 30 30 31 …:1000400018950000189 - ЭТО ПЕРЕДАВАЕМАЯ СТРОКА
0000012609.02.2014 16:57:03.230+0.0IRP_MJ_READUP0x0000000013 2e 11 ... - ЭТО ПРИОСТАНОВКА ПЕРЕДАЧИ (код hex 2e)
0000012909.02.2014 16:57:03.240+0.010IRP_MJ_WRITEDOWN0x000000003a 31 30 30 30 35 30 30 30 31 …:1000500018950000189 - ЭТО ПЕРЕДАВАЕМАЯ СТРОКА
Посмотрите всю схему пожалуйста https://drive.google.com/?tab=mo&authuser=0#folders/0B5M0qoM4Gjk0LTlkWXFSZFJUTTg

карма: 0

0
Ответов: 8928
Рейтинг: 823
#34: 2014-02-09 18:34:27 ЛС | профиль | цитата
mcmega писал(а):
..Из-за чего это может быть?
Так ясно из-за чего: не поступает сигнал на doStop Или он не декодируется, или декодируется, но по ошибочной логике не проходит до назначения
Всю схему скачать не смогу, нет у меня никаких акаунтов у Большого брата Google сожмите схему Rar-ом и выложите здесь или в файлообмене файлом.
карма: 19

0
Ответов: 43
Рейтинг: 1
#35: 2014-02-09 18:50:17 ЛС | профиль | цитата
Ага, понял, залил http://forum.hiasm.com/forum_serv.php?q=56&id=3693
карма: 0

0
Ответов: 8928
Рейтинг: 823
#36: 2014-02-09 21:41:50 ЛС | профиль | цитата
mcmega, у Вас пуск Thread от ДВУХ сигналов, надо продумать логику, когда какая команда должна отрабатываться.
Кроме того, наверное есть смысл запрет/разрешение обрабатывать в первую очередь, т. е. поменять местами связи на Hab-е (см. картинку)
hab_1_2.jpg
И кстати, для поиска всяческих устройств есть специальный компонент DeviceInfo code_33020.txt
карма: 19

0
файлы: 2hab_1_2.jpg [15.7KB] [418], code_33020.txt [1.1KB] [176]
Ответов: 43
Рейтинг: 1
#37: 2014-02-09 23:59:11 ЛС | профиль | цитата
Поменял местами связи на Hab-е, всё равно передача продолжается.
Леонид, пуск Thread от pf+ или pe+ происходит единожды при выборе "куда записывать".
А потом идёт управление только от сигналов запрет/разрешение.
карма: 0

0
Ответов: 8928
Рейтинг: 823
#38: 2014-02-10 12:38:58 ЛС | профиль | цитата
mcmega писал(а):
пуск Thread от pf+ или pe+ происходит единожды при выборе "куда записывать".
А потом идёт управление только от сигналов запрет/разрешение.

Ну так Вы сами ответили: не надо запускать запись при выборе направления, но только по запрет/разрешение.
Вот иммитация двух вариантов, посмотрите, что происходит: code_33027.txt
карма: 19

0
файлы: 1code_33027.txt [4KB] [167]
Ответов: 43
Рейтинг: 1
#39: 2014-02-17 16:51:44 ЛС | профиль | цитата
Леонид писал(а):
Ну так Вы сами ответили: не надо запускать запись при выборе направления, но только по запрет/разрешение.

Я ведь должен послать команду pf (означает, что нужно произвести записи во флэш) и дождаться ответа pf+ (означает, что контроллер готов принимать данные), после того как ответ придёт, я должен начать отправлять данные, т.е. эти события связаны.
Ничего не понимаю, не работает. Во FLASH записывает 4 строки и стоп, а в EEPROM 1 строку и потом ошибки и стоп.
Посмотрите пожалуйста, что не так делаю? Совсем уже не знаю что делать!
http://forum.hiasm.com/forum_serv.php?q=56&id=3705
карма: 0

0
Ответов: 8928
Рейтинг: 823
#40: 2014-02-17 18:23:31 ЛС | профиль | цитата
mcmega, а есть-ли среди записываемых данных 0-ой символ ("00" ), он в ListBox не отражается и не считается
Попробуйте загружать данные параллельно в ListBox и неотображаемый StrList, а данные читать из StrList.
карма: 19

0
Ответов: 43
Рейтинг: 1
#41: 2014-02-17 19:00:26 ЛС | профиль | цитата
Я отправляю такие данные:
:100000000C94340018950000189500001895000015
...
:0E00B000A150B040E9F710E00116B9F708952D
:00000001FF
А что за компонент StrList?
карма: 0

0
Ответов: 8928
Рейтинг: 823
#42: 2014-02-17 19:27:23 ЛС | профиль | цитата
[b]mcmega[/b],

Add(StrList,10669692,336,98)
{
}
------------ Дoбавленo в 19.27:
Нет, это в шестнадцатиричном, там ткого символа не бывает
карма: 19

0
Ответов: 43
Рейтинг: 1
#43: 2014-02-17 19:46:44 ЛС | профиль | цитата
Попробовал StrList, записывает 4 строки, далее приходит команда "стоп передача", "."(точка hex - 2Е), "продолжение передачи". А продолжения передачи нет, т.е. ничего не изменилось.
карма: 0

0
Ответов: 8928
Рейтинг: 823
#44: 2014-02-17 20:49:38 ЛС | профиль | цитата
Леонид писал(а):
..Задержку в Thread выставить на гарантированную по времени запись в устройство..

Установлен в потоке интервал 10 мсек, за это время при скорости 19200 СОМ порт успеет передать меньше 20 символов, а строки гораздо длиннее, может здесь?
карма: 19

0
Ответов: 43
Рейтинг: 1
#45: 2014-02-17 21:11:51 ЛС | профиль | цитата
Попробовал задержку 50 и 100мсек, в итоге отправляется вообще только одна строка.
Установил 35мсек (подобрал) и отключил проверку XON/XOFF, всё записалось. Но ведь самая основная суть это и есть работа с XON/XOFF.
Я вижу, что приходит от МК "!!.и треугольник влево" (это соответствует запрет записи, точка, продолжение записи) Считываю для просмотра в синхронном режиме в элемент ListBox. Подправил исходник, убрал лишнее.
http://forum.hiasm.com/forum_serv.php?q=56&id=3706
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)