|
Помогите разобратся с RS-232, проверка портов и т.п. |
|
|
|
Nov 14 2008, 20:35
|

Группа: Новичок
Сообщений: 14
Регистрация: 13-10-08
Пользователь №: 40 923

|
Прошу помощи разобратся. Тут привожу функцию RS232(x) со скана книжки! а значит и ошибок много, написанная на Турбо Паскале для Windows. RS232(0) возвращает количество установленных COM-портов, RS232(1)-базовый адрес COM1, RS232(2) - базовый адрес COM2 и т.п. Код (*-библиотека ресурсов №A6 (определение базовых адресов COM-портов).-*) (Universal auto detection of COM base address) Function RS232(x:integer).integer; export; (* $0000:$0400 содержит базовый адрес порта COM1, $0000:$0402 содержит базовый адрес порта COM2, $0000:$0404 содержит базовый адрес порта COM3, $0000:$0406 содержит базовый адрес порта COM4, $0000:$0406 содержит количество COM портов в двоичном формате.* ) var Number_of_COM, COM1, COM2, COM3, COM4:integer; begin numer_of_COM:=mem($40:$11); (*Считывает количество COM- портов*) numer_of_COM:=(numer_of_COM and (8+4+2)) shr 1; COM1:=0; COM2:=0; COM3:=0; COM4:=0; COM1:=memw($40:$00); (*Процедура чтения из памяти*) COM2:=memw($40:$02); COM3:=memw($40:$04); COM4:=memw($40:$06); Case x of 0: RS232:= numer_of_COM; 1: RS232:= COM1; 2: RS232:= COM2; 3: RS232:= COM3; 4: RS232:= COM4; end; end; Хочу этот код использовать в Делфи в проекте "управление двигателем" чтоб сначала проверить количество COMпортов на компе и их базовые адреса. Потом задам вопросы по инициализации COM порта. Вопросы: 1. как переделать синтаксис чтобы этот код их Турбо паскаля заработал в Делфи 2. то что (*текст*) - коментарии? я прав? 3. обьясните мне этот участок кода: Код numer_of_COM:=mem($40:$11); (*Считывает количество COM- портов*) numer_of_COM:=(numer_of_COM and (8+4+2)) shr 1; COM1:=0; COM2:=0; COM3:=0; COM4:=0; COM1:=memw($40:$00); (*Процедура чтения из памяти*) COM2:=memw($40:$02); COM3:=memw($40:$04); COM4:=memw($40:$06); а именно: 3.1 что мы присваиваем переменной numer_of_COM в первой строчке? (имею в виду функцию mem($40:$11)) 3.2 что мы добиваемся второй строчкой? а именно: numer_of_COM and (8+4+2)) shr 1 почему не: numer_of_COM and 14) shr 1 3.3 COM1:=memw($40:$00); - функция memw($40:$00) из чего читает и что она делает а теперь догадки : есть прелположение что функции memw и mem читают из ОЗУ . в инете встречал формулировку: "Mem - это массив памяти. Т.е. с помощью указания номера элемента вы получаете доступ к определенной ячейке. существует 3 вида массива Mem: * сам Mem - каждый компонент такого массива типа byte. * MemW - каждый компонент типа word. * MemL - каждый компонент типа longint." Надеюсь на вашу помощь . хотябы часть обьясните.
|
|
|
|
|
 |
Ответов
(15 - 29)
|
Nov 16 2008, 17:41
|

Группа: Новичок
Сообщений: 14
Регистрация: 13-10-08
Пользователь №: 40 923

|
Цитата Читайте классику: Serial Communications in Win32 (частично на русском: Последовательная связь в Windows NT). я конечно не сильно крут в программировании но ... синтаксис сльно напоминает Си. Пока что пытаюсь разобратся, спасибо за ссылки... ------------------------------- итак начнем... для того чтобы работать с Ком портом надо его "включить" грубо говоря и выставить настройки. а т.к. передача информации через порт работает как передача файлов (я прав?) мы джолжны включить этот процесс... есть код файловой функции WinAPI: Код HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile ); чтобы работать с COM портом №1 нам надо переделать код вот так: Код HANDLE CreateFile( LPCTSTR COM1, DWORD GENERIC_READ|GENERIC_WRITE, DWORD 0, LPSECURITY_ATTRIBUTES NULL, DWORD OPEN_EXESTING, DWORD FILE_FLAG_OVERLAPPED, HANDLE NULL ); но как я понимаю это все под делфи не катит? для делфи надо использовать: Код hPort := CreateFile(‘COM1’, GENERIC_READ or GENERIC_WRITE, 0, nil,OPEN_EXISTING,FILE_FLAG_OVERLAPPED, 0);
if hPort = INVALID_HANDLE_VALUE then raise Exception.Create('Error opening port'); а это закрывает порт? а как это будет на Делфи? Код BOOL CloseHandle( HANDLE hObject ) З.Ы. кстати... чтоб разобратся во всем я начал вот тут тему писать... http://nstalker.forum24.ru/?1-3-0-00000001-000-0-0
Сообщение отредактировал Капитан Хард - Nov 16 2008, 18:34
|
|
|
|
|
Nov 17 2008, 08:36
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(zltigo @ Nov 15 2008, 10:15)  Из NT консольного приложения доступ к стандартным COM портам и области BIOS виртуальной машины есть, Истины ради - прямого доступа все равно нет, VDM это все виртуализует и сводит к вызовам Win32 API (причем на пользовательском уровне, без обращений в ядро) Цитата но это не отменяет дебильность задания. С этим согласен на все 100%
|
|
|
|
|
Nov 17 2008, 09:08
|
Частый гость
 
Группа: Новичок
Сообщений: 85
Регистрация: 2-10-08
Пользователь №: 40 646

|
Цитата(Капитан Хард @ Nov 15 2008, 15:56)  в английском не рублю спасибо - попробую поставить но чувствую разобратся будет проблемма - нет ли каких нибудь книг на русском по этому компоненту? пользуюсь XP и NT меня не волнует ... как и другие операционки. картинок там кроме кода нет. Уточнить задание не могу - препод мифическая личность, появляется раз в 2 недели и если я ему ничего не принесу будет полный армагеддец что за API системы ? это связано с программированием в Delphi или Паскале? (Первое приоритетней т.к. можно сделать прогу с кравивым и понятным интерфейсом). если это не зарагивает программирование даже и рассматривать не стоит. Короче люди. подскажите как с помощью Delphi (ну или на крайний Pascal) запрограммировать программу для : 1. проверки адресов порта 2. инициальзации порта (установки скоростей , выводов и т.п.) 3. передачи данных (вбил в ячейку - нажал на кнопку - байт полетел) как я понимаю для этого нужно скачать компонент для работы с COM-портом... но вот разобратся в его командах и синтаксисе без знания английского для меня проблемма Ну, а ты что хотел, что бы тут за тебя программу написали, разбирайся, тем для изучения тебе много подкинули, прогугли по этой теме (по тем же самым win api), навярняка есть куча полезных статей в нете и на русском языке, приложи сам чуток усилий  Вот примеры с одной книги по AVR, там из проги на Дельфи команды МК посылаются, может поможет чем : http://www.sendspace.com/file/l9xa12[quote name='Капитан Хард' date='Nov 15 2008, 15:56' post='501275'] в английском не рублю спасибо - попробую поставить но чувствую разобратся будет проблемма - нет ли каких нибудь книг на русском по этому компоненту? пользуюсь XP и NT меня не волнует ... как и другие операционки. картинок там кроме кода нет. Уточнить задание не могу - препод мифическая личность, появляется раз в 2 недели и если я ему ничего не принесу будет полный армагеддец что за API системы ? это связано с программированием в Delphi или Паскале? (Первое приоритетней т.к. можно сделать прогу с кравивым и понятным интерфейсом). если это не зарагивает программирование даже и рассматривать не стоит. [b]Короче люди. подскажите как с помощью Delphi (ну или на крайний Pascal) запрограммировать программу для : 1. проверки адресов порта 2. инициальзации порта (установки скоростей , выводов и т.п.) 3. передачи данных (вбил в ячейк
|
|
|
|
|
Nov 17 2008, 10:47
|

Группа: Новичок
Сообщений: 14
Регистрация: 13-10-08
Пользователь №: 40 923

|
Цитата Ну, а ты что хотел, что бы тут за тебя программу написали, разбирайся, тем для изучения тебе много подкинули, прогугли по этой теме (по тем же самым win api), навярняка есть куча полезных статей в нете и на русском языке, приложи сам чуток усилий Я уже далеко не чуток усилий приложил... и гуглил ... и в магазины за книжками бегал... по данной теме пусто! . Ну или я такой тупой. А то что за меня программу писали... не... это не пойдет... я сам хоть тыщу прог напишу (тем более этого требуют). Просто я обычно читаю книги а там все по полкам разложено... если что непонятно в даташит лезу... а тут  ну просто темень какаято... вы же профи!!!... вам ничего не стоит написать пару правильных строчек для примера. А потом я уже по командам буду разбиратся если что непонятно... а то в одном одно написано ... в другом другое... иногда понятно как это все работает но непонятно как это реализуется на практике . а потом перекинте всю инфу в отдельный FAQ и будет всем начинающим прогерам счастье!!! Xenom0rph за програмки Респект и уважуха!!! Огромнейшее спасибо!!! через пару часиков сяду разбиратся.
Сообщение отредактировал Капитан Хард - Nov 17 2008, 10:50
|
|
|
|
|
Nov 17 2008, 11:31
|

Группа: Новичок
Сообщений: 14
Регистрация: 13-10-08
Пользователь №: 40 923

|
Цитата(Xenom0rph @ Nov 17 2008, 14:13)  в этой ветке проскачила тема про COM порты, и там один человек выложил примеры, по ним разобрался за пару часов и почему я этого не смог найти  ... как всегда "в танке"
Сообщение отредактировал Капитан Хард - Nov 17 2008, 11:32
|
|
|
|
|
Nov 17 2008, 11:57
|

Группа: Новичок
Сообщений: 14
Регистрация: 13-10-08
Пользователь №: 40 923

|
Цитата(MrYuran @ Nov 17 2008, 14:46)  Вот , приличная статейка, сам по ней начинал. негрузит
|
|
|
|
|
Nov 17 2008, 11:59
|
Частый гость
 
Группа: Новичок
Сообщений: 85
Регистрация: 2-10-08
Пользователь №: 40 646

|
Цитата(Капитан Хард @ Nov 17 2008, 14:31)  и почему я этого не смог найти  ... как всегда "в танке" да сейчас и я уже не смог найти, но вот, что мне помогло: http://www.sendspace.com/file/bcvili
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|