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

Вниз

Как обмануть устройство?   Найти похожие ветки 

 
Fredericco ©   (2002-10-09 19:26) [0]

Вопрос, я думаю, будет интересен всем.
Кто знает такой протокол DMX512? Кто не знает - это производная от RS-485. RS-485 - усовершенствованный RS-232(обычный СОМ порт). Так вот есть устройство, работающее по протоколу DMX512. Есть плата на компьютере на два 485 порта (внешне 485 выглядит как обычный СОМn). DMX512 - такие же три провода, как и 485 да и сигналы вроде похожи. Продолжительность сигнала бита для DMX512 4 мкс. То есть скорость считывания информации 250Кбит/с.
Что бы устройство работало нужно посылать следующие байты: сперва ноль, на протяжении не менее 88 мкс, затем пауза из единичек не менее 8 мкс и не более 1 с. И потом байт данных, где первый бит стартовый (0), затем 8 бит данных (не важно каких) и два стоповых бита(1). Выходит мы должны отправить :

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Первые нолики (их 22 - 22x4 мкс = 88 мкс) 1 1 Пауза из единичек (2x4 мкс = 8 мкс). 0 1 1 0 1 0 0 1 0 1 1 Сам байт данных, один стартовай бит, и два стоповых.

Так вот. СОМ порты при отправке данных разделяют их (данные) на пакеты, и добавляют свои биты, стартовый бит которых 0, и (вариант) два стоповых 1. Из-за чего у меня не получается отправить 22 нуля подряд (с остальным нет проблем). Если я посылаю ноль, то фактически на провод уходит 0.00000000.11. И из-за этого устройство не работает.
Если не трудно поделитесь соображениями, а то я уже вообще в тупике.

С уважением Fredericco.


 
Lendl   (2002-10-10 09:48) [1]

Я так разумею:
Во-первых любой СОМ порт можно программно настроить под требуемый протокол обмена (биты, четности, скорости,...).
Во-вторых, я так и не понял какой интерфейс имеет Ваше устройство, работающее по протоколу DMX512.
Ведь три провода - это как раз минимально необходимые сигналы для работы именно(!) с СОМ портом.
У RS485 может быть либо два (half duplex) либо четыре (full duplex) провода, но никак не три!
По-моему Вы просто запутались с интерфейсами, тобишь в трех проводах.


 
Fredericco ©   (2002-10-10 10:02) [2]

2Lendl (10.10.02 09:48)
Хотел бы я запутаться - тогда бы проблема быстро решилась. Все правильно на счет вариантов RS-485, за исключением одного. Третий провод - это земля (GND), правда она редко используется и часто может просто отсутствовать, однако не учитовать нельзя. На счет настроек порта. Стоп биты, насколько я понял, всегда есть и менять можно только их кол-во (1,1.5,2). Что такое четность я не знаю. Скорости менять пробывали однако не вышло. На счет интерфейса:

"Стандарт EIA485 (RS485) описывает физические уровни, но не сами сигналы и их назначение. Стандарт DMX512 детально описывает все используемые сигналы, оставляя, тем не менее, возможность для маневрирования. Эта гибкость позволяет для различных нужд и различных бюджетов находить приемлемые решения. Например, стандарт не требует, чтобы происходила передача информации о всех 512 каналах. Если можно обойтись меньшим числом каналов, то стандарт разрешает уменьшать номер последнего канала в посылке"

http://dsl.msk.ru/rus/around/dmx512/dmx512.htm#p39

С уважением Fredericco.



 
Lendl   (2002-10-10 11:38) [3]

И все-таки COM-порты здесь не причем.
Я бы, на Вашем месте, источник проблем искал так:
1. проверил разводку интерфейсных кабелей;
2. проверил наличие и подключение терминаторов (обычно 120 Ом), причем на обоих концах Master-Slave и вне зависимости от расстояния;
3. ради чистоты эксперимента убрал бы 3-й провод(экран);
4. подключил бы 3-й комп.(с RS485) в эту сеть RS-485 и через него в любой настроенной(!) на нужый протокол терминалке смотрел трафик, который проходит по сети;
5. из собственного опыта работы могу сказать, что сейчас на рынке есть просто огрОмное количество различного рода преобразователей RS232/RS485 и плат, все они отличаются друг от друга не только наличием интеллекта но и быстродействием, поддерживаемыми протоколами и т.д. Поэтому только опытным путем Вы сможете найти оптимальный для себя вариант. Но лучше узнать рекомендации от самих производителей DMX512.
И последнее (!!!)
При наличии какой-нибудь работающей демо-версии программы общения с DMX512 Вы решите все свои проблемы.
Неужели нет прогамм? Протокол ведь известен аж с 1986 г.


 
Fredericco ©   (2002-10-10 12:07) [4]

2Lendl (10.10.02 11:38)
Что на рынке много преобразователей, я знаю. Например у меня стоит MOXA CP-114.
На устройстве разъем 512 имеет 3 ножки, и во всех описаниях DMX512 имеет 3 контакта. Разводку первым делом проверил. Даллее. Уже готовых програм я не нашел, так как на рынке полно устройств (а именно NSI I/F-501) которые общаются с ПС по 232 со своим собственным протоколом, а ны выходе дают DMX512 (как бы аппаратная реализация стоющая от 450$ и выше!). Вот почему я пытаюсь сделать тоже что и NSI, только на уровне программы. Да кстати, последняя модификация протокола в 1990.
Просматривать трафик - дело неблагодарное. Во-первых, при оцифровке сигналов порт ПС убирает (как ему кажется) стартовые и стоповые биты (которые ингода таковыми не являются). И во-вторых: вот что проходит за примерно 1 сек.:

(63x00) 08 (128x00) 08
(6x00) 08 (71x00) 08 (136x00) 08
(21x00) 08 (86x00) 06 (151x00) 04
(36x00) 04 (101x00) 08 (166x00) 08
(51x00) 08 (116x00) 08
(1x00) 08 (66x00) 08 (131x00) 04
(6x00) 08 (71x00) 08 (136x00) 08
(20x00) 08 (85x00) 08 (150x00) 08
(35x00) 08 (100x00) 08 (165x00) 08
(51x00) 08 (116x00) 08
06 (65x00) 06 (130x00) 06
(8x00) 04 (73x00) 08 (138x00) 08
(22x00) 08 (87x00) 08 (152x00) 08
(39x00) 08 (104x00) 08 (169x00) 08
(54x00) 04 (119x00) 06
(1x00) 06 (66x00) 08 (131x00) 08
(9x00) 08 (74x00) 08 (139x00) 04
(23x00) 06 (88x00) 06 (153x00) 08
(38x00) 08 (103x00) 08 (168x00) 08 (233x00) 08 (298x00) 08
(1x00) 04 (66x00) 06 (131x00) 06
(9x00) 04 (74x00) 08 (139x00) 08
(25x00) 08 (90x00) 08 (155x00) 08
(41x00) 08 (106x00) 08 (171x00) 08
(56x00) 04 (121x00) 08
(1x00) 08 (66x00) 08 (131x00) 06
(9x00) 08 (74x00) 08 (139x00) 08
(23x00) 08 (88x00) 08 (153x00) 08
(38x00) 08 (103x00) 08 (168x00) 08
(54x00) 06 (119x00) 08
(1x00) 08 (66x00) 08 (131x00) 08
(11x00) 08 (76x00) 08 (141x00) 08
(26x00) 08 (91x00) 06 (156x00) 04
(42x00) 06 (107x00) 08 (172x00) 08
(57x00) 08 (122x00) 08
(1x00) 08 (66x00) 06 (131x00) 08
(11x00) 08 (142x00) 08
(26x00) 08 (91x00) 08 (156x00) 08
(41x00) 08 (106x00) 08 (171x00) 08 (236x00) 04 (301x00) 08
(1x00) 08 (66x00) 08 (131x00) 08
(12x00) 08 (77x00) 08 (142x00) 08
(29x00) 08 (94x00) 04 (159x00) 06
(43x00) 04 (108x00) 08 (173x00) 08
(59x00) 08 (124x00) 08
(1x00) 06 (66x00) 08 (131x00) 08 (196x00) 08 (261x00) 08 (326x00) 04
(28x00) 08 (93x00) 08 (158x00) 08
(43x00) 08 (108x00) 08 (173x00) 08
(59x00) 08 (124x00) 08
(1x00) 06 (66x00) 06 (131x00) 06
(14x00) 04 (79x00) 08 (144x00) 08
(31x00) 08 (96x00) 08 (161x00) 08
(46x00) 08 (111x00) 08 (176x00) 04
(62x00) 08 (127x00) 08
(1x00) 08 (66x00) 04 (131x00) 04
(15x00) 06 (80x00) 08 (145x00) 08
(30x00) 08 (95x00) 08 (160x00) 08
(46x00) 08 (111x00) 08 (176x00) 04
(61x00) 06 (126x00) 06
(1x00) 08 (66x00) 08 (131x00) 08
(16x00) 08 (81x00) 08 (146x00) 08
(34x00) 08 (99x00) 08 (164x00) 04



