”В жизни всегда есть место порту”

Тестовая программа для СОМ-порта, ибо "..если б верить бизнес-планам, я б летал  аэропланом"

 

Адрес документа.

http://shabronov_s2.dyn-dns.ru/doc_sh/test_com_mini_v1/test_com_mini_v1.doc    инд: 1-16-3    

Скачать тест.

http://shabronov_s2.dyn-dns.ru/doc_sh/test_com_mini_v1/versuhi/acompkz1.zip     

Скачать «создателя теста».

http://shabronov_s2.dyn-dns.ru/doc_sh/test_com_mini_v1/versuhi/test_monsys_all.zip

От автора:

 

Окна  теста:

 

 

Содержание

·        Тема «…Папа, я хочу пи-пи!…»;

·        Тема «…Спокойно - это ограбление…»;   

·        Тема «…Топ топ. Топает малыш…  »;

·        Основные режимы работы с программой;

·        Описание алгоритма теста;

·        Описание  основных «forth-слов»  программы;

·        Получение текста программы, изменение и формирование исполняемого файла;

·        Выводы;

«…Папа, я хочу пи-пи!…»

Эта фраза знакома многим родителям, и она радует, т.к. родной ребенок уже вырос и все в порядке. А до этого? Приходиться много-много раз подбегать и щупать сухо ли там.

Мой знакомый папа-инженер нашел выход – собрал схему. Рисунок ниже. И рядом другие  варианты данной схемы.

  Радионяня с монитором дыхания Ramili Baby RA300SP

Данные изделия имеет один существенный недостаток. Изделие с ребенком, а папа в соседней комнате. Звук можно и не услышать. Тем более, что закрывается дверь, что бы не беспокоить своим шумом «любимое дитятко».

Т.е. сигнализация должна быть, но МАЛОШУМНОЙ и УДАЛЕННОЙ. И желательно не очень дорогой, как на крайнем справа рисунке.

 

Вариант решения данной задачи через последовательный сом-порт rs-232 – подключить датчик влажности и контролировать по программе.

Намок датчик, компьютер в соседней комнате сообщит:  «запикает», или включит специальную заставку.

На что надо обратить внимание при реализации =мокрой сигнализации=:

·                Техника безопасности, прежде всего!  Исключить возможность попадания посторонних высоких напряжений на провода. Например, сетевого провода на линию связи.

·                Непосредственно на самих вывода сом-порта напряжение  не более 12 вольт, а вот относительно других металлических предметов в комнате  напряжение может быть разным.  И даже опасным!

·                Датчик сигнализации – это пластина из стеклотекстолита с «дорожками», которые подключены к выводам 7 и 8  разъема сом-порта  rs-232. Варианты подключения к сом-порту зависят от настройки программы.

·                Конструкция датчика не критичная. Важно обратить внимание на травмобезопасность, и чтобы не скушал изделие голодный ребенок. Шутка.  Схема подключения и некоторые варианты датчиков представлены ниже:

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

 

«…Спокойно - это ограбление»

Напоминаю ситуацию:  «Стой! Стрелять буду! - Стою! - Стреляю!»  

Важно, не анекдотичность ситуации, а ответные действия.  Ведь, что получается в реальности, кто быстрее  среагировал, тот и победил.

Итак, ограбление - преступление, состоящее в присвоении чужой собственности с применением угроз, насилия;

Нужна тревожная кнопка или другой способ сообщить о беде.

Вариант решения данной задачи через последовательный сом-порт rs-232 – подключить тревожные кнопки и контролировать их по программе.

Преимущества:

·        Готовая удаленная сигнализация, если компьютер включен в «Интернет» или в локальную сеть;

·        Маскировка сигнализации  если, например, кнопку подвести к принтеру, где находиться компьютер. Получиться, как бы кнопка на принтере;

·        Цена вопроса сигнализации значительно снижается;

·        Часто бывает и разная степень тревоги, и значит надо несколько кнопок;

 

  Предусмотрено 5 кнопок тревоги  для  предоставляемой программы.  Схема представлена ниже на рисунке.

 

 

 

«…Топ топ. Топает малыш…  »;

А если он упадет? А если коляску расшатает и перевернется? Требуется знать, есть ли вибрация или нет? 

Предлагается использовать в качестве датчика удара ЗП-1,3,22 – звонковый преобразователь. Ниже их фото.

   

 

