У меня все еще возникают проблемы с компонентом TComPort, но на этот раз не сам компонент, а логика. У меня есть устройство, которое посылает некоторые строки ascii через последовательный порт. Мне нужно прогнать эти строки, проблема в том, что компьютер реагирует очень быстро, поэтому в случае char он захватывает только часть строки, остальная часть строки возвращается позже ... поэтому синтаксический анализ, когда он получен, делает невозможным.Синхронизация последовательного порта в Delphi
Я думал о написании таймера, проверяющего, не было ли последовательной активности 10 секунд или более, а затем прайсу, которую я сохраняю в буфере. Но этот метод непрофессиональный - это не простое событие, которое я могу слушать ... Ожидая лучшего решения моей проблемы. Благодарю.
Это известная проблема. Если бы он был в большей среде. Триггер событий данных действительно быстрее, чем данные, которые следуют. Не уверен, что есть что-то еще, кроме небольшого ожидания перед чтением. – pritaeas
Это вполне нормально, и вы должны просто сохранить символы в буфере и сбросить таймер. Затем используйте таймер для запуска фактической активности - таймер может быть довольно плотным. Вы хотите закончить «конечный автомат» и иметь триггеры для событий. – mj2008
Предположим, вы используете Djaan Crnila и другие TComport (несколько компонентов называются «TComport»). Эта проблема может быть связана с триггером события данных, но также возможна скорость передачи в бодах вашего последовательного устройства в соответствии со скоростью, отличной от скорости вашего контрольного элемента. Если ваше устройство отправляет пакеты один раз каждые несколько мс, вы должны легко улавливать и анализировать весь пакет данных, если пакет имеет разумную длину. Отправляет ли устройство конец символа управления пакетами? - облегчает его.Если вы предоставите дополнительную информацию об устройстве, полученном пакете и т. Д., Кто-то может предоставить помощь. – SteveJG