Кстати при прослушке трафика между NSI и устройством работающим по DMX512 последнее отказывается работать, что наводит на мысль о том, что порт ПС искажает сигнал своими старт/стоп битами.


 
REA ©   (2002-10-10 12:41) [5]

Цифровым осиллографом посмотреть полезно что по шине бегает.
Я как то делал под досом уравление старт/стоповыми битами, чтобы они формировались какие надо. Похоже протокол то синхронный раз время задается, а не асинхронный как COM?


 
Fredericco ©   (2002-10-10 12:50) [6]

REA © (10.10.02 12:41)
Я не очень понимаю синхронный и асинхронный :-).
А на счет осиллографа - уже думаю куда идти покупать.


 
Ru ©   (2002-10-10 13:32) [7]

У СОМ-порта четыре режима передачи данных. Попробуй посмотреть настройки СОМ-порта: правой клавишей мыши на "Мой компьютер" выбираешь свойства. В списке устройств ищеш порты СОМ и LPT. Дважды "кликаешь" на необходимом тебе порту СОМ выбираешь "Настройки порта".

Синхронный режим передачи сопровождается синхронизирующими сигналами (сигналами тактовой частоты), асинхронный соответственно без этих сигналов.


 
REA ©   (2002-10-10 13:56) [8]

вобщем проще наверно железочку спаять на микроконтроллере - стоить будет копейки.


 
Fredericco ©   (2002-10-10 14:02) [9]

2REA © (10.10.02 13:56)
За место осцилографа или устройство генерирующее DMX512?


 
jonik pegas ©   (2002-10-10 14:08) [10]

Устройство генерирующее DMX512. Такое было описано в журнале "схемотехника" www.dian.ru не помню номер-до дома доберусь посмотрю.


 
Fredericco ©   (2002-10-10 14:16) [11]

2jonik pegas © (10.10.02 14:08)
Спасибо!


 
jonik pegas ©   (2002-10-11 08:38) [12]

Значит статья "Схемотехника световых сканеров" журнал "Схемотехника" за 3.2002. Там есть схема контроллера с интерфейсом DMX на м/к AT89c51 но без исходников, вообщем если не знаешь что это такое, лучше не браться. Однако там написано "что сигнал BREAK устанавливается программно установкой 6 бита регистра LSR (adress 3fdh). Длительность сигнала контролируется по флагу "Выходной регистр передатчика пуст" Т.е после установки BREAK передаются два пустых байта и фиксируется момент окончаеия передачи второго байта. Фактически на линии в это время присктствует BREAK. Пауза до передачи нулевого стартового кода задается программно" Здесь вроятно допущена неточность-бит 6 регистра LCR формирование обрыва линии (посылка нулей). установлении этого бита в 1 порт начинает посылать в линию двоичные нули до тех пор пока эторт бит не будет установлен в 0. т.е протокол будет выглядеть так-установка LCR.6 в еденицу, посылка 2-х байт, ждем пока LSR.6 не сбросится, сбрасываем LCR.6. Затем немного ожидаем-не менее 8 мкс и начинаем передачу. Более подробно по порты http://andymrrc.narod.ru/docs/hardware/interface/2.htm
http://www.rusdoc.ru/articles/280/
Как это будет выглядедеть на winApi на Delphi-надо подумать, возможно придется напрямую в порт писать.


 
Fredericco ©   (2002-10-11 11:29) [13]

