Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2008.03.16;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2008.03.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
6-1182355727
FireMan_Alexey
2007-06-20 20:08
2008.03.16
Вопрос по отслеживанию подключений


6-1182316588
Dmitriy_010
2007-06-20 09:16
2008.03.16
COM порт через Ethernet


2-1203197556
<LeXa>
2008-02-17 00:32
2008.03.16
Как установить нач. папку в Opendialog для не первого его запуска


15-1202375660
@!!ex
2008-02-07 12:14
2008.03.16
Компиляция двух вариантов


11-1184948750
ElectriC
2007-07-20 20:25
2008.03.16
Vista Aero





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский