ZC350, linkos and ethernet connections
Hey, I've been trying to get my encode over ethernet software to work with the ZC350 printer.
I've got the Silex usb over ethernet to work but I'm having issues with keeping a stable connection with the printer. Over a usb connection I can encode and print multiple cards with no issues but when switching to Ethernet connections I'm getting errors and timeouts usually with an exception of "Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host" coming from the linkos sdk code.
I'm building the connection like this where connection is "TCP:xxx.xxx.xxx.xxx"
this.ZebraPrinterConnection = Zebra.Sdk.Comm.ConnectionBuilder.Build(connector);
this.ZebraCardPrinter = Zebra.Sdk.Card.Printer.ZebraCardPrinterFactory.GetInstance(this.ZebraPrinterConnection);
this.ZebraCardPrinterZmotif = Zebra.Sdk.Card.Printer.ZebraCardPrinterFactory.GetZmotifPrinter(this.ZebraPrinterConnection);
but after printing a few cards, mostly as few as two, it starts to throwing exceptions even when trying to get the current status of the printer. If I wait a few minutes the issue goes away but comes back after printing.
I'm compiling my projects in .Net 4.8 and the printer is the ZC350 on firmware v201.01.15 that was released on the 1 Dec 2021. Normally I'd be using the printer via usb but in one project I have to use the ethernet interface. The driver is v188.8.131.52
Well I've answered my own question. After testing the same code on a ZXP 7 (it works perfectly and prints card after card) I'd say the ZC350 network stack has issues where it doesn't close connections on the printer end and eventually crashes the stack and then the printer, I've had it lock up so badly even the power button doesn't work.
The only reliable way I've got of continuously printing to the ZC350 is after printing a single card I use the ResetNetwork call of the Zebra.Sdk.Card.Printer.ZebraPrinterZmotif object, this resets the network stack of the printer and for any further printing I have to rebuild the connection.
The same code works perfectly when using a direct usb connection without having to reset anything, hence my belief it's the network stack. With the previous firmware it was even worse.
One undocumented feature I found during all of this is that the Linkos card sdk requires SNMP to be turned ON otherwise it will never build a connection to the printer as it queries the interface to determine the printer type, seeing as it's an option on the printer to turn it off but with a bit of reflection I found a way to circumvent the requirement.
Thanks for coming back to us with your own solution - I'm sure this will help other developers in future. As for your comment regarding the undocumented feature - I've passed this onto our documentation team to take a look at.