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:&nbsp;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&nbsp;V68.19.7Z? Se euFaz&nbsp;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&nbsp;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:&nbsp;Não existe "SerialPort.Flush" Talvez:

serialPort.Close();

... está realizando a mesma coisa?