Страница 6 из 9
Re: Тонкости работы с COM портом
Добавлено: 01.02.2010 17:30:18
serg_iv
a = 0
Все верно - на ком порту данные не были приняты в течении одной миллисекунды.
Задача то какая стоит? А то "помогите разобраться" без постановки задачи как то не очень помогает ее хотя бы понять...
Re: Тонкости работы с COM портом
Добавлено: 11.02.2010 15:31:19
Yurakl
на устройство(компьютер) поступают данные через комп порт, а далее если есть связь по Еthernet, то они поступают уже на компьютер, если нет, то сохраняются в памяти, и при появлении соединения передаются получателю.
Вот такая задача!
Re: Тонкости работы с COM портом
Добавлено: 11.02.2010 16:37:42
serg_iv
Данные на ком порту какие? Байты или строки, с каким нибудь спецефическим символом конца строки?
Конфигурация порта - на какой скорости поступают данные, есть бит паритета или нет?
Это известно?
Re: Тонкости работы с COM портом
Добавлено: 12.02.2010 00:11:17
alexrayne
Народ. тут вроде ветку стартовали с задачи обмена по РС485. подкажите ктонить сцылко на открытый протокол обмена, чтоб свой велосипед не городить. в теории надо надо связать несколько устройств в общую сеть, походу даже с одним мастером. вопрос нестолько в обмене сколько в процедурах договаривания о скоростях, восстановлении сбоев и проверке и восстановлении передаваемых сообщений.
Для тех кто может заинтересоваться, в свое время усиленно думал какими компонентами пользоваться для обмена по ком, от библиотеки sysnaser, и подобных отказался по причине тяжеловесности. для своих консольных прог написал библиотеку врапер виндовых вызовов к ком устройствам чтобы получить оверлапед ввод\вывод похожий на работу с файлами. вообще попробовал както линевый стиль работы с терминалами адаптировать. вобщем получилось мелкое и простое в использовании либо. если охота ознакомится, выложу на фрипаскалевский контрибутор.
Re: Тонкости работы с COM портом
Добавлено: 12.02.2010 00:36:06
Mr.Smart
Сам стандарт RS485 как и RS232 оговаривает уровни сигналов, скорости и гальваническую развязку. Он является физически уровнем и не более того. Для транспорта используются множество других протоколов, как стандартизированных так и не. Мне не известен ни один протокол, который бы удовлетворял Вашим требованиям (договариваться о параметрах связи и т.д.). Один из самых популярных протоколов - это ModBus. Можно за основу адресации и проверки на ошибки взять данный протокол (что большинство производителей приборов и делает) и создать свой под конкретные нужды

