Quais configurações do Zebra QLn220 eu preciso definir (e com que valor (es)) para obter uma configuração "stick"?

Estou tentando configurar programaticamente uma impressora Zebra QLn220 para definir seu "media.sense_mode" como "bar" ou "gap" (dependendo do que o usuário selecionar).

A confiabilidade desses comandos funcionando, no entanto, parece muito baixa (às vezes funciona, às vezes não).

Para testar os vários comandos possíveis, usei o Zebra Setup Utilities, com o PC conectado à impressora, é claro.

Enviei este comando do utilitário:

! U1 setvar "media.sense_mode" "gap"

Funcionou; Eu sei disso, porque testá-lo com:

! U1 getvar "media.sense_mode"

... me mostrou o esperado / esperado para a "lacuna" (ela havia sido "barra" antes de enviar o comando acima).

Mas tentar realizar a mesma coisa no código funciona para "bar" (quase sempre), mas quase nunca para "gap"

Aqui está o código:

const string quote = "\"";
string advanceToBlackBar = string.Format("! U1 setvar {0}media.sense_mode{0} {0}bar{0}\r\n", quote);
string advanceToGap = string.Format("! U1 setvar {0}media.sense_mode{0} {0}gap{0}\r\n", quote);
. . .
if (radbtnBar.Checked)
{
    PrintUtils.SendCommandToPrinter(advanceToBlackBar);
}
else if (radbtnGap.Checked)
{
    PrintUtils.SendCommandToPrinter(advanceToGap);
}

Então, como você pode ver, o código é exatamente o mesmo, exceto "bar" x "gap"

É possível que o "\ r \ n" anexo esteja causando um problema? Parece que adicionar esses itens foi necessário ou tornou os comandos mais confiáveis, mas estou aberto a qualquer coisa neste momento de frustração.

Eu sempre testei comandos alternativos para realizar a mesma coisa, para ver se eles seriam mais confiáveis, mas nenhuma das outras duas alternativas funcionou, a saber, não esta:

! U1 setvar "ezpl.media_type" "web"

-nem este:

{} {"media.sense_mode" "gap"}

... a verificação do val via getvar continuou a mostrar "bar" após o envio desses comandos para a impressora (após retornar a "bar" o valor de "media.sense_mode" permanece "bar" após o envio desses dois comandos).

Pode ser que algumas outras configurações da impressora precisem ser definidas para que a impressora seja mais responsiva aos comandos enviados? A configuração dos comandos não é apenas programaticamente não confiável, mas mesmo através do Zebra Setup Utility, algumas vezes "ampulheta" por muito tempo antes que o comando seja enviado e retorne - e outras vezes é mais rápido que Johnny Quick e Flash combinados.

Olhando através da saída volumosa deste comando:

! U1 getvar "allcv"

.... a seguir, os candidatos mais interessantes / prováveis. Quais, se houver, precisam ser alterados e para quais valores?

