Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26170
Рейтинг: 2127
#16: 2014-02-05 22:00:07 ЛС | профиль | цитата
mcmega писал(а):
Сейчас сделано на элементе Формат и записано %110

Вместо %110 просто нажми после %1 Enter в редакторе и переведи курсор на следующую строку. В маске увидешь %1

карма: 22

0
Гость
Ответов: 17029
Рейтинг: 0
#17: 2014-02-06 10:12:42 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2025-01-10 11:44:21
карма: 0

0
Ответов: 43
Рейтинг: 1
#18: 2014-02-06 11:35:47 ЛС | профиль | цитата
упс..., извиняюсь, не залогинился, глючит форум немного.
Вот код, и ещё не отлавливается почему то "*+>", это означает конец всей записи (я начинаю подумывать, что может вообще ничего не отлавливается, может что то не так сделал).
Это подправленный код
code_32988.txt

карма: 0

0
файлы: 1code_32988.txt [1.3KB] [187]
Ответов: 5227
Рейтинг: 587
#19: 2014-02-06 16:24:55 ЛС | профиль | цитата
mcmega, установи монитор http://www.serial-port-monitor.com и поймаешь свою багу
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 43
Рейтинг: 1
#20: 2014-02-06 19:24:52 ЛС | профиль | цитата
andrestudio писал(а):
установи монитор http://www.serial-port-monitor.com и поймаешь свою багу
Поставил я прогу, правда Device Monitoring Studio той же конторы (потому что у меня Win7 x64). Обнаружил причину.
Приходят 2 кода от контроллера (во время прошивки EEPROM):
#13 и #2e - запрет передачи
#2a и #11 - продолжение передачи
Прога на их не реагирует. Всё-равно продолжает слать данные, в итоге запись срывается и творится всякая ерунда.
Гляньте, пожалуйста исходник...
https://drive.google.com/?tab=mo&authuser=0#folders/0B5M0qoM4Gjk0LTlkWXFSZFJUTTg
------------ Дoбавленo в 19.24:
В общем я разобрался. У меня программа вообще не реагирует на входящие данный от контроллера, короче прога слышит контроллер, отображает в поле строк обмен, но не выполняет никаких действий (приостановить передачу, возобновить передачу, статус подключения к контроллеру и т.д.) А не реагирует, потому что контроллер отвечает не построчно, а как получится (в терминале может придти половина строки в одной строке, другая во второй строке, по разному). Поэтому я и не могу выловить символы.
Как организовать прослушивание того, что приходит на комп по COM порту?
Сейчас сделано так, прослушивание есть, реакции нет.
#pas
Add(COMEX,7412496,483,203)
{
BaudRate=15
DataBits=1
Point(doRXClear)
link(onRead,14531254:doEvent1,[])
}
Add(InfoTip,15944742,901,179)
{
Info=#12:Разр. TX #11|
Frame=1
Width=36
Height=25
}
Add(InfoTip,15972238,852,179)
{
Info=#13:Запрет TX #13|
Frame=1
Width=36
Height=25
}
Add(Hub,14531254,532,210)
{
OutCount=4
link(onEvent1,5430127:doConvert,[])
link(onEvent2,5995389:doCase,[])
link(onEvent4,3947530:doCompare,[(553,237)(553,286)])
}
Add(InfoTip,14355627,560,181)
{
Info=#11:Ожид. "pf+"|
Frame=1
Width=36
}
Add(InfoTip,10119221,609,181)
{
Info=#11:Ожид. "pe+"|
Frame=1
Width=29
}
Add(InfoTip,1808801,658,181)
{
Info=#10:Ожид. "g+"|
Frame=1
Width=29
}
Add(InfoTip,8676743,707,181)
{
Info=#12:Ожид. "c45b"|
Frame=1
Width=29
}
Add(Case,5995389,560,217)
{
Value=String(pf+)
link(onNextCase,15818237:doCase,[])
}
Add(Case,15818237,609,217)
{
Value=String(pe+)
link(onNextCase,12119547:doCase,[])
}
Add(Case,12119547,658,217)
{
Value=String(g+)
link(onNextCase,7476301:doCase,[])
}
Add(Case,7476301,707,217)
{
Value=String(c45b)
link(onNextCase,8992250:doCase,[])
}
Add(Case,8992250,756,217)
{
Value=String(.*+)
link(onTrue,13783559:doOn,[(798,230)(798,307)])
}
Add(Case,9312450,854,210)
{
Value=Integer(19)
link(onNextCase,5060507:doCase,[])
}
Add(Case,5060507,903,210)
{
Value=Integer(17)
}
Add(Convertor,5430127,805,210)
{
Mode=3
link(onResult,9312450:doCase,[])
}
Add(InfoTip,13884601,756,181)
{
Info=#11:Ожид. ".*+"|
Frame=1
Width=29
}
Add(LED,13783559,819,287)
{
Left=200
Top=270
ColorOn=65280
ColorOff=32768
}
Add(LED,759336,819,324)
{
Left=55
Top=270
ColorOn=65280
ColorOff=32768
}
Add(Label,13802768,861,324)
{
Left=15
Top=295
Width=108
Height=17
Caption="Статус подключения"
}
Add(Label,14836790,861,287)
{
Left=175
Top=295
Width=74
Height=17
Caption="Конец записи"
}
Add(If_else,3947530,560,280)
{
Op2=Integer(19)
link(onTrue,759336:doOn,[(706,286)(706,344)])
}

карма: 0

0
Ответов: 8930
Рейтинг: 823
#21: 2014-02-06 21:27:34 ЛС | профиль | цитата
mcmega писал(а):
может придти половина строки в одной строке, другая во второй строке
Значит надо делать буфер и сцеплять поступающие строки, удаляя символы начала/окончания строк (если они есть) искать по маске (а не Case-ом) в начале строки Ваши команды, когда найдутся, выполнять их и удалять соответствующее количество символов из строки.

Add(COMEX,7412496,70,84)
{
BaudRate=15
DataBits=1
Point(doRXClear)
link(onRead,6647786:doEvent1,[])
}
Add(StrCat,1754495,147,91)
{
link(onStrCat,16652777:doWork2,[])
link(Str1,8219328:Var3,[(153,82)(195,82)])
}
Add(StrMask,15306248,259,126)
{
Mask="pf+*"
link(onFalse,5367627:doCompare,[])
link(onTrue,15367224:doEvent1,[])
}
Add(InfoTip,691049,705,88)
{
Info=#12:Разр. TX #11|
Frame=1
Width=36
Height=25
}
Add(InfoTip,6794195,656,88)
{
Info=#13:Запрет TX #13|
Frame=1
Width=36
Height=25
}
Add(InfoTip,6963579,259,90)
{
Info=#11:Ожид. "pf+"|
Frame=1
Width=36
}
Add(InfoTip,10764195,329,90)
{
Info=#11:Ожид. "pe+"|
Frame=1
Width=29
}
Add(InfoTip,73699,399,90)
{
Info=#10:Ожид. "g+"|
Frame=1
Width=29
}
Add(InfoTip,16244838,469,90)
{
Info=#12:Ожид. "c45b"|
Frame=1
Width=29
}
Add(InfoTip,13143878,539,90)
{
Info=#11:Ожид. ".*+"|
Frame=1
Width=29
}
Add(StrMask,5367627,329,126)
{
Mask="pe+*"
link(onFalse,16176026:doCompare,[])
link(onTrue,7689700:doEvent1,[])
}
Add(StrMask,16176026,399,126)
{
Mask="g+*"
link(onFalse,10627925:doCompare,[])
link(onTrue,946659:doEvent1,[])
}
Add(StrMask,1883148,539,126)
{
Mask=".?+*"
link(onFalse,14271014:doConvert,[])
link(onTrue,387583:doEvent1,[])
}
Add(StrMask,10627925,469,126)
{
Mask="c45b*"
link(onFalse,1883148:doCompare,[])
link(onTrue,14342162:doEvent1,[])
}
Add(Case,7128972,658,126)
{
Value=Integer(19)
link(onNextCase,11348130:doCase,[])
}
Add(Case,11348130,707,126)
{
Value=Integer(17)
}
Add(Convertor,14271014,609,126)
{
Mode=3
link(onResult,7128972:doCase,[])
}
Add(Delete,13145630,133,203)
{
link(onDelete,16652777:doWork3,[(186,209)])
link(Str,8219328:Var1,[(139,138)])
link(Position,1560028:Value,[])
}
Add(Hub,6647786,119,91)
{
link(onEvent1,1754495:doStrCat,[])
link(onEvent2,15306248:doCompare,[(141,104)(141,132)])
}
Add(Memory,10817190,203,91)
{
}
Add(Memory,1560028,140,161)
{
Default=Integer(1)
}
Add(ChanelToIndex,7997964,70,203)
{
Count=5
link(onIndex,13145630:doDelete,[])
}
Add(HubEx,16540292,322,252)
{
Angle=2
link(onEvent,7997964:doWork4,[(55,258)(55,230)])
}
Add(HubEx,788079,462,263)
{
Angle=2
link(onEvent,7997964:doWork3,[(109,269)(109,223)])
}
Add(HubEx,16652777,182,91)
{
link(onEvent,10817190:doValue,[])
}
Add(GetDataEx,8219328,189,133)
{
Angle=1
link(Data,10817190:Value,[(209,138)])
}
Add(Hub,15367224,301,133)
{
link(onEvent1,16540292:doWork1,[(326,139)])
}
Add(Hub,7689700,371,133)
{
link(onEvent1,16540292:doWork2,[(396,139)(396,258)])
}
Add(Hub,946659,441,133)
{
link(onEvent1,788079:doWork1,[(466,139)])
}
Add(Hub,14342162,511,133)
{
link(onEvent1,7997964:doWork5,[(535,139)(535,252)(130,252)(130,237)])
}
Add(Hub,387583,581,133)
{
link(onEvent1,788079:doWork2,[(606,139)(606,269)])
}
карма: 19