Re: Тонкости работы с COM портом
Добавлено: 12.02.2010 01:33:22
alexrayne
вообчето рс232 и рс485 даже притом что они оговаривают только уровни, но всетаки надо понимать что рс232 по логике ближе к РС422, а 485 просто другая жизнь ибо он многоточечный\разделяемый, а остальные упомянутые точка-точка. про модбас я уже поставил заметку, но спрасил в надежде что есть какаято альтернатива, из чего выбрать.
Re: Тонкости работы с COM портом
Добавлено: 12.02.2010 08:36:29
Yurakl
serg_iv писал(а):Данные на ком порту какие? Байты или строки, с каким нибудь спецефическим символом конца строки?
Конфигурация порта - на какой скорости поступают данные, есть бит паритета или нет?
Это известно?
На ком порт поступает пакет данных(байты), но в принципе это не так важно, что туда поступает, так как он должен передать все, что к нему пришло. Порт можно и самим же сконфигурировать, но устройство передает на скорости 4800 бод
Re: Тонкости работы с COM портом
Добавлено: 12.02.2010 09:34:29
serg_iv
Ну и пробуй, желательно вынести в отдельный поток:
Код: Выделить всё
//инициализация последовательного порта
ser:=TBlockserial.Create; //создаем устройство
ser.RaiseExcept:=false; //не обрабатываем исключения ошибок связи
ser.Connect(nPort); //соединяемся с портом
ser.Config(4800,8,'N',0,false,false);//настраиваем скорость, стоп биты, паритет
repeat
data := ser.RecvByte(1000);
// .... тут твой код обработки данных
until Terminated;
ser.Free;//освобождаем устройство
end.
Удачи конечно, но все таки формат передачи данных посмотри: стоп бит и бит паритета
Re: Тонкости работы с COM портом
Добавлено: 12.02.2010 14:47:53
v-t-l
alexrayne писал(а):ветку стартовали с задачи обмена по РС485. подкажите ктонить сцылко на открытый протокол обмена, чтоб свой велосипед не городить.
Не подойдет?:
http://ru.wikipedia.org/wiki/Modbus
Re: Тонкости работы с COM портом
Добавлено: 12.03.2010 15:20:23
Yurakl
Доброго времени суток!!!
Возникла проблемка.
Код: Выделить всё
ser:=TBlockserial.Create; //создаем устройство
ser.RaiseExcept:=false; //не обрабатываем исключения ошибок связи
ser.Connect('/dev/ttyS0'); //соединяемся с портом
ser.Config(115200,8,'N',0,false,false);//настраиваем скорость, стоп биты, паритет
if ser.InstanceActive then
repeat
data := ser.RecvByte(1000);
writeln(data);
until Terminated;
ser.Free;//освобождаем устройство
после исполнения данной программы в следующее подключение InstanceActive становится равным FALSE.
из-за чего это так?
Добавлено спустя 27 минут 50 секунд:может это из-за того что до освобождения устройства программа не доходила??
Re: Тонкости работы с COM портом
Добавлено: 12.03.2010 15:51:47
Mr.Smart
Как закончили работу - освободите порт Disconnect.
Re: Тонкости работы с COM портом
Добавлено: 15.03.2010 07:50:07
Yurakl
для освобождения порта используется Free.
Однако я прервал выполнение программы, тем самым не дойдя до этой команды.
Но в тоже время у меня принятые данные равны 0. В чем может быть причина?настройки вроде выставлены правильно!
Re: Тонкости работы с COM портом
Добавлено: 16.03.2010 13:44:45
Yurakl
порт я освободил.
Устройство подключено, оно передает данные. Однако на компьютере мне выводятся нули....
Re: Тонкости работы с COM портом
Добавлено: 16.03.2010 14:48:28
swa1
Yurakl писал(а):следующее подключение InstanceActive становится равным FALSE.
Попробуйте после Connect проверить на ошибки...
Код: Выделить всё
if Ser.LastError<>0 then ShowMessage(' ОШИБКА - '+LastErrorDesc+' ('+IntToStr(Ser.LastError)+')';
Что скажет.
Yurakl писал(а):В чем может быть причина?
Как видно вы работаете под линуксом. Попробуйте после Create поиграться с LinuxLock... Он отвечает за блокирование порта(для других програм...пользователей) после занятия. В папке /var/lock увидите образуемый там файл.
Я к примеру разрушаю(Serial.Free) по выходу из программы, а закрываю так:
Код: Выделить всё
if Serial.Handle<>INVALID_HANDLE_VALUE then
begin
Serial.Flush; // ждем до полного очищения буфера
Serial.Purge; // если что то и есть до очищаем до конца
Serial.CloseSocket; // отключаемся
end;
Тогда уж точно в /var/lock ничего не останется и вы опять получите доступ

Начал писать еще утром, дописал только сейчас...Отвлекли.
Добавлено спустя 27 минут 19 секунд:Yurakl писал(а):порт я освободил.
Как?
Yurakl писал(а):Устройство подключено, оно передает данные. Однако на компьютере мне выводятся нули....
значит что в data ничего не пишется. Попробуйте так:
Код: Выделить всё
if Ser.CanReadEx(100) then begin
data := ser.RecvByte(0);
writeln(data);
end;
Ну и как писалось
serg_iv писал(а):Ну и пробуй, желательно вынести в отдельный поток
Re: Тонкости работы с COM портом
Добавлено: 16.03.2010 15:09:32
Yurakl
Yurakl писал(а):порт я освободил.
Как?
ну порт освободил не совсем я. просто пришлось устройство к другому компьютеру подсоединить, где порт оказался свободным:))
а нули выводились из-за неправильной настройки com порта на другой машине, воть так.
при команде
Что происходит?? Записывается(выводится) один байт за 1000 мсек? а если за это время пришло 50 байт, к примеру?