Батарейка 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 

  • USB\VID_067B&PID_2303&REV_0300
  • USB\VID_1A86&PID_7523&REV_0254
  • FTDIBUS\COMPORT&VID_0403&PID_6001

Приведена схема простого  пробника. Приведена методика проверки с  батарейкой, светодиодом.  Текст, приведенной программы, содержит комментарии и предназначен для понимания методики проверки.

 

 

Содержание

Причины  создания метода проверки

Кратко о интерфейсе

·        Интерфейс 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 микросекунды.

 

 

 Мультиметр ELECTRALINE 59003 Ц4317М Прибор электроизмерительный многофункциональный

 

Выводы

 

 

Успехов и здоровья!

21-7-2016 г. Новосибирск  

Автор - Шабронов Андрей Анатольевич   тс   +7-913-905-8839   e_mail -  shabronov@ngs.ru