He aquí algunos antecedentes sobre lo que estoy tratando de hacer:¿Cómo obligo a un método de escritura de puerto serie a esperar que la línea se borre antes de enviar sus datos?
- Abrir un puerto en serie desde un dispositivo móvil a una impresora Bluetooth.
- Envía una forma EPL/2 a la impresora Bluetooth, para que entienda cómo tratar los datos que está a punto de recibir.
- Una vez que se haya recibido el formulario, enviar algunos datos a la impresora que será impreso en la etiqueta de valores.
- Repita el paso 3 tantas veces como sea necesario para cada etiqueta que se va a imprimir.
El paso 2 solo ocurre la primera vez, ya que no es necesario que el formulario preceda a cada etiqueta. Mi problema es que cuando envío el formulario, si envío los datos de la etiqueta demasiado rápido, no se imprimirá. A veces aparece impreso "Fallo de Bluetooth: Radio no operativa" en la etiqueta en lugar de los datos que envié.
he encontrado una forma de evitar el problema de la siguiente manera:
for (int attempt = 0; attempt < 3; attempt++)
{
try
{
serialPort.Write(labelData);
break;
}
catch (TimeoutException ex)
{
// Log info or display info based on ex.Message
Thread.Sleep(3000);
}
}
Así que, básicamente, puedo coger un TimeoutException y vuelva a intentar el método de escritura después de esperar una cierta cantidad de tiempo (tres segundos parece funcionar todo el tiempo, pero menos y parece arrojar la excepción en todos los intentos). Después de tres intentos, asumo que el puerto serie tiene algo mal y lo dejo saber al usuario.
De esta manera parece funcionar bien, pero estoy seguro de que hay una mejor manera de manejar esto. Hay algunas propiedades en la clase SerialPort que creo que necesito usar, pero realmente no puedo encontrar ninguna buena documentación o ejemplos de cómo usarlas. He intentado jugar con algunas de las propiedades, pero ninguna parece hacer lo que intento lograr.
He aquí una lista de las propiedades que he jugado con:
- CDHolding
- CtsHolding
- DsrHolding
- DTREnable
- apretón de manos
- RTSEnable
Estoy seguro de que una combinación de estos se encargará de lo que estoy tratando de hacer con más gracia.
estoy usando C# (2,0 marco), una impresora Zebra QL 220 + Bluetooth y un dispositivo de mano Windows Mobile 6, si hay alguna diferencia de soluciones.
Cualquier sugerencia sería apreciada.
[ACTUALIZACIÓN]
También debo señalar que el dispositivo móvil está utilizando Bluetooth 2.0, mientras que la impresora está solamente en la versión 1.1. Supongo que la diferencia de velocidad es lo que está causando que la impresora se quede atrás al recibir los datos.
Jason, ¿se contactó con Zebra, y qué dijeron? Me interesa saber cómo resultó esta historia ... –
Hace un tiempo ... Recuerdo que recomendaron el control de flujo de software, que ya habíamos determinado como el mejor enfoque.No recuerdo que mencionen limitar la velocidad de transmisión ni nada por el estilo. –