2012-05-11 2 views
0

У меня есть приложение, которое подключается к балансу через последовательный порт. Баланс довольно большой, и нажатие кнопки PRINT не является опцией. Поэтому мое приложение запрашивает баланс для программной печати при определенном действии пользователя. Интерфейс баланса позволяет это и определяет команду печати. Все работает некоторое время. Затем, после взвешивания нескольких элементов, весы начинают выводить предыдущий вес .... Я искривлен в этот момент, так как определено несколько команд, и нет слишком много вариантов для того, что можно сделать. После каждого раза я уже очищаю буфер OUT. Поэтому я не знаю, почему он продолжает давать мне старую ценность.Последовательный порт выводит старое значение при ручной команде PRINT

Вот мой код:

 if (askedToPrint) 
     { 
       _sp.DiscardOutBuffer(); 

       //ask the balance to print 
       _sp.Write("P\r\n"); 

     } 

_sp - это объект SerialPort

Я использую WinCE 6.0 и Compact Framework 2.0/C#

ответ

0

если вы читаете данные из последовательного порта, используя Readline() или Read(), тогда существует вероятность того, что баланс отправил несколько пакетов в очередь. Поэтому перед чтением вы должны отказаться от уже ожидающих пакетов. Перед тем как записать запрос на печать, используйте метод ReadExisting() для чтения всех доступных данных. Поэтому после отправки команды, если ваш баланс по-прежнему отправляет старые пакеты, может возникнуть проблема с балансом.