![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день.
Подскажите новичку есть ли возможность внутри одной из процедур дождаться срабатывания процедуры прихода байтов из компорта. процедура срабатывания прихода байтов в модуле компорта описана как Код:
TReadEvent = procedure(Sender: TObject; ReadBytes: array of Byte; CRC_Err:Boolean;RW_Reguest:Byte) of object; published property OnRead: TReadEvent read FReadEvent write FReadEvent; Код:
procedure FOnRead(Sender: TObject; ReadBytes: array of Byte; CRC_Err: Boolean; FR_Reguest:Byte); Код:
var Port:TComPort; Код:
Port:=TComPort.Create(PortComName,BaudRateCom); Port.OnRead := FOnRead; Далее есть функция Код:
function TMR.FReadHoldingRegistr(ID, CodeFunction, RegistrAdress, SizeDataField: Byte): Single; var WriteCOm: array [0..7] of Byte; begin ...... Port.Write(WriteCOm,0); В этом месте нужно дождатся срабатывания процедуры прихода байтов из компорта, которое и установит поле FSingle. Result:=FSingle; |
#2
|
||||
|
||||
![]() 1. синхронный (блокирующий) режим
2. SetEvent / WaitForSingleObject Пишу программы за еду. __________________ |
#3
|
|||
|
|||
![]() а можно пример?
|
#4
|
||||
|
||||
![]() А может после записи в порт попробовать запустить небольшой слип, а потом выполнить чтение из?
З.Ы. Кстати, используя обычную апишную связку GetCommState/SetCommState подобной ситуации не наблюдается, приёмо-передача работает нормально даже в рамках одной процедуры... Я не понял Вашего вопроса, но всё же Вам на него отвечу! |