Вариант решения данной задачи через последовательный сом-порт rs-232 – подключить датчики удара и контролировать их по программе.

 

Свойство звонковых преобразователей, это наличие обратного эффекта. При  ударе или постукиванию по ним,  на выводах появиться напряжение. Это напряжение, в зависимости от силы удара, может достигать 3..5 вольт и длительностью до 100 миллисекунд.

 Для приема информации по последовательному СОМ-порту rs-232, уровня и длительности напряжения  вполне хватает.

Схема подключения представлена ниже на рисунке.

 

  

  

Основные режимы работы с программой

  

\ файл инициализации режимов работы от кнопок СОМ-порта - test_kz_com_v2c.f

\

\ Вступительная часть:

\

\ - данный файл текстового формата и может редактироваться любым редактором для текстов. Например, БЛОКНОТОМ;

\ - с начала строки, все что после наклонной черты c пробелом - представляет собой комментарий и допускается любой текст;

          \  наклонная черта может начинаться и не с начала строки

\ - имеется вариант комментарии  записывать в круглых скобках. Но обязательно парно ( и ) 

(  это тоже комментарий пояснений по файлу инициализации )

\ - файл инициализации воспринимается программой как текст для выполнения.

\ - используется формат текста кодировка Win страница 1215 - аnsi - кирилица

\ - для редактора БЛОКНОТ подходит шрифт Times New Roman и символы кирилица. Шрифты можно устанавливать любые, по своему вкусу.

\ - длинна строки с текстом и комментарием до 4096 символов или в 16сс = 0x1000

\

\ Назначение файла инициализации

\

\ Файл выполняет настройки Ваших действий при замыкании кнопок, на выводах используемого COM порта.

\ Кнопки обозначены на схеме SK_1 ... SK_5

\ Приведенные примеры настроек выполнены на авторском компьютер и возможно на Вашем компьютере работать не будут.

\ Но это и понятно, т.к. пользователи индивидуально настраивают под себя компьютеры.

\ по пословице...  В чужой компьютер со своими настройками не лезут.

\ Важно, что программа работает с =железом= , это устройство называется последовательный порт.

\ Эта =железка= должны быть доступна программе, и только в этом случае можно получить от =железки= информацию.

\ Но программа работает и без =железки=, и в этом случае не ждите от программы =чуда=.

\ Анекдот по теме: ... товарищ прапорщик, а можно я посмотрю телевизор? - Можно, рядовой Иванов, смотрите, только не включайте!...

\ Программа предназначена для тестирования порта, возможного применения порта, и порт должен быть в работе.

\

\

\ Пояснения по написанию опций настройки

\

\ Возможно, Вы уже что то программировали и имеете навыки. Это хорошо но и плохо. Т.к. Вы будет искать аналогии.

\ Должен предупредить  что тут по англицки - =Tastes differ=  или по русски - =На вкус и цвет товарищей нет=

\ Программа и опции файлов настроек написаны на языке FORTH (Форт) версия spf4 автор Черезов.А. http://www.forth.org.ru/

\ Пользуясь случаем Выражаю ему большую благодарность за столь выдающийся труд.

\ Другие ресурсы по языку FORTH программирования смотрите в интернете.

\ Конкретная, для spf4,  помощь  имеется по адресу http://spf.sourceforge.net/docs/intro.ru.html#forget

\ Предлагается воспользоваться двумя правилами: непонял - записывай.

\ Не можешь записывать, сохраняй  сканы экрана.

\ Следует предупредить, что любой знак или набор символов без комментариев - это =ЧТО-ТО=. И действия могут быть очень разные.

\ Но у Вас есть возможность все восстановить, и опять начать работу.

\ По сути, это небольшие форт-определения. Они компилируются и выполняются.

\ И так приступим  к пояснению опций и их выполнению.

\ 

\ опции, которые задают Выбранный COM- порт

\ Порт с которым Вы работает можно задать по командной строке, а можно и записав  номер порта в переменную и

\ затем выполнить =слово= отвечающее за установку порта

       5 COM_BN !

       IZM_UST_P_DIN2_N_NO_TYPE ( -- установка порта ) 

\  если выполнить  файл инициализации только с этой строчкой - то  порт проинициализируется на 5-ый  а если 50 то соответственно на 50-ый.

\ Пример работы - удалите все что дальше после этой строки. И выполните инициализацию. Установится порт 5 и будет сообщение ок или error

\