0
Ответов: 43
Рейтинг: 1
#22: 2014-02-07 11:28:04 ЛС | профиль | цитата
Попробовал Леонид Ваши код, всё-равно не реагирует, реагирует на подключение (приёме c45b) причём если придёт одной строкой, на отключение реакции нет (g+) светодиод не тухнет. При записи приходит в ответ pf+ (запись во Flash), но запись не происходит. Вся программа здесь https://drive.google.com/?tab=mo&authuser=0#folders/0B5M0qoM4Gjk0LTlkWXFSZFJUTTg
карма: 0

0
Ответов: 9906
Рейтинг: 351
#23: 2014-02-07 12:23:46 ЛС | профиль | цитата
Припоминается, что в свое время я быстрее ISP-программатор собрал, и код нарисовал.
То же мне, нашли проблему -- AVR-ку запрограммировать
карма: 9

0
Ответов: 1328
Рейтинг: 69
#24: 2014-02-07 16:54:33 ЛС | профиль | цитата
mcmega, здесь посмотри, похожая проблема http://forum.hiasm.com/forum.html?q=3&p=152699#p152699
карма: 2

0
Ответов: 8930
Рейтинг: 823
#25: 2014-02-07 17:10:16 ЛС | профиль | цитата
mcmega писал(а):
Ваши код, всё-равно не реагирует
Да я там не ту строку подал на сравнение
Вот ещё вариант, если не сработает, останется ногой по балонам постучать
code_32996.txt
карма: 19

0
файлы: 1code_32996.txt [2.6KB] [169]
Гость
Ответов: 17029
Рейтинг: 0
#26: 2014-02-09 11:19:12 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2025-01-10 11:44:21
карма: 0

