Вверх ↑
Этот топик читают: Гость
Ответов: 2
Рейтинг: 0
#1: 2014-11-23 11:28:33 ЛС | профиль | цитата
Пытаюсь написать Modbus TCP сервер данных, задача в следующем: в порт 502 приходит запрос на чтение или запись данных состоящий из 12 байт по конкретным байтам необходимо определить команду (чтение/запись), адрес и т.д. и сформировать ответ, данные с компонента TCP_Server преобразовываю компонентом Stream2Hex отправляю в ListBox прохождение запроса наблюдаю (пример c69d00000006000100000001). Теперь вопрос, как выделить конкретные байты из потока, для сравнения?
карма: 0

0
Ответов: 1343
Рейтинг: 31
#2: 2014-11-23 13:04:15 ЛС | профиль | цитата
примерно как то так можно распределить команды

Add(MainForm,2953706,21,105)
{
Width=485
Height=220
}
Add(If_else,5111317,189,119)
{
Op2=String(c69d00000006000100000002)
link(onTrue,5880800:doText,[])
link(onFalse,16200718:doCompare,[])
}
Add(If_else,16200718,238,126)
{
Op2=String(c69d00000006000100000001)
link(onTrue,15115644:doText,[(448,132)(448,188)])
link(onFalse,712960:doCompare,[])
}
Add(If_else,712960,287,133)
{
Op2=String(c69d00000006000100000003)
link(onTrue,9500828:doText,[(440,139)(440,251)])
link(onFalse,15707420:doCompare,[])
}
Add(If_else,15707420,336,140)
{
Op2=String(c69d00000006000100000004)
link(onTrue,2512238:doText,[(432,146)(432,314)])
}
Add(Edit,5880800,497,119)
{
Left=5
Top=60
Width=365
Text=""
ReadOnly=0
link(onChange,13433934:doNext,[])
}
Add(Button,9037975,70,119)
{
Left=5
Top=30
Caption="go"
link(onClick,10237479:doData,[])
}
Add(Edit,15115644,497,182)
{
Left=5
Top=90
Width=365
Text=""
ReadOnly=0
link(onChange,14550898:doNext,[])
}
Add(Edit,9500828,497,245)
{
Left=5
Top=120
Width=365
Text=""
ReadOnly=0
link(onChange,8220508:doNext,[])
}
Add(Edit,2512238,497,308)
{
Left=5
Top=145
Width=365
Text=""
ReadOnly=0
link(onChange,8927219:doNext,[])
}
Add(Edit,15981634,133,63)
{
Left=65
Top=30
Width=305
Text="c69d00000006000100000001"
}
Add(DoData,10237479,133,119)
{
link(onEventData,5111317:doCompare,[])
link(Data,15981634:Text,[])
}
Add(Label,15173470,609,119)
{
Left=375
Top=65
Caption="0"
}
Add(Label,4066326,609,182)
{
Left=375
Top=95
Caption="0"
}
Add(Label,215329,609,245)
{
Left=375
Top=125
Caption="0"
}
Add(Label,3442074,609,308)
{
Left=375
Top=150
Caption="0"
}
Add(CounterEx,13433934,560,119)
{
Max=9999
link(onNext,15173470:doText,[])
}
Add(CounterEx,14550898,560,182)
{
Max=9999
link(onNext,4066326:doText,[])
}
Add(CounterEx,8220508,560,245)
{
Max=9999
link(onNext,215329:doText,[])
}
Add(CounterEx,8927219,560,308)
{
Max=9999
link(onNext,3442074:doText,[])
}
карма: 2

0
Ответов: 16884
Рейтинг: 1239
#3: 2014-11-23 16:02:23 ЛС | профиль | цитата
пример=c69d00000006000100000001
адрес Х=Copy(пример,1,2) - c6
адрес Y=Copy(пример,3,2) - 9d
данные d1=Copy(пример,11,6) - 060001
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 2
Рейтинг: 0
#4: 2014-11-23 17:40:30 ЛС | профиль | цитата
Спасибо, понемногу разбираюсь
карма: 0

0
Ответов: 8928
Рейтинг: 823
#5: 2014-11-23 20:35:27 ЛС | профиль | цитата
rembit писал(а):
..данные с компонента TCP_Server преобразовываю компонентом Stream2Hex отправляю в ListBox ...как выделить конкретные байты из потока..
Данные выдаются в ПОТОКЕ, зачем лишние преобразования, направляйте их в память и считывайте по байту, по двум, трём.. или как угодно.
code_34666.txt
карма: 19

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