\ Настройка действий по нажатию кнопок SK1...SK5

\ Предлагается несколько вариантов.

\ Вариант 1 - Нажал кнопку  и пока она нажата идет звуковой пик и на экране выдается сообщение нажатии соответстующей кнопки.

\ Требуется записать значение 1 в  соответствующие переменные кнопок.

 1 SK_1 !     1 SK_2 !     1 SK_3 !     1 SK_4 !    1 SK_5 !      

 

\ Вариант 2 -  нажал кнопку и при разовом нажатии  проигрывается мелодия формата kar или mid.  

\ Новое нажатие функционирует только после 8 секунд, значение  которого записано в переменную  SK_TIME_MID 

\ дополнительно выдается номер кнопки с пометкой mid.

\ Мелодия или звучит до своего окончания или если нажать после 8 секунд останавливается.

\ Повторно, кнопка принимает сигнал через 8 секунд 

\ Можно поменять время, записав в данную переменную свое значение, как показано ниже.

 8 SK_TIME_MID !   (  записано число 8 - но Вы то понимаете, что это связано с комментарием и запишете свое значение )

\ значния допустимы минимально от 1 секунды. Верхнее значение не ограничено. 

\ Данная опция работает  по принципу ИЛИ для кнопок SK1..SK_5.   Выбираете кнопку и записываете туда значение 2 

\ Использоваться может только одна кнопка остальные будут в =игноре=

 2 SK_4 !  (  работает только кнопка SK_4 выводы сом-порта 7 и 8 )  

 

 

\ Вариант 3 - нажал кнопку и открывается требуемый сайт или требуемая программа, если она у Вас установлена.

\ Повторное открытие выполняется через время заданное в опции в секундах.

3 SK_1 !     S" mspaint.exe"                                                      5  SK_1_VAR3   (  открытие файла pait - графический редактор  повторное открытие через 5 секунд )

3 SK_2 !     S" msinfo32.exe"                                                    3  SK_2_VAR3   (  открытие сведений о системе   повторное открытие через 3 секунд )

3 SK_3 !     S" https://mail.ngs.ru/"                                            8  SK_3_VAR3   (  открыть сайт почты автора )

3 SK_4 !     S" http://90.189.213.191:4422/poteha/muz_valsok_v1/"            2  SK_4_VAR3   ( открыть сайт автора с музыкальной темой )

3 SK_5 !     S" C:\Program Files (x86)\Total Commander\Plugins\exe\AkelPad.exe"  8  SK_5_VAR3

 ( открыть текстовый редактор, альтернатива БЛОКНОТУ расположен в указаном месте на авторском компьютере )

 

\ а дальше, Вы можете сами вписать любую программу, которую желаете вызвать при нажатии 

\ Внимание!

\ Приведенные варианты записаны без ремарок, но это означает что в работе будет использоваться ПОСЛЕДНИЙ т.е. вариант 3

\ Поставьте косую черту, т.е. =заремьте=  варианты 2 и 3 и будет работать 1й вариант

\ а так же можно  повторно указать вариант работы, как сделано ниже для кнопки SK_5, что бы не вызывать редактор текста.

 1 SK_5 ! 

 

\ опция бонус  или  лозунг  =А МОЯ  МОРКОВКА СЛАЩЕ !!!= 

\

\ Автор в разделе помощи ввел случайный вызов своих авторских тем с музыкальным содержанием.

\ Предусмотрено,  заменить эти темы на другие, записью в ини файле.

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

\ Всего можно ввести до  255 сайтов.

\ Автор предупреждает, что авторский сайт не имеет категории =высшей защиты= по питанию и резервирования каналов интернета,

\ и поэтому, иногда доступ к музыкальным темам может отсутствовать.

\ Сайт работает на домашнем компьютере, а иногда случаются в нашей деревне обрывы электропитания и «кабелюк».

\ Альтернативой предлагается послушать музыку формата mid и kar. Это синтезатор электронной музыки.

\ Предлагаемые далее  сайты =заремлены=,  но ничто не мешает Вам заменить их на свои

\ и =разремлить= т.е. убрать косую черту  и проверить работу.

\  S" http://meandr.org/"   NEW_ADR_WWW

\  S" http://www.decoder.ru/list/all_1/tag_112_1/topic_40/"   NEW_ADR_WWW

