Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.16;
Скачать: CL | DM;

Вниз

RS-485 и ЦП8501/2   Найти похожие ветки 

 
balepa ©   (2007-07-20 06:15) [0]

Помогите реализовать протокол для ЦП8501/2:
Каждый пакет состоит из нескольких полей, передающихся друг за другом без разрывов во времени.
Признаком конца пакета служит отсутствие передачи на линии в течении времени, необходимого для передачи 5-6 байт, после окончания передачи стоп-бита последнего байта.

Поля:
ADDR  2 байта (хотя max значение указано 7FFFFFh); = 0
CMD   1 байт  команда    = 40h
param 1 байт  номер запрашиваемого параметра = 0
CRC   2 байта (2-х байтовый циклический избыточный код, вычис-ый по всем пред-им байтам пакета)

В итоге надо отправить ADDR-CMD-param-CRC (6 байт) в ответ получить ADDR-CMD-(nnnn)-CODE-CRC (10 байт), где (nnnn)-Single

1) Как посчитать время за которое передается 5-6 байт?
2) Как узнать что стоп-бит последнего байта передан?
3) RTS убирать после истечения времени (см. 1) или сразу после отправки последнего байта?


 
Dib@zol ©   (2007-07-20 09:53) [1]

Удалено модератором


 
Dib@zol ©   (2007-07-20 09:54) [2]

Удалено модератором


 
balepa ©   (2007-07-20 10:04) [3]


> Dib@zol ©   (20.07.07 09:53) [1]


> И точно его измерить невозможно, так как в каждом


А точно и ненадо.


> с чего ты взял что признак конца пакета должен быть именно
> таким

В руководстве по эксплуатации


> Dib@zol ©   (20.07.07 09:54) [2]
> И вапще вопросец походу не сюда а в "Сеть"...

WinAPI система, оборудование и т.д.


 
Anatoly Podgoretsky ©   (2007-07-20 10:18) [4]

> balepa  (20.07.2007 10:04:03)  [3]

Побайтовое чтение и WaitForSingleObject с таймаутом


 
balepa ©   (2007-07-20 10:22) [5]


> Anatoly Podgoretsky ©   (20.07.07 10:18) [4]

Это на какой вопрос ответ?


 
Dib@zol ©   (2007-07-20 10:31) [6]


> 1) Как посчитать время за которое передается 5-6 байт?
> 2) Как узнать что стоп-бит последнего байта передан?

Вот на эти два. WaitForSingleObject будет, еснеошибаюсь, ждать начала след. цепочки байт и если не дождёцца значит усё пакет закончился :)
А стопбит, поскольку является девятым и последним, будет по-моему при побайтном чтении передан как байт со значением 1. Если наткнулся на таковой в пакете - врубай Wait.


 
Anatoly Podgoretsky ©   (2007-07-20 10:34) [7]

> balepa  (20.07.2007 10:22:05)  [5]

Это на твой вопрос, как определить (измерить) окончание передачи.


 
balepa ©   (2007-07-20 10:49) [8]

ЦП8501/2 это измерительное устройство подключеное по RS-485 через адаптер интерфейса AC3(направлением потока данных управляет RTS) к Com порту ПК.

Я понял так:

Вар№1: надо отправить запрос с ПК после того после окончания передачи стоп-бита последнего байта выждать время "для передачи 5-6 байт" установить RTS в 0 и читать

Вар№2: оправить -> установить RTS в 0 -> подождать время "для передачи 5-6 байт" ->считать.

Вот одно из этого мне и надо реализовать.

А при чем тут Побайтовое чтение и WaitForSingleObject с таймаутом?
Может запись?

Как высчитать сколько ждать?


 
Dib@zol ©   (2007-07-20 10:58) [9]


> Может запись?

Может и запись...


> Как высчитать сколько ждать?

Вот так:

var time:Cardinal;
...
time:=GetTickCount;
<Отправить 6 байт>
time:=GetTickCount-time;

в результате получишь время этой самой передачи. Только пердупреждаю оно может оказаться ЖУТКОСТРАШНО неточным, поэтому после каждого сеанса приёмопередачи запускай вышеописанное ещё раз и вычисляй среднее арифметическое.


 
balepa ©   (2007-07-20 10:59) [10]


> Dib@zol ©   (20.07.07 10:58) [9]
Только пердупреждаю оно может оказаться ЖУТКОСТРАШНО неточным

Аж мурашки по коже


 
Dib@zol ©   (2007-07-20 11:02) [11]

Зато работает! Или нет??...


 
balepa ©   (2007-07-20 13:19) [12]

Оказалось как всегда наудивление просто, что байты забыл(не то что забыл просто неподумал об этом :)) местами переменять когда в Single переводил.

Спасибо всем за участие.



Страницы: 1 вся ветка

Текущий архив: 2008.03.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
2-1203152306
alexsashkan
2008-02-16 11:58
2008.03.16
Проблема с запросом SQL


4-1184719046
Cj
2007-07-18 04:37
2008.03.16
CommandLine...in ReadProcessMemory???


15-1202310343
Пробегал...
2008-02-06 18:05
2008.03.16
Что за тип сервиса: SERVICE_WIN32_SHARE_PROCESS ?


11-1185503288
sunwise
2007-07-27 06:28
2008.03.16
Гуру подскажите плиз, а как средствами KOL удалить папку?


6-1182318912
vbazik
2007-06-20 09:55
2008.03.16
скачивание файлов по ссылке