![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
Darkblue |
|
||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.1.2012 Репутация: нет Всего: нет |
Пишу на делфи 7, использую драйвер AsyncFree104, дк вот мне нужно передавать на контроллер информацию побайтно ну и соответственно он мне должен отвечать (в данный момент просто отправить полученные байты обратно), как реализовать вылавливание байтов (результат нужен в HEX), посылку делаю следующим образом: задаю в глобальных переменных Buff: byte = ($12);z:integer; и соответственно на контроллер приходит число 12 hex, параллельно в поле StaticText2.Caption высвечивается число 18 dec, подключал осцил, на нём видно что число приходит с выхода TX
Приём насколько я понял (в интернете вообще почемуто мало инфы о этом драйвере) можно реализовать так: d1:=AfComPort1.ReadString - не подходит потому что он переводит данные в кодировку ASCII а мне нужен HEX а не строка либо через AfComPort1.ReadData которая должна вызываться процедурой procedure TForm1.AfComPort1DataRecived(Sender: TObject; Count: Integer); дк вот вопрос:как мне с помощью команды AfComPort1.ReadData отлавливать свои байты? сложность заключается в том, что нет такого компонента AfComPort1DataRecived для помещения его на рабочее поле, а если делать как в коде ниже (причём Buff: byte = ($12); ReadBuffer: array of byte; z,count:integer; задано в глобальных переменных)
то вылазит ошибка Acess violation at address 0049EAA3 in module Project1.exe. Read of address 00000000. Уважаемые помогите пожалуйста |
||||
|
|||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
Это не просто процедура. Это обработчик события OnDataRecieve данного компонента, которое сообщает что принято Count байт. В этом обработчике и нужно вызывать процедуру ReadData. Это сообщение отредактировал(а) northener - 22.1.2012, 18:25 -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Darkblue |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.1.2012 Репутация: нет Всего: нет |
Извините первый раз юзаю обработчики, тоесть как я понял в ObjectInspector->AFComPort1->Events-> OnDataRecived прописываем ReadData, жмякаем Enter появляется процедура procedure TForm1.ReadData(Sender: TObject; Count: Integer); в которой мы и начинаем считывать наш байт AfComPort1.ReadData(ReadBuffer[Poz], count); ?
|
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
в ObjectInspector->AFComPort1->Events-> OnDataRecived нажимаем Enter или двойной щелчок мышки. Появляется в коде шаблон обработчика TForm1.AfComPort1DataRecived(Sender: TObject; Count: Integer); В нем пишем AfComPort1.ReadData(ReadBuffer[Poz], count); и все прочее что нужно сделать с полученными данными.
-------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Darkblue |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.1.2012 Репутация: нет Всего: нет |
Сделал как вы сказали реакций 00,теперь он даже ошибку не выдаёт что мол буфер пуст читать из него нельзя (Acess violation at address 0049EAA3 in module Project1.exe. Read of address 00000000.)
|
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
Что есть ReadBuffer? Эти две строки нужно поменять местами. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Darkblue |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.1.2012 Репутация: нет Всего: нет |
ReadBuffer: array of byte; занесён в глобальные переменные
|
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
А SetLength(ReadBuffer,...) в коде есть? -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Darkblue |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.1.2012 Репутация: нет Всего: нет |
Эм нет,в этом ошибка получается,тоесть нужно размер буфера задать ,так? а куда его засунуть до передачи непосредственно?
|
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
Ну например в FormCreate. Но только не так Пока размер не задан Length(ReadBuffer) вернет 0. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Darkblue |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.1.2012 Репутация: нет Всего: нет |
Всё разобрался,заработало,огромное вам northene спасибо
|
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
Не за что. Работа с внешним устройством через СОМ-порт - моя родная тематика. А все компоненты для такой работы сделаны практически по одной "кальке" ![]() Это сообщение отредактировал(а) northener - 23.1.2012, 00:13 -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Darkblue |
|
||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.1.2012 Репутация: нет Всего: нет |
Подскажите пожалуйста ещё. Я отлавливаю байт с порта затем я должен построить 6 графиков в TChart один сдвинут относительно другого, байт=8бит но старшие биты я не использую,код такой
тоесть построение графика вертится в таймере,минимальное значение срабатывания таймера 1 милисекунда как я понял,как мне сделать правильно ось времени,ведь данные могут приходить намного чаще (56000б/с скорость работы порта выставлена) а минимальное деление оси времени 1 милисекунда?Данные беру с порта
|
||||
|
|||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
Увы больше. Как минимумум 10мс с хвостиком. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Darkblue |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.1.2012 Репутация: нет Всего: нет |
печально это,но как тогда встроить ось времении правильно в соответствии с временем прихода сигнала? (делаю логический анализатор)
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |