Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2010, 12:36   #1
yuta_86
Пользователь
 
Регистрация: 06.12.2010
Сообщений: 99
Злость не пойму почему так (comm32)

товарищи, несколько часов потратил на поиск проблемы((( и так её и не нашёл
использую компонент comm32
открываю порт
Comm321.StartComm; здесь всё ок
пытаюсь записывать в порт
Код:
var
 SendStr:String;
begin
 SendStr:='';
 if InputQuery('Запрос данных', 'Введите данные, которые надо отправить', SendStr) then
  Comm321.WriteCommData(PChar(SendStr), Length(SendStr));
end;
в итоге вместо например 1 пишет 31 вместо 2 32 и тд (сажусь на подслушку Free serial port monitor )

если пользуюсь обычным методом WriteFile(FHandl, Buffer, Byte_Number, Byte_Count2, nil); всё работает на ура. данные передаются в Hex.

Последний раз редактировалось Stilet; 15.12.2010 в 13:16.
yuta_86 вне форума Ответить с цитированием
Старый 15.12.2010, 13:28   #2
yuta_86
Пользователь
 
Регистрация: 06.12.2010
Сообщений: 99
По умолчанию

я понял 1 это 31 по счёту позиция в ASCII, почему же он отправляет нев HEX формате, а не пойми в чём (((
yuta_86 вне форума Ответить с цитированием
Старый 15.12.2010, 14:04   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

Цитата:
по счёту позиция в ASCII
Это код символа, а не просто какая-то позиция.

Цитата:
почему же он отправляет нев HEX формате, а не пойми в чём (((
Он именно отправляет байты,просто Вы передаете ему строку.
p51x вне форума Ответить с цитированием
Старый 15.12.2010, 14:07   #4
yuta_86
Пользователь
 
Регистрация: 06.12.2010
Сообщений: 99
По умолчанию

я хочу чтобы он передавал 1 в формате HEX чтобы 255 было FF ;-)
а не 32 35 35

Цитата:
Сообщение от p51x Посмотреть сообщение
Он именно отправляет байты,просто Вы передаете ему строку.

так WriteCommData(PAnciChar,Word );
вот я ему и передаю PAnciChar

Последний раз редактировалось Stilet; 15.12.2010 в 15:37.
yuta_86 вне форума Ответить с цитированием
Старый 15.12.2010, 14:33   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

эта функция и должна так работать, достаточно взглянуть в кишки:
Код:
function TComm32.WriteCommData( pDataToWrite: PChar; dwSizeofDataToWrite: Word ): Boolean;
var
	Buffer:	Pointer;
begin
	if WriteThread <> nil then
	begin
		Buffer := Pointer(LocalAlloc( LPTR, dwSizeofDataToWrite+1 ));
		Move( pDataToWrite^, Buffer^, dwSizeofDataToWrite );
		if PostThreadMessage( WriteThread.ThreadID, PWM_COMMWRITE,
					 WPARAM(dwSizeofDataToWrite), LPARAM(Buffer) ) then
		begin
			Result := true;
			Exit;
		end
		else
			LogDebugInfo( 'Failed to Post to Write thread. ' );
	end
	else
		LogDebugInfo( 'Write thread not created' );

	Result := False;
end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 15.12.2010, 14:36   #6
yuta_86
Пользователь
 
Регистрация: 06.12.2010
Сообщений: 99
По умолчанию

какой же функцией передавать данные? чтобы видеть в посылке HEX ((((
yuta_86 вне форума Ответить с цитированием
Старый 15.12.2010, 14:46   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

передавайте побайтно через WriteFile().
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 15.12.2010, 14:52   #8
yuta_86
Пользователь
 
Регистрация: 06.12.2010
Сообщений: 99
По умолчанию

я её и использовал, но умные люди подсказали что для передачи необходимо использовать поток, а в TComm32.WriteCommData как раз его и юзают.
yuta_86 вне форума Ответить с цитированием
Старый 15.12.2010, 15:22   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

ну, вообще-то ожидание окончания передачи можно реализовать и через WaitForSingleObject.

...рекомендую bcomport:
Вложения
Тип файла: txt BCPort.pas.txt (29.9 Кб, 180 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 15.12.2010, 15:32   #10
yuta_86
Пользователь
 
Регистрация: 06.12.2010
Сообщений: 99
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
ну, вообще-то ожидание окончания передачи можно реализовать и через WaitForSingleObject.
не совсем понял
yuta_86 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не пойму почему ошибка... ImmortalAlexSan Общие вопросы Delphi 13 22.08.2010 20:26
не пойму почему. spaun88 Общие вопросы Delphi 8 09.06.2010 17:26
не пойму что не так делаю Crudelis Общие вопросы C/C++ 3 23.04.2010 11:09
Что не так не пойму out of range alco84 Microsoft Office Excel 5 24.01.2010 20:19
Не пойму чо так Cricket2007 Помощь студентам 5 15.05.2008 01:17