2013-10-10 6 views
0

Я хочу напечатать несколько строк на Zebra iMZ320 от Motorola ES400 под управлением WM6.5. Я общаюсь через bluetooth, используя библиотеку 32feet и C#.Ошибка связи связи с Zebra iMZ320

Мой код работал отлично на MZ320, но с новым iMZ320 связь иногда останавливается (даже в середине задания на печать), и я должен перезапустить принтер, потому что он отказывается снова подключаться.

Я попытался сломать строку CPCL в нескольких строках и отправить ее по очереди с интервалом 100 мс, но без каких-либо улучшений.

Я заметил, что когда я закрою свое приложение и заново запустил его, связь не удастся.

private void btPrint_Click(object sender, EventArgs e) 
    {    
     // Activate BT 
     BluetoothRadio.PrimaryRadio.Mode = RadioMode.Connectable; 
     System.Threading.Thread.Sleep(1000); 
     // Connect 
     BluetoothAddress btAddress; 
     btAddress = BluetoothAddress.Parse("0022583165F7");    
     BluetoothClient btClient = new BluetoothClient(); 
     try 
     { 
      btClient.Connect(new BluetoothEndPoint(btAddress, BluetoothService.SerialPort)); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
      return; 
     } 
     // Send data 
     string CPCLStr1 = 
      "! 0 200 200 210 1" + Environment.NewLine + 
      "ML 25" + Environment.NewLine + 
      "TEXT 7 0 10 20" + Environment.NewLine + 
      "Just" + Environment.NewLine + 
      "Testing" + Environment.NewLine + 
      "ENDML" + Environment.NewLine + 
      "FORM" + Environment.NewLine + 
      "PRINT" + Environment.NewLine; 

     // Convert CPCL String to byte array 
     byte[] CPCLbytes1 = ASCIIEncoding.ASCII.GetBytes(CPCLStr1); 

     NetworkStream ns = btClient.GetStream(); 
     ns.Write(CPCLbytes1, 0, CPCLbytes1.Length); 
     btClient.dispose(); 
     btClient.Close(); 
    } 
+0

Возможно, принтер пытается отправить некоторую информацию обратно, но ваш код не имеет строки для чтения из потока. Можете ли вы попытаться распечатать то же самое с ПК? Другим вариантом будет использование виртуального COM-порта для связи BT. Вы можете связать принтер с устройством и определить новый исходящий порт и использовать его для последовательной связи. Кстати: некоторые мото-устройства и там Bluetooth не ведут себя красиво. – josef

+0

Я пытался напечатать то же самое с ПК и с терминала Bluetooth, работающего на Android, и все работает нормально. Но я только пробовал это 1 или 2 раза, и ситуация, которую я описал, случается случайным образом. –

ответ

0

Были обнаружены многочисленные ошибки в пакетах Bluetooth (StoneStreetOne и Microsoft), входящие в состав карманных компьютеров Motorola WinMobile, которые могут привести к сбоям, подобным этому. Поскольку вы используете библиотеку 32Feet для BT, вы должны иметь возможность переключать стеки (от SSO до MS или наоборот) без каких-либо изменений кода в вашем приложении. Для этого требуется простая модификация реестра - см. http://christian-helle.blogspot.com/2010/10/motorola-dual-bluetooth-stack-support.html для получения дополнительной информации.

Кроме того, я хотел бы убедиться, что вы используете последнюю версию WinMobile от Motorola. Я также удостоверился, что у вас есть последняя прошивка для iMZ (V73.19.6Z по состоянию на апрель 2014 года). Помимо хорошей практики в целом, Motorola и Zebra исправили проблемы, связанные с Bluetooth, в последних версиях прошивки.

Дополнительное тестирование с устройства ПК/Android должно дать некоторое представление о том, является ли источником проблемы принтер или карманный компьютер - если вы не можете воспроизвести эту проблему при подключении к принтеру с других устройств, тогда карманный компьютер вероятно, виноват.