Батарейка
1.5 вольт для
проверки RS-485
Адрес
документа |
http://90.189.213.191:4422/doc_sh/rs485_test_sh/rs485_test_sh.doc
инд1-16-2 |
Адрес
программы |
http://shabronov_s2.dyn-dns.ru/temp/temp/test_monsys_all.zip |
Вступительная
часть: В работе
предложен
способ
тестировании
интерфейса RS485 Методика
проверялась
на
адаптерах CH340
и FT232BM
Приведена
схема
простого
пробника.
Приведена
методика проверки
с
батарейкой,
светодиодом.
Текст,
приведенной
программы,
содержит комментарии
и
предназначен
для понимания
методики
проверки. |
|
Содержание
Кратко о
интерфейсе
·
Интерфейс
RS-485 получил
в настоящее
время
большое
распространение
в связи с
появлением достаточно
дешевых
адаптеров на
основе микросхем
серии CH-340 и
персональных
компьютеров. Достоинства
интерфейса:
минимальное
количество
проводов и
большая
помехозащищенность.
·
Имеется
всего два
провода
данных и
общий
провод. При
небольшой
длине линии,
можно
обойтись и без
общего
провода. Все
зависит от ЭМО- «Электро-Магнитной-Обстановки»
окружающей
действительности.
·
Важно!
Передача
осуществляется
или туда, или
обратно.
·
Важно!
В передаче
участвуют
два провода,
которые
работают или
туда или
обратно.
·
Внешний
вид
адаптеров
серии CH-340 а так же
более
«солидных» представлен
ниже на
рисунках.
Рисунки «кликабельны».
Причина 1.
Адаптер
может быть
неисправным.
Даже при продаже.
А при
возврате –
Вам заявят –
сами спалили!
Причина 2.
Адаптер
исправен, но
выводы подключать
надо
правильно.
Вывод D+
должен всюду
быть
известен,
так
же как и D-.
Хорошо, если
Вы
используете разноцветную
проводку. А
если нет? Как
узнать, где
же тут D+
и где D-.
Причина 3
Требования
наглядности
и
убедительности.
Специальным
прибором
надо
научиться работать.
А в rs-485
всего
два провода.
Приборы надо
с собой
возить. Если
они
автономные –
то и менять
батарейки. А
самое важное
– это цена
прибора. И эти
все приборы
нужны, что бы
проверить
каких-то два
провода.
Но и сам
прибор тоже
может
«врать». Что
тогда?
Вот
в связи с
этими
причинами и
предлагается
данный
способ:
Что
с заповедью
«не навреди»?
Используем
в алгоритме
правило
счета для «папуасов»:
… один, два,
много.
Лишнего не
надо!
Что
происходит с
определением значений
0 и 1 при
подключении
напряжения?
На
рисунке ниже,
показано, что
при внешнем напряжение
происходит
«смещение» нулевого
уровня.
Сигналы 0 и 1
фиксируются
по другим уровням,
и не
соответствуют
правильным.
Это событие и
фиксируется
программой.
Для
уменьшения
смещения
используют терминальные
резисторы,
подключенные
к шинам. Они
уменьшают
«смещение»
нулевого
уровня и
передача осуществляется
без помех. В
данном
методе, все
наоборот,
создание «смещения»
позволяет
определить
исправность RS-485
. Внимание!
В некоторых
типах
адаптеров
устанавливают
терминальные
резисторы и
подключают
их через
перемычки.
Для проверки
их
необходимо
отключить.
·
Лицензия
автора. Программа
распространяется
свободно. Вы можете
ее
использовать
на свой
страх и риск.
Автор не
несет
ответственности
за
последствия
от работы
программы,
выполненной
Вами. Вы
можете
компилировать
и изменять
ее и
использовать
по своему
усмотрению. Ответственность
автора,
возникает
только при
формировании
договорных
отношений с
заказчиком.
Достоверность
и авторство
программы
подтверждается
датой
создания,
размером и
контрольной
суммой
выдаваемой
на главном
окне программы.
|
Если
Вы
опасаетесь
программ и
программистов,
вот
некоторые
документы
по
авторским
правам: -
авторские
права на
программу -
Закон
об охране
авторских
прав |
·
Скачать
программу по
адресу в
начале статьи.
Ниже на
рисунке
выделено
цветовым
овалом, где
расположены
адреса
скачивания.
Первый
вариант,
слева –
полная
версия. Вторая,
правее –
версия без
рисунка со
схемой адаптера и
других
включенных в
тело рисунков
и библиотек.
Программа
содержит
много других
тестов, но
для работы
выбираем тот,
что нужен, т.е.
проверка RS-485.
·
Выполнить
программу и
клавишами 2
или w установить
проверяемый usb-rs-485 порт.
·
Установка
драйверов USB-RS485 не
входит в
описание
данной
работы. Без
драйверов
дальнейшее
тестирование
не имеет смысла.
Считаем, что
Вы знаете,
что такое драйвер
и его
установили.
Например, ваш
адаптер
установлен
на СОМ-5.
·
Вы
можете
убедиться в
этом, открыв
диспетчер
устройств,
как показано
ниже. Порт
выделен
цветовым
овалом.
·
Клавишами
2/w устанавливаете
порт,
выделено
ниже цветовым
овалом.
·
Если
все драйверы
подключены и
устройство
исправно, то
в режиме
тестов rs 485 откроется
окно,
показано
ниже на
рисунке.
Выделено место
отображения
отклика -- зеленым
овалом. Цвет
окна и знаков
можно
выбрать
опциями в правом
углу –
выделено
красным
овалом.
test_monsys.exe s[k] 5 3 1 3
<enter>
где. s -
опция
задающая
режим работы с
консолью. Режим
без консоли,
опция – К
5 – номер
выбранного
для тестирования
порта;
3 – переход в
главном окне
к режиму
общих тестов;
1 – переход в
режиме общих
тестов к
режиму
тестировании
портов rs232-lpt-485
3 - переход
в окне
тестировании
портов rs232-lpt-485 к
режиму
тестирования
RS485
·
Программа
написана на
языке forth автор
версии языка Черезов
А.
·
Текст программы
«зашит» в тело
исполняемого
модуля.
Получить
все
тексты, входящие
в тесты можно
по команде 3 в
режиме тесты
общие. Т.е.
нажать после
выполнения
программы
цифровые
клавиши 3 –
перейти в
тесты общие и
3 – выполнить
восстановление
всех
исходных текстов.
Показано
ниже
цветовым
овалом строка
опции
В
таблице ниже,
приведен
данный текст:
\ test_kz_rs485_v1.f - тесты по проверке rs-485 через отклик на замыкание шд \ порт назначается через CreateFileA и описатель помещается в переменную handle1 HEX ( все действия в режиме 16 сс )
CREATE Clipboard_WORKS_MEM 0 , ( резервируем переменную для работы с буфером обмена )
: Clipboard_WORKS_N1 ( M -- отображение для работы буфером обмена ) FIX_DIN2 ( установка места отображения ) UST_ATR_LIM_DIN2 ( меняем цвет отображения ) =2( нет данных " ( выдаем ) UST_ATR_NORM_DIN2 ( возвращаем цвет в исходный ) 0x30 SPACES_DIN2 ( и затираем ПБ строку где отображается буфер ) BEEP_M1 ( звуковой сигнал ) ;
: Clipboard_WORKS ( -- вводим данные ) || M1 V1 || ( определяем локальные переменные ) 0xC00 -> M1 ( установили место отображения для позиционирования ) ZCBString ( A -- ) DUP 0= ( принимаем данные из буфера обмена ) IF DROP ( буфер обмена данных занят другим приложением ) M1 Clipboard_WORKS_N1 ( M -- выдаем сообщение по месту ) ELSE ( A -- данные есть передаем в свой буфер и отображаем на экран ) ASCIIZ> ( A1 N1 -- ПЕРЕВОДИМ В ЛИТЕРАЛ СО СЧЕТЧИКОМ ) CloseClipboard DROP ( закрываем буфер, что бы другие пользователи работали ) ( An n - ) DUP 0= IF DROP ( буфер принят но данных нет ) M1 Clipboard_WORKS_N1 ( M -- выдаем сообщение по месту ) ELSE ( An n - данные есть передаем в свой буфер и отображаем ) DUP 0xFF > IF DROP 0xFF THEN ( обрезаем буфер до FF байт ) M1 FIX_DIN2 =2( В порт передается буфер обмена: " ( выдаем подсказку ) 2DUP TYPE_DIN2 ( показываем на окне содержимое буфера ) Clipboard_WORKS_MEM @ 2DUP C! 1+ SWAP CMOVE ( сохраняем данные в виде литерала для передачи ) THEN THEN ;
: TEST_KZ_RS485_MENU ( основное меню ) AR1_DIN2 ( сброс и очистка экрана ) =2( RS-485 - тестирование отклика при замыкании шин данных на 1.5в" CR_DIN2 =2( Выход - ESC, Обновить экран - Пробел, " CR_DIN2 =2( Блок схема разъема адаптера USB-rs485: " CR_DIN2 =2( ================ " CR_DIN2 =2( >-/- usb - rs D+ -< <---- -1.5в При замыкании только такой полюсности" CR_DIN2 =2( 4 шина 485 D- -< <---- +1.5в формируется отклик. " CR_DIN2 =2( ================ " CR_DIN2 =2( Nизм= Отклик= " CR_DIN2 =2( Клавиши управления: " CR_DIN2 =2( 1/q - открыть сайт с описанием; / - открыть диспетчер устройств; " CR_DIN2 =2( 2/w/s/x/a/z - <= +,-,10,1000,10000 изменить скорость выдаваемых байт;" CR_DIN2 =2( 3 - загрузить блок на передачу из буфера обмена. Выделить текст и ctrl+C. Сброс - Пробел;" CR_DIN2 =2( " CR_DIN2 =2( Методика проверки: " CR_DIN2 =2( - программа выдает на D+,D- сигналы формата 0x55 8n1 9600 бит-секунду; " CR_DIN2 =2( и проверяет их соответствие на прием. " CR_DIN2 =2( - При замыкании на +1.5в D- и -1.5в D+ Формат сигналов нарушается " CR_DIN2 =2( и выдается сообщение, о наличии события. Если отклик естЬ, значит порт исправен." CR_DIN2 =2( - Для дополнительной проверки подключить тестируемый порт на контрольный прием, " CR_DIN2 =2( и убедиться, что принимаются выдаваемые сигналы. Внимание! Встречные сигналы создают отклик!" CR_DIN2 =2( - Появление отклика дублируется через =системный динамик=, но выдается с 1-2 секундной " CR_DIN2 =2( задержкой в связи с многозадачностью операционной системы Виндовс. " CR_DIN2 \ ------------------------------------------------------------------------------------
;
\ пример формирования дополнительного потока выполнения :NONAME ( отдельный поток для звука ) DROP 7 EMIT ; TASK: SOST_BEEP
: TEST_KZ_RS485_N1_DIN2 ( k - k -- тест порта и отображение данных ) || M1 SM1 WasWriteBL N1 SOST1 BUF2 WasWriteBL WasRead || ( определяем локальные переменные ) \ формируем буферную память для работы и адреса назначаем локальным переменным S" 12345678" DROP ( A -- ) DUP 4+ @ 0<> IF DUP 4+ 0! 0x10 ALLOCATE THROW OVER ! THEN @ -> SM1 S" 12345678" DROP ( A -- ) DUP 4+ @ 0<> IF DUP 4+ 0! 0x100 ALLOCATE THROW OVER ! THEN @ -> BUF2 S" 12345678" DROP ( A -- ) DUP 4+ @ 0<> IF DUP 4+ 0! 0x10 ALLOCATE THROW OVER ! THEN @ -> SOST1 S" 12345678" DROP ( A -- ) DUP 4+ @ 0<> IF DUP 4+ 0! 0x10 ALLOCATE THROW OVER ! THEN @ -> WasWriteBL S" 12345678" DROP ( A -- ) DUP 4+ @ 0<> IF DUP 4+ 0! 0x10 ALLOCATE THROW OVER ! THEN @ -> WasRead 0x300 -> M1 ( ОПРЕДЕЛЕНО МЕСТО НАЧАЛО ОТОБРАЖЕНИЯ ) handle1 0= IF ( если порт не определился, то сообщение ошибки другим цветом и выход из слова ) M1 0x1D + FIX_DIN2 UST_ATR_LIM_DIN2 =2( Ошибка открытия порта" UST_ATR_NORM_DIN2 EXIT THEN \ начало проверки --------------------------------------- M1 0x407 + FIX_DIN2 SM1 DUP @ 3 .RDIN2 1+! ( выдаем количество проходов проверки переменная SM1 ) \ -------- передаем 2а байта или содержимое буфера обмена Clipboard_WORKS_MEM @ COUNT ( An n -- достали данные буфера обмена из выделенной области ) DUP 0= IF ( An n - содержимое буфера пустое выдаем 2а байта ) 2DROP ( -- убрали пустые данные ) 0 WasWriteBL S" __" SWAP 0x5555 OVER W! handle1 WriteFileEx DROP ( передаем ) ELSE ( An n - данные есть в буфере выделенной области обмена ) 0 WasWriteBL 2SWAP SWAP handle1 WriteFileEx DROP ( передаем ) THEN \ ---------- прием отклика 2а байта 0 WasRead 2 BUF2 handle1 ReadFileEx DROP M1 0x41A + FIX_DIN2 BUF2 @ HEX 3 .RDIN2 ( выдаем значение отклика в любом случае ) BUF2 @ SOST1 @ 2DUP <> ( проверка значения принятого в буфере и состояния при предыдущем проходе ) IF DROP SOST1 ! ( сохранение нового состояния линии и отображение отклика ) \ 0 SOST_BEEP START DROP ( выдаем звук через отдельный поток но задержки большие, убрали ) BEEP2 ( выдаем звук сигнал пиком ВНИМАНИЕ НЕ НАВСЕХ ПК ЗВУК ВЫДАЕТСЯ ) 7 EMIT ( выдаем звук через системный динамик ) \ --------------------------------------------------------------- UST_ATR_LIM2_DIN2 ( цвет меняем ) M1 0x115 + FIX_DIN2 ( отображаем замыкание ) =2( <-]" M1 0x215 + FIX_DIN2 ( отображаем замыкание ) =2( <-]" UST_ATR_NORM_DIN2 ( цвет возвращаем ) ELSE 2DROP ( состояние в буфере не изменилось - убираем отображение замыкания ) M1 0x115 + FIX_DIN2 ( затираем замыкание ) =2( " M1 0x215 + FIX_DIN2 ( затираем замыкание ) =2( " THEN \ -- далее, в стеке находиться код нажатия, если это ПРОБЕЛ - сбрасываем и отображение и буфер Clip.. DUP 0x20 = IF BUF2 0! SM1 0! Clipboard_WORKS_MEM @ 0x100 0 FILL THEN ; : UST_V230K ( - устанавливаем скорость в 9600 бит возможно устанавливать и другие скорости для ) [ DECIMAL ] 9600 [ HEX ] MyDCB BaudRate ! ( записали скорость в блок памяти) MyDCB handle1 SetCommState DROP ( --> 0= eror 0<> - ok установили скорость ) ;
: UST_V230K_N1 ( N1 - меняем скорость на новое значение по дельте ) || M1 V1 || ( определяем локальные переменные ) 0xA0E -> M1 ( установили место отображения для позиционирования ) MyDCB BaudRate @ ( N1 Vi -- текущая скорость ) + ( Vi' - прибавили дельту ) DUP -> V1 ( cохранили для отображения ) MyDCB BaudRate ! ( записали скорость в блок памяти) MyDCB handle1 SetCommState ( --> 0= eror 0<> - ok установили скорость ) M1 FIX_DIN2 ( задали место курсора для отображения ) DECIMAL V1 9 .RDIN2 ( отображаем скорость ) HEX 0= IF ( отображаем ошибку установки скорости ) UST_ATR_LIM_DIN2 =2( ERR" UST_ATR_NORM_DIN2 BEEP_M1 ( звуковой сигнал ) ELSE ( установили нормально ) =2( ok" THEN ;
: TEST_KZ_RS485 ( ТЕСт rs485 - главное слово теста ) UST_V230K ( - устанавливаем скорость ) TEST_KZ_RS485_MENU ( основное меню ) 0 UST_V230K_N1 ( N1 -- и отображаем скорость на меню ) Clipboard_WORKS_MEM DUP @ 0= IF 0x104 ALLOCATE THROW SWAP ! ( подготовили память для Clip... ) ELSE DROP THEN 0x900 PZK DUP DUP 4+ 4 CMOVE ! ( сохранили код курсора и новое дали ) TIB-K1 ( К --> получен код от командной строки и помещен в стек ) BEGIN ( K --> ) \ начало цикла тест ========================================================================== WORKS_PZK ( K -- K' управление курсором от клавил влево вправо вверх вниз ) 0x001 OUT_TIME_DIN2_N1 ( M -- выдается время работы ) 0x051 OUT_CURSOR_DIN2_P1 ( M --> выдается показания курсора при движении мышкой ) 0x138 OUT_SOST_COM ( M -- выдача состояния сом-порта ) 0x2A2D STRELKI_MENU_DIN2_DAN ! ( установили место отображения центра стрелок для работы с планшетником ) \ далее строка для создания отображения стрелок при работе с планшетником ['] TEST_KZ_RS485_MENU ( К Aex -- K' ) exSTRELKI_MENU_DIN2 @ EXECUTE 0x250 WORKS_CWET_FNZN_DIN2 ( M -- установки и измения по цвету ) 0x1600 S" test_kz_rs485.bmp" S" 12341234" WORKS_EXE_BMP_DIN2 ( M1 An n Ap n- --- загрузка и отображение фото ) \ -------------------------------------------------------------------------- TEST_KZ_RS485_N1_DIN2 ( k - k -- тест порта и отображение данных ) \ далее проверка кода клавиш управления и действия по ним ----------------------------------- \ далее строка где код функциональной клавиши F1 = 0x70 выполняется печать экрана в файл DUP 0x70 = IF ?KEY1_DIN2_0! ( f1= kx70 ) ['] BUFFER_DIN2 ( y x -- addr ) OUT_PRINT_SKANER_N2 THEN DUP 0x20 = IF ?KEY1_DIN2_0! TEST_KZ_RS485_MENU ( по нажатию пробела выдается меню ) THEN DUP [CHAR] 1 0x901 KOD_KM_DIN2 IF ?KEY1_DIN2_0! ( -- открываем сайт описания при нажатии клавиши 1 ) S" http://90.189.213.191:4422/doc_sh/rs485_test_sh/" START_link_clik BEEP_M1 ( звуковой сигнал ) THEN DUP [CHAR] q 0x903 KOD_KM_DIN2 OVER [CHAR] Q = OR ( если нажали клавишу q или Q ) IF ?KEY1_DIN2_0! ( - вызваем диспетчера устройств компьютера ) SW_SHOW 0 S" devmgmt.msc" DROP S" mmc.exe" DROP S" open" DROP 0 ShellExecuteA DROP BEEP_M1 ( звуковой сигнал ) THEN \ проверка и изменение скорости выдаваемых байт при нажатии клавиш: 2 w s x a z W S X A Z DUP [CHAR] 2 0xA01 KOD_KM_DIN2 IF ?KEY1_DIN2_0! 0xA UST_V230K_N1 ( N1 -- ) THEN DUP [CHAR] w 0xA03 KOD_KM_DIN2 OVER [CHAR] W = OR IF ?KEY1_DIN2_0! 0xA NEGATE UST_V230K_N1 ( N1 -- ) THEN DUP [CHAR] s 0xA05 KOD_KM_DIN2 OVER [CHAR] S = OR IF ?KEY1_DIN2_0! K1000 UST_V230K_N1 ( N1 -- ) THEN DUP [CHAR] x 0xA07 KOD_KM_DIN2 OVER [CHAR] X = OR IF ?KEY1_DIN2_0! K1000 NEGATE UST_V230K_N1 ( N1 -- ) THEN DUP [CHAR] a 0xA09 KOD_KM_DIN2 OVER [CHAR] A = OR IF ?KEY1_DIN2_0! K10000 UST_V230K_N1 ( N1 -- ) THEN DUP [CHAR] z 0xA0B KOD_KM_DIN2 OVER [CHAR] Z = OR IF ?KEY1_DIN2_0! K10000 NEGATE UST_V230K_N1 ( N1 -- ) THEN \ загрузка данных из буфера обмена для передачи в порт если нажали клавишу 3 DUP [CHAR] 3 0xB01 KOD_KM_DIN2 IF ?KEY1_DIN2_0! Clipboard_WORKS ( -- вводим данные ) THEN \ окончание цикла теста проверка нажатия если esc то выход ========================================== DROP ?KEY1_DIN2@ ( K --> ) DUP 0x1B ( код ESC ) = UNTIL DROP ?KEY1_DIN2_0! PZK DUP 4+ SWAP 4 CMOVE ( выход по старому значению ) ;
' TEST_KZ_RS485 ( Aexe -- адрес выполнения теста передается при компиляции в основное тело программы ) \EOF ( выход из компиляции окончение программы далее текст комментариев )
09:13 19.07.16
|
Комментарии
к тексту
программы и
рисунку в
программе:
·
Адаптеры
USB-RS485 имеют
программные
возможности
для установки
большой
скорости, но
аппаратные
возможности
выходных
микросхем
разные.
·
На
осциллограмме
ниже слева , вид блока
сигналов,
передаваемого
в RS485 при
установленной
скорости, 1000000 бит
в секунду.
·
Адаптер на
основе ИМС FT232BM FTDIBUS\COMPORT&VID_0403&PID_6001.
·
Справа
осциллограмма
для той же
скорости, но
адаптер CH340 USB\VID_067B&PID_2303&REV_0300
·
По
осциллограммам видно,
что прием на
скорости
более 1 мбит
возможен, но
не для всех
адаптеров.
Шаг клетки
развертки 4
микросекунды.
Успехов
и здоровья!
21-7-2016 г. Новосибирск
Автор
- Шабронов
Андрей
Анатольевич тс +7-913-905-8839 e_mail
- shabronov@ngs.ru