Вверх ↑
Этот топик читают: Гость
Ответов: 7
Рейтинг: 1
#1: 2010-08-20 22:50:57 ЛС | профиль | цитата
Требуется написать простенькую тестовую программку для работы с внешним устройством по CОМ порту. ПК как мастер, устройство как слейв. Мастер посылает запросы слейв отправляет ответы. Запросы и ответы имеют одинаковый формат 6 байт данных (например FF 00 00 00 30 30 > 0F 00 00 00 03 30). Как отправлять 6 байтные пакеты по COM порту я разобрался, как принять ответ от устройства тоже понятно, не могу разобратся как с принятыми байтами в HEX работать дальше? Например как определить что первый принятый байт 0F и если это так вывести надпись ок. Помогите пожалуйста, может есть примеры какие!
карма: 0

0
Ответов: 3851
Рейтинг: 159
#2: 2010-08-20 23:57:02 ЛС | профиль | цитата

sowa100 писал(а):
как определить что первый принятый байт 0F
скопируй первые 2 символа из принятого сообщения и сравни (if_else или Case) их с "0F"
карма: 0
начавший
0
Ответов: 7
Рейтинг: 1
#3: 2010-08-21 00:54:00 ЛС | профиль | цитата
А как байты то друг от друга отделить? C порта они идут как бы одним числом 0F0000000330
карма: 0

0
Ответов: 1841
Рейтинг: 369
#4: 2010-08-21 01:04:31 ЛС | профиль | цитата
Copy
карма: 1
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#5: 2010-08-21 01:13:41 ЛС | профиль | цитата
sowa100 писал(а):
А как байты то друг от друга отделить?

И че их отделять-то
code_20114.txt
карма: 22

0
файлы: 1code_20114.txt [778B] [204]
Ответов: 876
Рейтинг: 101
#6: 2010-08-21 06:18:11 ЛС | профиль | цитата
sowa100 писал(а):
как определить что первый принятый байт 0F


Не уверен но скорей всего в событие ты получаешь не байты, а строку такой вариант будет оптимальнее

Add(Edit,79052,406,266)
{
Left=105
Top=85
Width=85
Text="0F0000000330"
}
Add(StrMask,8347811,455,315)
{
Mask="0F??????????"
link(onFalse,16340188:doData,[(503,321)(503,286)])
link(onTrue,4604925:doData,[])
}
Add(Button,9769351,357,315)
{
Left=105
Top=110
link(onClick,12855488:doData,[])
}
Add(DoData,12855488,406,315)
{
link(onEventData,8347811:doCompare,[])
link(Data,79052:Text,[])
}
Add(ListBox,11281772,595,322)
{
Left=105
Top=135
Width=85
Height=95
}
Add(DoData,4604925,518,322)
{
Data=String(ok)
link(onEventData,7640072:doWork2,[])
}
Add(DoData,16340188,518,280)
{
Data=String(bad)
link(onEventData,7640072:doWork1,[(571,286)])
}
Add(HubEx,7640072,567,322)
{
link(onEvent,11281772:doAdd,[])
}
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#7: 2010-08-21 12:11:44 ЛС | профиль | цитата
flud, DoData выбрось !
============================================
sowa100 писал(а):
А как байты то друг от друга отделить?

Можно как предложил nesco, можно использовать Insert

Add(MainForm,16390573,189,168)
{
Width=242
Height=69
Point(onKeyUp)
link(onCreate,6160042:doFor,[])
}
Add(Edit,79052,343,133)
{
Left=5
Top=5
Width=215
Text="0F0000000330"
}
Add(For,6160042,245,182)
{
Start=10
End=1
Step=-2
link(onEvent,10160734:doOperation,[])
}
Add(Insert,5861680,343,182)
{
SubStr=" "
link(onInsert,79052:doText2,[(385,188)(385,120)(331,120)(331,146)])
link(Str,79052:Text,[])
}
Add(Math,10160734,294,182)
{
Op2=1
ResultType=0
link(onResult,5861680:doInsert,[])
}


карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Гость
Ответов: 17029
Рейтинг: 0
#8: 2010-08-21 17:00:35 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2017-03-04 03:27:43
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#9: 2010-08-21 17:13:24 ЛС | профиль | цитата
Да. Не даром говорят: "Дурной пример заразителен"
118-35-220-62-dyn.hn.nnov, компонент EventFromData совсем не для такого использования.

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 3851
Рейтинг: 159
#10: 2010-08-21 17:24:19 ЛС | профиль | цитата

sowa100, у тебя это работает? в смысле у тебя запрос отсылается не единым пакетом, а шестью байтами. возможно устройство это устраивает..

ps: не у всех, установлен ComAsync - не забываем прикреплять ..
карма: 0
начавший
0
Ответов: 16884
Рейтинг: 1239
#11: 2010-08-21 18:19:41 ЛС | профиль | цитата
118-35-220-62-dyn.hn.nnov, а так проверь - нет у меня на буке COM
code_20131.txt
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_20131.txt [615B] [185]
Гость
Ответов: 17029
Рейтинг: 0
#12: 2010-08-21 21:15:54 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2017-03-04 03:27:42
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#13: 2010-08-21 22:22:17 ЛС | профиль | цитата

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 3851
Рейтинг: 159
#14: 2010-08-21 22:36:59 ЛС | профиль | цитата

можно это
Add(Stream2Hex,2718765,476,252)
{
Mode=3
}
попробовать..
карма: 0
начавший
0
файлы: 1code_20135.txt [134B] [117]
Ответов: 7
Рейтинг: 1
#15: 2010-08-22 00:08:14 ЛС | профиль | цитата
Да, можно с помощью Stream2Hex схема более компактной получаетсяcode_20141.txt
карма: 0

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