\  S" http://www.interntv.ru/index.php?name=View&idtv=3069&Fcountry=Russian%20federation&Fcategory=&Sort=id_tv&chname=&findch=0&page=&page=1"   NEW_ADR_WWW

\  S" https://www.yandex.ru/"   NEW_ADR_WWW

\  S" http://www.hub.ru/library"   NEW_ADR_WWW

\  S" http://news.cqham.ru/articles/detail.phtml?id=361"   NEW_ADR_WWW

\  S" http://www.iga1.ru/"   NEW_ADR_WWW 

\ == и так далее  до 255 строк

 

\EOF ( это тоже команда, которая означает, что дальше компиляция и выполнение прекращается )

 

Далее, можно писать комментарии и тексты без наклонной черты

Более наглядную документацию читайте на сайте описания данной программы

http://90.189.213.191:4422/doc_sh/test_com_mini_v1/

 

редакция ини файла 21:35 15.01.17

 

Пример файла инициализации для работы по теме 1, датчик влажности на выводах 7 и 8 подключен сом-порт 17. При замыкании датчика начинает играть музыка варианта mid, и программа после старта «прячется» в трей. Файл инициализации ниже в таблице и оставлены только опции команд.

 

17  COM_BN !          IZM_UST_P_DIN2_N_NO_TYPE ( -- установка порта  17 ) 

1 SK_1 !     1 SK_2 !     1 SK_3 !     2 SK_4 !    1 SK_5 !         (  работает  кнопка SK_4 выводы сом-порта 7 и 8   для режима играть музыку формата mid  остальные в режиме 1)

Включение программы осуществляется по кнопкам  1 7 e  или по командной строке, где указать те же кнопки:     \\acompkz1.exe 1 7 e <enter> или сформировать файл ярлыка и в опциях указать  кнопки, показано ниже на рисунке.

 

 

- n 121 – установка при старте  порта с номером 121

- 1 – перейти в раздел помощи;

- 7 – перейти в раздел управления;

- 3 – принять данные из файла настроек и перейти к управлению;

 

- средняя кнопка – эквивалент клавиши ESC – вернуться на предыдущий экран;

- правая кнопка  - эквивалент клавиши ПРОБЕЛ, - обновить экран;

- левая кнопка – выбор пункта меню и переход на него;

 

 

Описание алгоритма теста.

1.      Инициализируем порт, если ок – то к п.2 если нет сообщение о ошибке инициализации и выход.

2.      Даем сигнал логического =0= на вывод O. Запоминаем сигнал на выводе I. Он рядом и доступен для короткого замыкания. Например, выводы  7 и 6.

3.      Даем сигнал  логической =1= на вывод O. Запоминаем сигнал на выводе I. Это вывод из п2.   

4.      Проверяем, если был в начале 0, затем 1 , принимаем решение, что  вывод O замкнут с выводом I и отображаем  это на экране.

5.      Переходим к следующему выводу доступных комбинаций и возвращаемся к пункту 2.

6.      Если все выводы проверены,  проверяем нет ли прерывания от клавиатуры или мышки о окончании работы и если нет возвращаемся к п.2 иначе останов теста;

 

 

Описание  основных «forth-слов»  программы

 

 