0
Ответов: 43
Рейтинг: 1
#27: 2014-02-09 11:22:41 ЛС | профиль | цитата
Леонид, сейчас всё, сигналы сравнения есть!!! СПАСИБО! Сейчас разбираюсь, чтоб они управляли остановкой/передачей данных в COM порт.
Посмотрите, пожалуйста, может не так подключаю.
Разветвитель слева верхний - продолжение передачи
Разветвитель слева нижний - остановка передачи
#pas
Add(Edit,7348842,210,189)
{
Left=5
Top=69
Width=180
Color=15532012
Text=""
Point(onDblClick)
link(onDblClick,3739120:doEvent1,[])
}
Add(ODialog,4867034,273,210)
{
Filter="HEX|*.hex|All|*.*"
Title="Открыть файл"
link(onExecute,7107226:doEvent1,[])
}
Add(Hub,7107226,315,210)
{
link(onEvent1,7348842:doText2,[(339,216)(339,183)(202,183)(202,202)])
link(onEvent2,2388203:doLoad,[(339,223)(339,258)])
}
Add(Hub,3739120,252,203)
{
link(onEvent1,2388203:doClear,[(308,209)(308,237)])
link(onEvent2,4867034:doExecute,[])
}
Add(PointHint,232132,238,161)
{
Info=#17:Загрузка во FLASH|
Frame=1
Width=99
Height=18
}
Add(PointHint,8062452,245,448)
{
Info=#17:Загрузка в EEPROM|
Frame=1
Width=106
Height=18
}
Add(Edit,1693892,210,476)
{
Left=5
Top=138
Width=180
Color=15532012
Text=""
Point(onDblClick)
link(onDblClick,950295:doEvent1,[])
}
Add(ODialog,1737584,273,497)
{
Filter="HEX|*.hex|All|*.*"
Title="Открыть файл"
link(onExecute,6782912:doEvent1,[])
}
Add(Hub,6782912,315,497)
{
link(onEvent1,1693892:doText2,[(339,503)(339,471)(204,471)(204,489)])
link(onEvent2,9992418:doLoad,[(339,510)(339,545)])
}
Add(Hub,950295,252,490)
{
InCount=2
link(onEvent1,9992418:doClear,[(308,496)(308,524)])
link(onEvent2,1737584:doExecute,[])
}
Add(ListBox,2388203,350,224)
{
Left=5
Top=229
Width=245
Height=73
DataType=1
}
Add(ArrayRW,1458999,364,287)
{
link(onRead,8861281:doString,[(401,293)(401,335)])
link(Array,2388203:Array,[])
}
Add(CounterEx,13599662,294,287)
{
Max=1000000
Default=-1
Point(doReset)
link(onNext,641625:doEvent1,[])
}
Add(If_else,4164,294,329)
{
Type=2
link(onTrue,13599662:doReset,[(330,335)(330,283)(284,283)(284,300)])
link(Op1,13599662:Count,[])
link(Op2,10861379:Var1,[(307,278)])
}
Add(For,9369036,210,287)
{
link(onEvent,13496911:doEvent1,[])
}
Add(FormatStr,8861281,406,329)
{
DataCount=1
Mask="%1
"
link(Str1,1458999:Item,[(412,324)(370,324)])
}
Add(Hub,13496911,252,287)
{
OutCount=3
link(onEvent1,13599662:doNext,[])
link(onEvent2,4164:doCompare,[(279,300)(279,335)])
link(onEvent3,3955573:doData,[(274,307)(274,377)])
}
Add(ListBox,9992418,350,511)
{
Left=5
Top=319
Width=245
Height=71
}
Add(ArrayRW,5215795,364,574)
{
link(onRead,8753876:doString,[(401,580)(401,622)])
link(Array,9992418:Array,[])
}
Add(CounterEx,1603841,294,574)
{
Max=1000000
Default=-1
Point(doReset)
link(onNext,4592497:doEvent1,[])
}
Add(If_else,7284619,294,616)
{
Type=2
link(onTrue,1603841:doReset,[(335,622)(335,570)(283,570)(283,587)])
link(Op1,1603841:Count,[])
link(Op2,12610017:Var1,[(307,565)])
}
Add(For,15497236,210,574)
{
link(onEvent,14277338:doEvent1,[])
}
Add(FormatStr,8753876,406,616)
{
DataCount=1
Mask="%1
"
link(Str1,5215795:Item,[(412,611)(370,611)])
}
Add(Hub,14277338,252,574)
{
OutCount=3
link(onEvent1,1603841:doNext,[])
link(onEvent2,7284619:doCompare,[(278,587)(278,622)])
link(onEvent3,14642719:doData,[(272,594)(272,664)])
}
Add(Hub,13984167,168,287)
{
OutCount=3
link(onEvent1,9369036:doFor,[])
link(onEvent2,15497236:doFor,[(193,300)(193,580)])
link(onEvent3,12588542:doOff,[(206,307)(206,405)])
}
Add(Hub,3767235,168,315)
{
OutCount=3
link(onEvent1,9369036:doStop,[(199,321)(199,300)])
link(onEvent2,15497236:doStop,[(199,328)(199,587)])
link(onEvent3,12588542:doOn,[(203,335)(203,412)])
}
Add(GetDataEx,10861379,343,273)
{
Angle=1
link(Data,2388203:Count,[(363,278)])
}
Add(ProgressBar,10659313,406,364)
{
Left=5
Top=89
Width=240
Height=21
Max=0
Point(doMax)
}
Add(Hub,641625,336,287)
{
link(onEvent1,1458999:doRead,[])
link(onEvent2,10659313:doPosition,[(356,300)(356,370)])
}
Add(DoData,3955573,343,371)
{
link(onEventData,10659313:doMax,[])
link(Data,10861379:Var2,[])
}
Add(ProgressBar,12175465,406,651)
{
Left=5
Top=159
Width=240
Height=21
Max=0
Point(doMax)
}
Add(DoData,14642719,343,658)
{
link(onEventData,12175465:doMax,[])
link(Data,12610017:Var2,[])
}
Add(Hub,4592497,336,574)
{
link(onEvent1,5215795:doRead,[])
link(onEvent2,12175465:doPosition,[(356,587)(356,657)])
}
Add(GetDataEx,12610017,343,560)
{
Angle=1
link(Data,9992418:Count,[(363,565)])
}
Add(LED,12588542,245,392)
{
Left=15
Top=440
}

