-
у вас явная ошибка алгоритма работы с портом. старайтесь читать весь аппаратный буфер, тогда там не будут накапливаться ошибки. при открытии порта вы явно указываете размер аппаратного буфера... нет смысла делать его очень большим, лучше читать чаще. когда вы читаете буфер порта в цикле будет лучше если все принятые символы заберуться из него и он очиститься, бог знает правильно ли устроена у него очередь и хватает ли времени в цикле на ее обслуживание.
далее, обрабатываете принятые символы и очищаете уже программный буфер.... в этом случае у вас ничего не накопиться лишнего никогда ))
(*Получаем данные из порта*)
bytes_read := SysComRead( com_num, ADR( BUFF_SERIAL ), 255, 0 ); (* СЧИТАТЬ СИМВОЛЫ ПОЛУЧЕННЫЕ МЕЖДУ ОПРОСАМИ *)
- т.е. если в аппаратном буфере меньше чем 255 символов, все они переносяться в программный буфер, а аппаратный очиститься.... а если в аппаратном больше чем 255, то очередь в нем должна сдвинуться.. а правильно ли она это сделает?
и не забывайте очищать программный буфер после вытаскивания из него значений... в выше приведенной строке при отсутствии новых символов содерживое массива BUFF_SERIAL меняться не будет!!! что похоже у вас и происходит... а по истечению какого-то времени порт ловит помеху и считывает ошибочный символ, которого вы не замечаете, но значение в буфере обновиться
Последний раз редактировалось Дмитрий Артюховский; 10.12.2009 в 18:17.
Ваши права
- Вы не можете создавать новые темы
- Вы не можете отвечать в темах
- Вы не можете прикреплять вложения
- Вы не можете редактировать свои сообщения
-
Правила форума