Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: RS-485 в USB с помощью UCON-485
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам
Oleg_IT
Нужно датчик с RS-485 интерфейсом подключить к компьютеру. Выбрали UCON-485 (http://www.terraelectronica.ru/catalog.php?ID=817&Search=1&Text=ucon%20485&Gde=2&PageS=1), преобразователь RS-485 в USB. Но это устройство Windows «видит» как COM порт с 8-ми битным протоколом (можно ещё 7 бит установить). А как в таком случае передать адрес? И вообще как работать с 9-и битном протоколом?
Не могу найти даташит на эту штуковину. Помогите разобраться.
rezident
Цитата(Oleg_IT @ May 21 2008, 23:09) *
А как в таком случае передать адрес? И вообще как работать с 9-и битном протоколом?
А никак. Нужно использовать другие протоколы с адресацией, которые не привязаны жестко к формату символа. Вон большинство современных модемов тоже имеют всего 10-битный регистр и не позволяют работать в "прозрачном" режиме ни с четностью, ни с 9-и битной посылкой. Так что используйте Wake, SLIP, Modbus и пр. подобные протоколы связи.
Oleg_IT
Ни какой другой интерфейс использовать не могу, он определяется датчиком, а другого датчика нет. Может все-таки есть возможность работать по USB с этим датчиком?
rezident
"с этим датчиком" - с каким "этим"?
VDG
Цитата(Oleg_IT @ May 21 2008, 22:22) *
Ни какой другой интерфейс использовать не могу, он определяется датчиком, а другого датчика нет.

Значит просто делаете преобразователь 9-ти битного формата датчика в 8-ми битный пакетный и заводите в комп. Ничего сложного нет.
Oleg_IT
Цитата(rezident @ May 21 2008, 22:37) *
"с этим датчиком" - с каким "этим"?

«Этот датчик» это тензо датчик. Вопрос собственно не по датчику, а по 485-му интерфейсу. К компьютеру можно подойти только из вне, ни какие платы во внутрь поставить не получится, гарантия, «политика»…

Цитата(VDG @ May 22 2008, 00:46) *
Значит просто делаете преобразователь 9-ти битного формата датчика в 8-ми битный пакетный и заводите в комп. Ничего сложного нет.

А можно и как это сделать на уже имеющимся оборудовании. К сожалению, на разработку, пайку и отладку чего-то своего времени нет. Так вот живём… Увы.
MrYuran
Цитата(Oleg_IT @ May 22 2008, 06:14) *
К сожалению, на разработку, пайку и отладку чего-то своего времени нет. Так вот живём… Увы.

Время = Деньги
Покупаете чужое время за деньги либо экономите деньги (? не всегда) и тратите своё время.
Смотря что для вас важнее.

В вашем случае можно поставить простейший контроллер, который будет преобразовывать формат сообщений. Знающему человеку работы на полдня (вместе с пайкой и отладкой).

Кстати о птичках: а вы, когда выбирали этот модуль, не видели чтоли, что он нестандартной ориентации? (в смысле протокола)
Oleg_IT
Цитата(MrYuran @ May 22 2008, 08:44) *
Кстати о птичках: а вы, когда выбирали этот модуль, не видели чтоли, что он нестандартной ориентации? (в смысле протокола)

Честно говоря был уверен, что если он, преобразователь из 485, то обязан полностью поддерживать этот протокол. Может он и умеет это делать, только документации для него нет, и у меня и у продавца.
MrYuran
Цитата(Oleg_IT @ May 22 2008, 08:17) *
Честно говоря был уверен, что если он, преобразователь из 485, то обязан полностью поддерживать этот протокол. Может он и умеет это делать, только документации для него нет, и у меня и у продавца.

С преобразователем как раз всё в порядке, я имел в виду датчик.
9 бит - это совершенно нестандартный режим как для 232, так и для 485.
Ну чё ещё можно сделать...
Может, бит чётности использовать как 9-й?
Может, выложите протокол обмена с вашим датчиком, глядишь чё и накумекаем...
Oleg_IT
Цитата(MrYuran @ May 22 2008, 09:45) *
9 бит - это совершенно нестандартный режим как для 232, так и для 485.


Я всегда считал, что если в 485-ом есть адресация, то это по умолчанию 9 бит.
А с протоколом всё просто, в датчик посылаем три байта, адрес, команда 1, конец посылки. Из датчика получаем пять байт, тот же адрес, команда 2, младшая часть данных, старшая часть данных, конец посылки.
Кстати по поводу 9 бит я уже не уверенsmile.gif Сейчас свяжусь с разработчиком датчика, уточню.
MrYuran
RS-485 не подразумевает вообще никакой адресации.
Это протокол физического уровня
Адрес - это уже канальный уровень(если склероз не подводит)
логическая организация кадра - один-в-один как в 232.
То есть старт(1), инф.байт(5-7-8), чётность(1), стоп(1-1,5-2).
Несколько кадров (байт) образуют пакет, и вот уже в пакете вы определяете, где адрес, где данные, КС и т.д.
Oleg_IT
Правильно. А адрес от данных отличается именно этим девятым битом, если он установлен в 1, то это адрес, если 0, то данные.
rezident
Цитата(MrYuran @ May 22 2008, 13:29) *
RS-485 не подразумевает вообще никакой адресации.
Это протокол физического уровня
Не нужно вносить еще большей путаницы. RS485 это никакой не протокол, а стандартный интерфейс. В стандарте TIA/EIA-485-A описаны только физические и электрические параметры интерфейса, но никаких упоминаний о протоколе нету.
Цитата(Oleg_IT @ May 22 2008, 13:42) *
Правильно. А адрес от данных отличается именно этим девятым битом, если он установлен в 1, то это адрес, если 0, то данные.
Это так называемый Address-Bit Format в отличие от Idle-Line Format. Такой формат использовался, например, в протоколе PiNET. Реализация адрес-битного формата передачи в Windows "слегка" затруднена. Т.к. во-первых, "мешается" FIFO UARTа, а во-вторых, нужно обрабатывать ошибки приема на уровне регистров UART, а не функций Windows работы с COM-портом. Потому что в Windows поток из COM-порта принимается, несмотря на ошибки паритета, которые нужно отслеживать и обрабатывать при адрес-битном протоколе. Могу при случае уточнить у коллеги, как это лучше делать. Он когда-то занимался реализацией протокола PiNET на PC.
И я согласен с MrYuran, что для вашего случая проще всего сделать конвертор протоколов на любом подходящем микроконтроллере. Причем, если вы совместите его с мостом USB-UART и драйвером RS485, то заодно замените этот дурацкий конвертор UCON-485.
MrYuran
Цитата(rezident @ May 22 2008, 10:54) *
В cтандарт TIA/EIA-485-A описаны только физические и электрические параметры интерфейса, но никаких упоминаний о протоколе нету.

Ну да, а стандарт де факто 485 = 232+преобразователь уровней
(мы говорим Партия, подразумеваем - Ленин...)
Цитата
Правильно. А адрес от данных отличается именно этим девятым битом, если он установлен в 1, то это адрес, если 0, то данные.

Правильно будет всё-таки уточнить протокол обмена с датчиком (с точностью до бита), поддерживает ли он вообще адресацию, каким образом и т.д.
А потом решать проблему (если она есть)
Oleg_IT
Цитата(rezident @ May 22 2008, 12:00) *
Причем, если вы совместите его с мостом USB-UART и драйвером RS485, то заодно замените этот дурацкий конвертор UCON-485.

А почему он дурацкий?smile.gif

А протокол, конечно уточню.
rezident
Цитата(MrYuran @ May 22 2008, 14:04) *
Ну да, а стандарт де факто 485 = 232+преобразователь уровней
(мы говорим Партия, подразумеваем - Ленин...)
Это ваще бред какой-то cranky.gif Вот ознакомьтесь с общим обзором стандартов. http://www.national.com/an/AN/AN-216.pdf
Цитата(Oleg_IT @ May 22 2008, 15:17) *
А почему он дурацкий?smile.gif
Потому что все широкораспространенные м/с мостов USB-COM поддерживают адрес-битные форматы и у них реализованы режимы odd, even, mark, space, no parity для 9 бита. Под широкораспространенными я имею в виду мосты типа FT232/FT232R от FTDIChips и CP2102/CP2103 от Silicon Lab.
MrYuran
Цитата(rezident @ May 22 2008, 13:24) *

спасибо, узнал кое-что интересное. Например, что 422 можно шиной включать. Я почему-то думал, что только точка-точка...
А ещё по-моему есть советские ГОСТы на интерфейсы. Вот бы их глянуть... RS-232 по-моему назывался "стык С2"
galjoen
Цитата(rezident @ May 22 2008, 14:24) *
Потому что все широкораспространенные м/с мостов USB-COM поддерживают адрес-битные форматы и у них реализованы режимы odd, even, mark, space, no parity для 9 бита. Под широкораспространенными я имею в виду мосты типа FT232/FT232R от FTDIChips и CP2102/CP2103 от Silicon Lab.

Да реализованы. Но КАК реализованы. Если менять 9й бит в процессе передачи, то будет БОЛЬШАЯ задержка между передачей байтов с разными 9ми битами. Не все протоколы такое вытерпят.
Поэтому вариант с контроллером за $1 лично мне гораздо больше нравится. Хотя там на мой взгляд не полдня, а целый день работы.
rezident
Цитата(galjoen @ May 22 2008, 17:35) *
Да реализованы. Но КАК реализованы. Если менять 9й бит в процессе передачи, то будет БОЛЬШАЯ задержка между передачей байтов с разными 9ми битами. Не все протоколы такое вытерпят.

А в случае FIFO-ного UARTа на материнке задержка меньшая будет что ли? И вообще я не понял к чему это замечание? Корневое сообщение топка прочитайте. Конвертор автора топика вообще не поддерживает 9-й бит.
Oleg_IT
Цитата(rezident @ May 22 2008, 14:24) *
Потому что все широкораспространенные м/с мостов USB-COM поддерживают адрес-битные форматы и у них реализованы режимы odd, even, mark, space, no parity для 9 бита. Под широкораспространенными я имею в виду мосты типа FT232/FT232R от FTDIChips и CP2102/CP2103 от Silicon Lab.

Так этот конвертер именно на FTDI и построен. Мне кажется, что я не всё по нему знаю, документации нет.
Цитата(rezident @ May 22 2008, 16:03) *
Конвертор автора топика вообще не поддерживает 9-й бит.

Вы в этом уверены??? У Вас есть документация на этот конвертер?
rezident
Цитата(Oleg_IT @ May 22 2008, 18:16) *
Так этот конвертер именно на FTDI и построен. Мне кажется, что я не всё по нему знаю, документации нет.
Точно? А чего же мы тут тогда копья ломаем? twak.gif Вам на сайт производителя моста USB-COM за документацией и описанием API функций нужно.
http://www.ftdichip.com/Documents/ProgramGuides.htm
VDG
Цитата(Oleg_IT @ May 22 2008, 07:14) *
А можно и как это сделать на уже имеющимся оборудовании.

Вряд ли..
Oleg_IT
Цитата(rezident @ May 22 2008, 16:54) *
Точно? А чего же мы тут тогда копья ломаем? twak.gif Вам на сайт производителя моста USB-COM за документацией и описанием API функций нужно.
http://www.ftdichip.com/Documents/ProgramGuides.htm

Сайт производителя конвертера http://www.inexglobal.com/. Но там даташина на этот конвертер не нашёл. А микруха USB там именно FTDI. Программа тестирования от них на диске есть с их логотипом.
rezident
Цитата(Oleg_IT @ May 22 2008, 19:13) *
А микруха USB там именно FTDI. Программа тестирования от них на диске есть с их логотипом.
Я не понял, вам шашечки или ехать? smile.gif Чего вы к логотипу-то привязались? Вам описание API функций для работы с DLL-кой нужно. Вот и читайте его на сайте производителя м/с - FTDI. Потому, что я очень сильно и не без основания сомневаюсь, что какой-то малоизвестный продавец комплектует конвертор своими собственными драйверами.
Oleg_IT
Цитата(rezident @ May 22 2008, 17:37) *
Я не понял, вам шашечки или ехать? smile.gif Чего вы к логотипу-то привязались? Вам описание API функций для работы с DLL-кой нужно. Вот и читайте его на сайте производителя м/с - FTDI. Потому, что я очень сильно и не без основания сомневаюсь, что какой-то малоизвестный продавец комплектует конвертор своими собственными драйверами.

Этот конвертер Windows «видит» как СОМ порт, и работать с ним можно только как со стандартным устройством ввода/вывода, т.е. как с файлом. Может еще есть способ с таким портом работать, но я его не знаю.
rezident
Цитата(Oleg_IT @ May 23 2008, 00:27) *
Может еще есть способ с таким портом работать, но я его не знаю.
Не боясь прослыть занудой, я вам в третий раз даю ссылку на сайт производителя, где лежит документация для работы с этой м/с.
http://www.ftdichip.com/Documents/ProgramGuides.htm
Но раз вы сами не в состоянии найти необходимый документ laughing.gif , даю на всякий случай прямую ссылку на руководство по использованию библиотечных API-функций драйвера.
http://www.ftdichip.com/Documents/ProgramGuides/D2XXPG34.pdf
Oleg_IT
Спасибоsmile.gif
Oleg_IT
Взял файлы ftd2xx.dll, ftd2xx.lib, ftd2xx.h из архива <CDM 2.04.06 WHQL Certified> с сайта http://www.ftdichip.com/Documents/ProgramGuides.htm.
Вставил в проект Visual Studio. Всё собралось.
Но ftStatus = FT_ListDevices(&numDevs,NULL,FT_LIST_NUMBER_ONLY); говорит, что количество подключённых устройств 0 (ftStatus = 0, numDevs = 0). Но конвертер подключён и работает, по осциллографу вижу правильный выходной сигнал, когда работаю с ним как с файлом через СОМ порт. Может не то взял, подключил?

Уточнил протокол, всё проще и сложнее чем я думал. Битов там 8, а скорость 345 600 бит/сек. Если я работаю через СОМ порт то такую скорость поставить не удаётся, максимум 256 000. Получается, что только через API работать можно.
rezident
Ну тут уже не интерфейсные, а программные заморочки начались. А с программированием в Windows у меня тяжело. laughing.gif Сорри.
Oleg_IT
Понимаюsmile.gif И за то что рассказали большое спасибо.
Ну, хотя бы я в правильном направлении двигаюсь? Ту библиотеку взял?
rezident
Цитата(Oleg_IT @ May 23 2008, 18:24) *
Ту библиотеку взял?
Ну насколько я понимаю, там драйвера VCP (виртуального COM-порта) и D2xx (прямого доступа к FT2xx) все в одном архиве.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.