карма: 0

0
файлы: 1code_33013.txt [4.1KB] [148]
Ответов: 8930
Рейтинг: 823
#28: 2014-02-09 12:11:52 ЛС | профиль | цитата
mcmega, может так:
code_33014.txt
Задержку в Thread выставить на гарантированную по времени запись в устройство, ("0" лучше не ставить, может не успевать)
карма: 19

0
файлы: 1code_33014.txt [1.8KB] [169]
Ответов: 43
Рейтинг: 1
#29: 2014-02-09 13:09:26 ЛС | профиль | цитата
Леонид, а как можно осуществить такое действие:
Если приняли pf+, то сигналы разрешения/запрета записи передаются в одну часть программы, если pe+, то в другую? Т.е. нужен переключатель, который в зависимости от режима записи (куда записывать EEPROM или FLASH) отправлял сигналы разрешения/запрета записи в соответствующий формирователь отправлений. Так как сигналы разрешения/запрета записи являются общими для двух режимов, то реагировать должен только тот модуль, который должен работать в данный момент (зависит от pf+ или pe+). Ну и соответственно в конце записи переключатель сбрасывается и ни к чему не подключен.
карма: 0

0
Ответов: 8930
Рейтинг: 823
#30: 2014-02-09 13:59:19 ЛС | профиль | цитата
mcmega, один из вариантов:
code_33016.txt
карма: 19

0
файлы: 1code_33016.txt [1.3KB] [166]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)