: TEST_KZ_COM_START (  стартовое слово 1й экран )

        ||    APZctrl  PZ1 ||   (  локальные переменные )

         S" 1234" DROP -> APZctrl   APZctrl 0!      

         STARTLOG ( ВКЛЮЧИТЬ ФАЙЛ ОТЧЕТА SPF.LOG )

      \  ENDLOG (  выключить файл отчета )

        0x500  PZK DUP DUP 4+ 4 CMOVE !   (  первоначальная установка курсора   )  

       OPTIONS2 ( -> )  ( интерпретировать командную строку )

       TIB-K   ( K --> код   знака  в командной строке  )  

       DUP [CHAR] N = OVER  [CHAR] n = OR

                IF ( K -- первый код N т.е. дальше номер порта для проверки )

                      DROP ( - убрали и читаем цифру следующего кода )

                      TIB-N ( ПРЕОБРАЗОВАНИЕ ИЗ ТИБА В НОМЕР - xx - ВВЕДЕНЫЙ ПОРТ  )

                      DUP 0> OVER 0x100 < AND IF  COM_BN ! THEN

                      IZM_UST_P_DIN2_N_NO_TYPE ( установка порта )

                      TIB-K   ( K --> код   знака в ком строке т/е после N xx  )  

               ELSE ( ставим по умолчанию порт 2 для первого входа )

                     2 COM_BN !

                     IZM_UST_P_DIN2_N_NO_TYPE ( установка порта )

              THEN                                     

  \ --------------------------------------------------------                 

        RANDOMIZE ( генерация случайности по случайному запуску компьютерной программы )

        MEM_WWW_RND ( - подготовка памяти и данных для  www_rnd )

        MENU_KZ_COM_V1  ( МЕНЮ ПРОГРАММЫ ПЕРВОЕ )

        MENU_P1_NCOM ( -- ВЫДАЧА НОМЕРА СОМ ПОРТА УСТАНОВЛЕННОГО )

   BEGIN

  \ ------------------------------------------------------------------------------     

           0x001  OUT_TIME_DIN2_N1  ( M --  время на экран выдаем в место М=0 строка 1-й знак )

          WORKS_PZK_V1 ( K -- K' по данным PZK работа сдвиг в право и вниз по колесику, левая кнопка мышки меняем вертикаль-горизонталь  ) 

          [']  MENU_KZ_COM_V1  ( Aex -- )   exSTRELKI_MENU_DIN2 @ EXECUTE ( К  Aex -- K' тут отображение   стрелок и если они есть то код меняется работа с планшетником )            

 \  --------------------------------------

 

           0x049  OUT_CURSOR_DIN2_P1 ( M --> место показания курсора DIN2 )

           0x249  WORKS_CWET_FNZN_DIN2 ( M --  установки  и измения по цвету   сразу графику выдаем  )           

           0x449  FIX_DIN2  S" Mесто = " TYPE_DIN2  ModuleName  TYPE_DIN2 

           0x549  FIX_DIN2  S" Размер файла=" TYPE_DIN2 DECIMAL SZ @  V2_RDIN2 ( N ---   РИСУЕМ КОЛ-ВО БАЙТ  разбивку делаем )  S" байт."  TYPE_DIN2

           0x649  FIX_DIN2  S" Дата версии:"  MR_DATA2     S++ TYPE_DIN2 

           0x749  OUT_CURSOR2_DIN2 (  M --- на входе место  показали размер и место x0 y0 окна DIN2  в строку )

          

\ ---- ИМЯ КОМЕЬЮТЕРА и пользователя

   0x849 FIX_DIN2  =2( Связное имя: "  GETCOMPUTERNAME_V1 ( -- adr n ) TYPE_DIN2  ( ПО ЭТОМУ ИМЕНИ ОБРАЩАТЬСЯ ЧЕРЕЗ РАДМИН Т.Е. ЭТО ИМЯ ДОСТУПА И ПК В СЕТИ И РАВНО ИМЕНИ IP-TCP )

   0x949 FIX_DIN2  =2( Работает: "     GETUSERNAME ( -- adr n )  TYPE_DIN2 ( имя пользователя выдаем )

   0xA49 FIX_DIN2  GETProcessorType TYPE_DIN2  ( пишем тип процессора )

 \ -----------------------------------------------------------------------------   

      ( K -->  на стеке код нажатия клавиши )

      APZctrl   0xE00 KOD_START_F2_5_DIN2  (  K APZctrl M1 -- k'    проверка и выполнение   по f1-Экран а f2..5 те. нажать ctrl и потом f2..5 для выполнения M1 - место индинкации для отображения )                        

      DUP 0x20 =  ?KEY1_DIN2 8+ @  2 = OR  IF    ?KEY1_DIN2_0!     MENU_KZ_COM_V1 ( обновить экран =2 правая кнопка мыши )  MENU_P1_NCOM ( -- ВЫДАЧА НОМЕРА СОМ ПОРТА УСТАНОВЛЕННОГО )  THEN 

   \ ---------------------------------------------------------------------------------------------------  

      DUP [CHAR] 1 0x501    KOD_KM_DIN2  IF  ?KEY1_DIN2_0!  TEST_KZ_COM_V2 ( помощь Тест 2  )  MENU_SBROS_V1 (  пересброс  экрана что бы убрать заставки )     THEN

   \ ------------------------------------------------------------------------------------------  

      DUP [CHAR] 2 0x601    KOD_KM_DIN2  IF  ?KEY1_DIN2_0!                                            COM_BN DUP 1+!  DUP @ 0xFF > IF 0xFF SWAP ! ELSE DROP THEN  MENU_P1_NCOM -1 -> PZ1    THEN     

      DUP [CHAR] w 0x603    KOD_KM_DIN2  OVER [CHAR] W = OR IF  ?KEY1_DIN2_0! -1 COM_BN +!  COM_BN @  1 < IF BEEP2 1  COM_BN ! THEN  MENU_P1_NCOM -1 -> PZ1   THEN     

      DUP [CHAR] s 0x605    KOD_KM_DIN2  OVER [CHAR] S = OR IF  ?KEY1_DIN2_0! 0xA       COM_BN  +!  COM_BN DUP @ 0xFF > IF 0xFF SWAP ! ELSE DROP THEN  MENU_P1_NCOM -1 -> PZ1     THEN     

      DUP [CHAR] x 0x607    KOD_KM_DIN2  OVER [CHAR] X = OR IF  ?KEY1_DIN2_0! 0xA NEGATE COM_BN +!  COM_BN @  1 < IF BEEP2 1  COM_BN ! THEN  MENU_P1_NCOM -1 -> PZ1     THEN     

      PZ1 IF 0 -> PZ1  IZM_UST_P_DIN2_N_NO_TYPE   MENU_P1_NCOM   THEN

       

   \   делаем тест  

     DUP [CHAR] 3 0x701    KOD_KM_DIN2  IF  ?KEY1_DIN2_0!      KNT_COM_DIN2 (  ОТДЕЛЬНАЯ ПРОВЕРКА СОМ ПОРТА ) MENU_SBROS_V1 (  пересброс  экрана что бы убрать заставки )    THEN

     DUP [CHAR] e 0x703    KOD_KM_DIN2  OVER [CHAR] e = OR IF  ?KEY1_DIN2_0! DISPETCHER_PK ( - вызвать диспетчера устройств компьютера ) BEEP_M1  THEN    

     DUP [CHAR] 4 0x801    KOD_KM_DIN2  IF  ?KEY1_DIN2_0!  ( ВСЕ ПОРТЫ )  0x1100   KNT_IZM_UST_P3 ( M1 -->  место выдача быстрая наличия сом-портв )     THEN     

   \ вариант проверки портов на 1ом окне по ответу порта

    TMP1  @ IF (  порт в наличии запускаем тест ) KNT_COM_DIN2_V1 (  на DIN2 ПРОВЕРКА СОМ ПОРТА ТОЛЬКО ОТОБРАЖЕНИЕ КЗ ВЫВОДОВ И ЗВУК )             THEN

     0x91A  test_kz_com_v2_db9_v1.bmp    S" 12341234"    WORKS_EXE_BMP_DIN2_V1 (  M1 AIN Ap n- --- подгрузка и отображение фото сом-порта    )           

  \ ---------------------------------------------------------------------------------------------------      

  \ опрос клавиатуры и мышки.  Повтор в начало цикла  или выход  =======================================

         DROP      ?KEY1_DIN2 @ ( K --> ) DUP   0x1B =  ?KEY1_DIN2 8+ @  3 = OR (  ecs то выходим или средняя кнопка мыши  )

        UNTIL DROP ?KEY1_DIN2_0!

      PZK DUP 4+ SWAP 4 CMOVE  ( сохранение курсора по старому значению )

;

 

 

: TEST_KZ_COM_START (  стартовое слово 1й экран )

  ---------------

BEGIN

\--------------

 ( ТУТ СЛОВА ПРОВЕРЯЮЩИЕ ДЕЙСТВИЯ ПОЛЬЗОВАТЕЛЯ  НА ПЕРВОМ ЭКРАНЕ )

(  ЧТО НАЖМЕТ ТУДА И ПЕРЕХОДИМ )

( НАЖМЕТ КЛАВИШУ 3 –ПЕРЕЙДЕМ НА СЛОВО KNT_COM_DIN2 )

( НАЖМЕТ КЛАВИШУ 1 – ПЕРЕЙДЕТ НА СЛОВО TEST_KZ_COM_V2 )

\ ------------

UNTIL

;

 

: TEST_KZ_COM_V2 (   помощь по программе )

       ||    APZctrl  ||   (  локальные переменные для служебной клавиш  ) 

        S" 1234" DROP -> APZctrl   APZctrl 0!      

        0x400  PZK DUP DUP 4+ 4 CMOVE !   ( выход  состояния курсора сохранили и новое дали )  

        TIB-K   ( K --> код   слова в ком строке т.е. второй знак   )

        MENU_TEST_KZ_COM_V2  ( меню экрана помощи )

   BEGIN

  \ ----------------------------------------------------------------------------------------------

           0x45E   test_kz_com_v2_sha_zast1.bmp S" 12341234"    WORKS_EXE_BMP_DIN2_V1 ( заставка ШАА )     

           0x001  OUT_TIME_DIN2_N1  ( M – время на экран выдается  )

           WORKS_PZK_V1 ( K -- K' по данным PZK работа сдвиг в право   для планшета и если крутить колесико то вниз  ) 

           [']  MENU_TEST_KZ_COM_V2   ( Aex -- )   exSTRELKI_MENU_DIN2 @ EXECUTE ( К  Aex -- K' тут отображение   стрелок и если они есть то код меняется работа с планшетником )            

           0x051  OUT_CURSOR_DIN2_P1 ( M --> место показания курсора DIN2 )

           0x25C  WORKS_CWET_FNZN_DIN2 ( M --  установки  и измения по цвету   )           

           

     \ ----------------------------------------------------------------------------------------                

      ( K --> на стеке код нажатия клавиши )

         APZctrl   0xC00 KOD_START_F2_5_DIN2  (  K APZctrl M1 -- k'    проверка и выполнение   по f1-Экран а f2..5 те. нажать ctrl и потом f2..5 для выполнения M1 - место индикации для отображения )                        

      ( K --> на стеке код нажатия клавиши )     

      DUP 0x20 =    ?KEY1_DIN2 8+ @  2 = OR ( прав клавиша )  IF    ?KEY1_DIN2_0!          MENU_TEST_KZ_COM_V2  ( обновить экран ) THEN       

      DUP [CHAR] 1 0x401    KOD_KM_DIN2  IF  ?KEY1_DIN2_0!  FORMIR_CMD_FILE_TEST_KZ_COM ( формируем файл смд для быстрого запуска до  пунктов ) THEN

      DUP [CHAR] 2 0x501    KOD_KM_DIN2  IF  ?KEY1_DIN2_0!  YURNAL_SOBYTIY_V1 ( -  открыть консоль управление компьютером )   THEN     

      DUP [CHAR] 3 0x601    KOD_KM_DIN2  IF  ?KEY1_DIN2_0!  w_TEST_KZ_COM   START_link_clik ( An n – открыть сайт с описанием )  BEEP_M1   THEN     

      DUP [CHAR] 4 0x701    KOD_KM_DIN2  IF  ?KEY1_DIN2_0!  SMENA_CMD_TEST_KZ_COM   (  СМЕНА РЕЖИМА С СМД ИЛИ БЕЗ   )     THEN                 

      DUP [CHAR] 5 0x801    KOD_KM_DIN2  IF  ?KEY1_DIN2_0!  START_WWW_RND ( -- запуск страниц музыкальных тем в случайном порядке )      THEN           

 \ управление мид файлами    

      DUP [CHAR] 6 0x901    KOD_KM_DIN2  IF  ?KEY1_DIN2_0! DATE_Nimuz  4+ 0!  0xA11   BEEP3_MIDI_DIN2  ( M1 -- в окне DIN2 формируется и выполняется музыкальная пазуа MIDI )     THEN

      DUP [CHAR] y 0x903    KOD_KM_DIN2 OVER [CHAR] Y = OR IF  ?KEY1_DIN2_0!  1  DATE_Nimuz  4+ ! ( ставим признак )  0xA11 BEEP3_MIDI_DIN2 (  M1 -- в окне DIN2 формируется и выполняется музыкальная пазуа MIDI +1 от предыдущей )  THEN           

      DUP [CHAR] h 0x905    KOD_KM_DIN2 OVER [CHAR] H = OR IF  ?KEY1_DIN2_0!  2  DATE_Nimuz  4+ ! ( ставим признак )  0xA11 BEEP3_MIDI_DIN2 (  M1 -- в окне DIN2 формируется и выполняется музыкальная пазуа MIDI -1 от предыдущей )    THEN                 

      DUP [CHAR] n 0x907    KOD_KM_DIN2 OVER [CHAR] N = OR IF  ?KEY1_DIN2_0!

                                                                                                          BEEP3_MIDI_POST_PZ1 DUP @ 0= IF DATE_Nimuz  4+ 0! 0xA11  BEEP3_MIDI_DIN2  -1  ELSE 0 THEN SWAP !

                                                                                                          MENU_TEST_P4 ( меню постоянная музыка  или нет )

                                                                                                          THEN

      \  A11 – место  строки с номером файла мид  и его названием  при проигрывании

     

      DUP [CHAR] 7 0xB01    KOD_KM_DIN2  IF  ?KEY1_DIN2_0!  UPRAVLENIE_OT_COM_PORTA ( -- раздел управления от замыкания выводов на сом-порту )  

                                                                                                        MENU_TEST_KZ_COM_V2

                                                                                                        0x45E  test_kz_com_v2_sha_zast1.bmp S" 12341234"    WORKS_EXE_BMP_DIN2_V1 ( заставка ШАА )     

                                                                     THEN           

        BEEP3_MIDI_POST ( - работа по проигрыванию музыки постоянно  если была нажата клавиша n  )

    \ =======================================

         DROP      ?KEY1_DIN2 @ ( K --> ) DUP   0x1B =   ?KEY1_DIN2 8+ @  3 = OR  ( ecs или средняя клавиша )         

         UNTIL DROP ?KEY1_DIN2_0!

         PZK DUP 4+ SWAP 4 CMOVE  ( выход в главный экран по старому значению оставленного курсора )

 ;

 

1.      Автор ввел  большое количество комментариев по каждому forth-слову. Но вероятно, эти комментарии для многих программистов «темный лес».

2.      Базовые слова приведены  в описании языка. Вот некоторые из них:  DUP 0!  OR  DROP  =  [CHAR]   S” любой текст

3.      Другие  forth-слова определены ранее, и их необходимо найти. А программа при выполнении находит их сама и выполняет.

4.      Текст программы можно перевести в код и заранее и во время работы программы.

5.      Исполняется код. Поэтому если в ини файле указать «кракозябру»  программа «вылетит»

 

·        Более подробно о написании программ на языке forth смотрите в интернете.  Язык имеет много преимуществ, но и имеет недостатки. 

·         Одно из самых главных недостатков – понятия языка сложны для усвоения программистами, уже имеющие  опыт написания программ. Им преимущества не видны.

·        Приведем пример. Использование библиотек DLL. Вот кто из программистов задумывался о том, что DLL библиотеки могут быть не совместимы с новыми версиями операционной среды? Вспомните, сколько программ перестало работать, когда появилась вместо Windows XP Windows_7 ? Есть вариант – обратиться к разработчику, что бы дал новую DLL, а второй вариант?  Писать программу только с такой DLL,  которую в принципе нельзя менять.  Вот в данном случае это ядро kernel32.dll  Есть и третий вариант, написать самому DLL для новой операционной системы. Вот какой вариант Вы предпочтете?

 

Получение текста программы, изменение и формирование исполняемого файла.

 

Выводы

 Данная тестовая  программа предназначена для    мониторинга   параметров сом-порта rs-232 и имеет дополнительный функционал - возможность программировать звуки и  действия на компьютере  при  замыкании выводов порта.

 Особенности программы:

·        Имеет упрощенный «оконный» интерфейс.

·        Программа не устанавливается, не прописывается в системные библиотеки,

·        Программа содержит в своем «теле»  файл  настроек  для возможной модификации программного отклика и звуков.

·        Программа работает под операционными системами WINDOWS 95/98/NT/2000/XP/Vista/Win7/8/10 и использует только функции api- ядра системы – файл kernel32.dll

·        Программа написана на языке Форт версия  spf4.exe – автор  А. Черезов  http://www.forth.org.ru

·        Программа доступна для использования, изучения и модификации всем желающим и их родственникам.

·        За модифицированный  тест отвечает сам модификатор. Автор может, при наличии времени, только кратко провести консультацию по используемым им forth-словам.

·        Автор оставляет за собой право на модификацию и улучшение теста, т.к. периодически тестирует последовательные СОМ-порты rs-232 и получает замечания и информацию от реальных пользователей.

·        В связи возможными нарушениями работы сервера автора, нет резервной линии и нет гарантированного питания в нашей деревне, имеется резервное хранилище тестов по адресу: https://cloud.mail.ru/public/28U5/vBGK7mK19

 

---------------------------------------------------------------------------------------------------------------------------------

Автор - Шабронов Андрей Анатольевич

Тс.  +7 913-905-8839     e_mail -  shabronov@ngs.ru  

ред. 17-1-2017  .

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