wlan.ip.dhcp.request_timeout : 2 , Choices: 2-30
wlan.ip.dhcp.session_interval : 10 , Choices: 0-60
. . .
wlan.ip.timeout.enable : on , Choices: on,off
wlan.ip.timeout.value : 300 , Choices: 1-3600
. . .
wlan.keep_alive.enable : on , Choices: on,off
wlan.keep_alive.timeout : 15 , Choices: 5-300
. . .
netmanage.avalanche.interval : 60000 , Choices: 0-4294967295
netmanage.avalanche.startup_update : off , Choices: on,off
netmanage.avalanche.interval_update : off , Choices: on,off
. . .
netmanage.avalanche.udp_timeout : 3000 , Choices: 0-4294967295
netmanage.avalanche.tcp_connection_timeout : 3000 , Choices: 0-4294967295
. . .
netmanage.avalanche.realtime_update_int : 300 , Choices: 0-4294967295
. . .
zpl.zpl_mode : zpl II , Choices: zpl II,zpl
. . .
internal_wired.ip.arp_interval : 0 , Choices: 0-30
. . .
internal_wired.ip.dhcp.requests_per_session : 2 , Choices: 1-10
internal_wired.ip.dhcp.request_timeout : 2 , Choices: 2-30
internal_wired.ip.dhcp.session_interval : 10 , Choices: 0-60
. . .
internal_wired.ip.timeout.enable : on , Choices: on,off
internal_wired.ip.timeout.value : 300 , Choices: 1-3600
. . .
internal_wired.ip.wins.permanent_source : off , Choices: on,off
. . .
interface.network.active.arp_interval : 0 
. . .
interface.network.active.speed : 0 
. . .
weblink.printer_reset_required : no 
. . .
weblink.ip.conn1.retry_interval : 10 , Choices: 1-600
. . .
weblink.ip.conn1.maximum_simultaneous_connections : 10 , Choices: 1-100
. . .
weblink.ip.conn1.test.retry_interval : 900 , Choices: 1-1800
weblink.ip.conn1.num_connections : 0 
. . .
capture.channel1.port : off , Choices: serial,usb,bt,parallel,off
capture.channel1.count : 0 , Choices: 0-4294967295

Alguém aí com uma pista?

ATUALIZAR

Aqui está o código que envia os comandos:

public static bool SendCommandToPrinter(string cmd)
{
    bool success; // init'd to false by default
    try
    {
        using (SerialPort serialPort = new SerialPort())
        {
            serialPort.BaudRate = 19200;
            serialPort.Handshake = Handshake.XOnXOff;
            serialPort.Open();
            serialPort.Write(cmd);
            serialPort.Close(); // <= should be redundant within a using statement, but still getting "File 55" err...
        }
        success = true;
    }
    catch // may not need a try/catch block, as success defaults to false
    {
        success = false;
    }
    MessageBox.Show(success.ToString()); //TODO: Remove after testing
    return success;
}

O SerialPort em questão é do OpenNETCF.IO.Ports.SerialPort

NOTA: SerialPort.Write () retorna nulo.

O comando:

! U1 getvar "appl.name" 

retorna "V68.19.7Z"no Zebra Setup Utility.

Isso significa que meu firmware está atualizado (V68.19.7Z> v68.18.0Z) ou significa que, como meu "appl" é mais recente, preciso atualizar o firmwarepara V68.19.7Z? Se euFaz precisa atualizar o firmware, como faço isso? É uma questão de localizar e fazer o download do firmware mais recente no meu PC e executar o aplicativo de instalação enquanto o PC e a impressora estão conectados via USB ou ... ???

ATUALIZAÇÃO 2

Deaqui, pesquisando QLn220, vejo a V68.18.0Z como a única versão de firmware disponível para download. Portanto, como pareço ter uma versão mais recente na minha impressora, estou confuso ... por que eles não oferecem o que parece ser a versão mais recente (V68.19.7Z)?

ATUALIZAÇÃO 3

Se eu clicar no botão "arquivo de extração automática"na página mencionada acima, eu simplesmente recebouma página com algumas direções genéricas, mas não acionáveis (ao que parece).

Se eu clicar no link de download, recebo uma página que diz: "Esta página da Web possui um loop de redirecionamento"

ATUALIZAÇÃO 4

Funciona após adicionar algumas strings de depuração; no código de impressão:

MessageBox.Show(success.ToString()); //TODO: Remove after testing
return success;

... e no código de configuração:

if (radbtnBar.Checked)
{
    MessageBox.Show(advanceToBlackBar);
    PrintUtils.SendCommandToPrinter(advanceToBlackBar);
}
else if (radbtnGap.Checked)
{
    MessageBox.Show(advanceToGap);
    PrintUtils.SendCommandToPrinter(advanceToGap);
}

Será que essa pequena "interrupção na ação" é benéfica de alguma forma?

ATUALIZAÇÃO 5

Nota: Não existe "SerialPort.Flush" Talvez:

serialPort.Close();

... está realizando a mesma coisa?

questionAnswers(3)

yourAnswerToTheQuestion