Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

RS-485 и ЦП8501/2 [D7, WinXP]


balepa ©   (2007-07-20 06:15:00) 

Помогите реализовать протокол для ЦП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) или сразу после отправки последнего байта?


balepa   (2007-07-20 13:19:00) [1]

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

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


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

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


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


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

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


Dib@zol   (2007-07-20 10:58:00) [4]


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

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


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

Вот так:

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

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


balepa   (2007-07-20 10:49:00) [5]

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

Я понял так:

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

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

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

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

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


Anatoly Podgoretsky   (2007-07-20 10:34:00) [6]

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

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


Dib@zol   (2007-07-20 10:31:00) [7]


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

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


balepa   (2007-07-20 10:22:00) [8]


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

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


Anatoly Podgoretsky   (2007-07-20 10:18:00) [9]

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

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


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


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


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


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


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

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


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

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


Dib@zol   (2007-07-20 09:54:00) [11]

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


Dib@zol   (2007-07-20 09:53:00) [12]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо