Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> СОМ порт, происходит ли запись в порт 
V
    Опции темы
morpheyushka
Дата 9.12.2008, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


Профиль
Группа: Участник
Сообщений: 563
Регистрация: 26.2.2008
Где: Киев

Репутация: 2
Всего: 8



Не могу понять - пишет ли моя программа в СОМ порт. Подключение проходит отлично - порт в итоге становится занятым моим приложением.

Пытаюсь записать в него:

Код

var
  Ovr: TOverlapped;
  S, Comand: String;
  WriteByte: DWORD;
  B: array [0..127] of Char;
  i: DWORD;
begin
  FillChar(B, 128, #0);
  FillChar(Ovr, SizeOf(TOverLapped), 0);
  Ovr.hEvent := CreateEvent(nil, true, false, nil);
  Comand := 'UPAS11111111111111111111';
  S := Char(253) + Comand + IntToStr(Length(Comand) + 1) + Char(254); // это по протоколу кассового аппарата, хотя не уверен что правильно записываю команды
  StrPCopy(B, S);
///////////////////////////////////////////////////////////////////////

  if not WriteFile(IdCom, B, Length(B), WriteByte, @Ovr) then
    begin //           <<-----------------------------         сюда заходит постоянно
      if (GetLastError() = ERROR_IO_PENDING) and
         (WaitForSingleObject(Ovr.hEvent,INFINITE)= WAIT_OBJECT_0) then
        begin
          GetOverlappedResult(IdCom, Ovr, i, False);
        end;
    end;
  CloseHandle(Ovr.hEvent);
end;


Пытаюсь прочитать что приходит из него
Код

procedure TReadThread.Execute;
var OverRead: TOverlapped;
   S: string;
begin
OverRead.hEvent:=CreateEvent(nil, True, False, nil);
 if OverRead.hEvent= Null then begin
  ShowMessage('Error creating read event');
  Exit;
  end;
while not Terminated do begin
    if not WaitCommEvent(IdCom, dwMask, @OverRead) then
      begin
        if GetLastError = ERROR_IO_PENDING then
        WaitForSingleObject(OverRead.hEvent,INFINITE)
       else ShowMessage('Error waiting port event');
     end;
    if not ClearCommError(IdCom, dwError, @ComStat) then
    ShowMessage('Error clearing port');
  dwRead:=ComStat.cbInQue;
  if dwRead > 0 then
   begin
     if not ReadFile(IdCom, ReceiveBuff, sizeof(ReceiveBuff), dwRead, @OverRead) then
       ShowMessage('Error reading port');
   end;
S:=string(ReceiveBuff);
Form11.Memo1.Lines.Add(s);
sleep(100);
end;
end;


В мемо ничего не выводит...и сама МАРИЯ-701 никак не реагирует

Объявление класса для чтения из порта:
Код

TReadThread = class(TThread)
   private
    { Private declarations }
  protected
  procedure Execute; override;
 end;


Создаю поток так:
Код

procedure TForm11.Button5Click(Sender: TObject);
var
  ReadThread: TReadThread;
begin
  ReadThread:=TReadThread.Create(true);
  ReadThread.FreeOnTerminate:=true;
  ReadThread.Priority:= tpNormal;
  ReadThread.Resume;
end;



Помогите пожалуйста уже который день бьюсь, ничего не получается


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
morpheyushka
Дата 9.12.2008, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


Профиль
Группа: Участник
Сообщений: 563
Регистрация: 26.2.2008
Где: Киев

Репутация: 2
Всего: 8



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

просто я первый раз работаю с СОМ портом...перечитал уже море инфы, может кто то с протоколом для фискального регистратора (фискальный принтер) МАРИЯ-701 работал или хотя бы с 301 моделью - буду очень благодарен за любую помощь


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
ama_kid
Дата 11.12.2008, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 19
Всего: 95



Цитата(morpheyushka @  9.12.2008,  20:01 Найти цитируемый пост)
как точно узнать, что то, что я отправляю устройство получает
Подцепись к другому компу по СОМ и через гипертерминал проверь... А для начала - поставь бряк на WriteFile и проверь, что буфер корректный...
Цитата(morpheyushka @  9.12.2008,  12:50 Найти цитируемый пост)
В мемо ничего не выводит...
Аналогичный совет - ставь бряк на ReadFile и проверяй отладчиком содержимое полученного буфера. Не факт, что приходящий буфер можно преобразовать в строку для вывода в Мемо...
P.S. Ну и не очень понятно, зачем используешь буферизированный (Overlapped) режим? Лишний геморрой имхо... Пиши-читай синхронно, пакеты-то небольшие, как я понимаю...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
morpheyushka
Дата 12.12.2008, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


Профиль
Группа: Участник
Сообщений: 563
Регистрация: 26.2.2008
Где: Киев

Репутация: 2
Всего: 8



Цитата(ama_kid @  11.12.2008,  23:40 Найти цитируемый пост)
P.S. Ну и не очень понятно, зачем используешь буферизированный (Overlapped) режим? Лишний геморрой имхо... Пиши-читай синхронно, пакеты-то небольшие, как я понимаю...

Правильно понимаешь - просто я нашел только для асинхронного доступа - все примеры только с ним

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

Добавлено через 41 секунду
Может знаешь где можно пример синхронного доступа посмотреть?


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
ama_kid
Дата 12.12.2008, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 19
Всего: 95



Цитата(morpheyushka @  12.12.2008,  17:40 Найти цитируемый пост)
Может знаешь где можно пример синхронного доступа посмотреть? 
Да там все то же самое, только при вызове CreateFile убери флаг FILE_FLAG_OVERLAPPED, выкидывай все Overlapped-структуры и имей ввиду, что WriteFile и ReadFile будут ожидать завершения передачи данных (это неприменимо для работы из основного потока, но у тебя все вызывается из отдельного - поэтому все должно быть нормально). 


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Felan
Дата 13.12.2008, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 2.8.2007
Где: Самара

Репутация: 2
Всего: 7



Цитата(morpheyushka @  12.12.2008,  18:40 Найти цитируемый пост)
Правильно понимаешь - просто я нашел только для асинхронного доступа - все примеры только с ним

Ну вот есть пример для синхронного... даже с исходниками smile


--------------------
// Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного.
PM MAIL WWW ICQ   Вверх
morpheyushka
Дата 15.12.2008, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


Профиль
Группа: Участник
Сообщений: 563
Регистрация: 26.2.2008
Где: Киев

Репутация: 2
Всего: 8



Попробую разобраться, если что, еще напишу smile 


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
morpheyushka
Дата 16.12.2008, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


Профиль
Группа: Участник
Сообщений: 563
Регистрация: 26.2.2008
Где: Киев

Репутация: 2
Всего: 8



Цитата(Felan @  13.12.2008,  13:27 Найти цитируемый пост)
Ну вот есть пример для синхронного... даже с исходниками smile 




Felan, спасибо - взял твой класс...переделал под свои потребности все пишет, читает...короче помогло - теперь буду долбать протокол этого кассового аппарата


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
Felan
Дата 17.12.2008, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 2.8.2007
Где: Самара

Репутация: 2
Всего: 7



Не за что smile


--------------------
// Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0519 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.