jonik pegas © (11.10.02 08:38)
Спасибо огромное. Сижу теперь думаю, как это програмно реализовать!


 
Yelchev   (2002-10-11 12:07) [14]

Уважаемый Fredericco если тебе будет интересно то помотри www.riyalasers.com Там есть недорагая плата для ДМХ с тремя выходными и одним входным каналам с драйверами и SDK впридачу. Сам все писал и использовал так что как на мой взгляд это наилучшее решение использовать специализированые устройства.


 
Fredericco ©   (2002-10-11 12:24) [15]

2Yelchev (11.10.02 12:07)
Уважаемый Yelchev! Спасибо за совет! Но у меня два встречных вопроса. Сколько эта карта стоит (а то я на сайте не нашел)? И можно ли ее купить в Москве?
С уважением Fredericco.


 
Fredericco ©   (2002-10-11 14:13) [16]

Ребят, а что выполнят функция SetCommBreak?


 
Lendl   (2002-10-11 14:51) [17]

Описание:
function SetCommBreak(Cid: Integer): Integer;

Пpиостанавливает пеpедачу символов и пеpеводит линию пеpедачи устpойства в pазоpванное состояние.

Паpаметpы:
Cid: Устpойство связи.

Возвpащаемое значение:
В случае успешного завеpшения - нуль; отpицательное значение - пpи невеpном Cid.


Применяется вместе с:
Описание:
function ClearCommBreak(Cid: Integer): Integer;

Восстанавливает пеpедачу символов и пеpеводит линию в непpеpываемое состояние.

Паpаметpы:
Cid: Восстанавливаемое устpойство связи.

Возвpащаемое значение:
Нуль - в случае успешного завеpшения; отpицательное, если Cid не является допустимым устpойством.


Последняя Функция находится в библиотеке kernel32.dll


 
jonik pegas ©   (2002-10-11 15:10) [18]

или EscapeCommFunction

The EscapeCommFunction function directs a specified communications device to perform an extended function.

BOOL EscapeCommFunction(
HANDLE hFile, // handle to communications device
DWORD dwFunc // extended function to perform
);
hFile
[in] Handle to the communications device. The CreateFile function returns this handle.
dwFunc
[in] Specifies the code of the extended function to perform. This parameter can be one of the following values.
///
SETBREAK
Suspends character transmission and places the transmission line in a break state until the ClearCommBreak function is called (or EscapeCommFunction is called with the CLRBREAK extended function code). The SETBREAK extended function code is identical to the SetCommBreak function. Note that this extended function does not flush data that has not been transmitted.
CLRBREAK
Restores character transmission and places the transmission line in a nonbreak state. The CLRBREAK extended function code is identical to the ClearCommBreak function.
в принципе длину BREAK можно установит и более 88 мкс


 
Alexandrrr   (2002-10-12 00:52) [19]

В принципе можно попробовать посылать, используя линии управления модемом. Я когдато мутил такую штуку, но она была медленная, поэтому не уверен что удасться соблюсти микросекунды


 
REA ©   (2002-10-14 10:04) [20]

Не всякая RTOS такое потянет, а тем более вындоус. У него как драйвер захочет так и выдаст.


 
Fredericco ©   (2002-10-14 14:44) [21]

Да я уже понял. У 98 нет точночти до мкс. У НТ есть.



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

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

Наверх




Память: 0.54 MB
Время: 0.017 c
3-36057
GGWIN
2002-11-22 16:58
2002.12.12
Сортировка в таблице без индекса


3-36040
Calm
2002-11-25 14:46
2002.12.12
MS SQL: Как вернуть несколько строк с помощью Raiserror()


3-36045
Uran
2002-11-25 11:11
2002.12.12
Шифрование строки


1-36246
Cranium
2002-12-02 03:29
2002.12.12
Контроль ввода...


6-36320
delphi5.01
2002-10-18 16:13
2002.12.12
Download *.html