Hi I have a non networked Zebra printer that is connected to a local PC that I will be running a vision client on.
I want to know how I could send the print command to the printer through the client directly to the computers default printer.
I have searched the forum and found many posts on sending via IP address - but not specific to a local printer connected to the PC running the vision client.
I you want to send ZPL directly, you will need to open the local port for the printer (as if a file) instead of a socket like the network examples. If the client is on Windows, you will need to drill into the printer settings to get the port name.
Ok I have had a look at the client PC and the Local printer settings shows port as USB001
could you assist with an example script for opening the network port name and sending to the printer?
please see my script currently setup for a network printer below
I had this done up yesterday, but then got yanked to go to to one of our sister plants.
I prefer looking up the printer by name, because somehow, somewhere, someone will add another printer and make it the default.
from javax.print import DocFlavor, SimpleDoc, PrintServiceLookup
from java.io import ByteArrayInputStream
# Get all available printers
printServices = PrintServiceLookup.lookupPrintServices(None, None)
# Initialize print service variable
printService = None
# Check for specific printer name
for service in printServices:
if service.name == 'Label Printer': # Replace with your own printer name.
printService = service
# Send message if the printer exists
if printService is not None:
fgPartNum = '4CJ9196WA65'
serialNum = 74889000
strMessage = '^XA^BY3,3,167^FT040,280,^B3N,N,,N,N^FDS{sn}^FS^FT0060,080^A0N,40,45^FDS{sn} {pn}^FS^PQ1,0,0,N^XZ'.format(sn=serialNum, pn=fgPartNum)
# Create an input stream
messageStream = ByteArrayInputStream(strMessage)
flavor = DocFlavor.INPUT_STREAM.AUTOSENSE
doc = SimpleDoc(messageStream, flavor, None)
job = printService.createPrintJob()
job.print(doc, None)
messageStream.close()
else:
print 'Printer Not Found'
This works perfect from the Script Console, as well as from a vision button action calling from the project library but it will not print when called from a tag change event, it will go into the printer queue but will Error and not fully process, will create the file but will not contain any text. I have tried putting all the code directly in the tag change event with the same result.
Tag value change in a new type tag UDT, tested through 1 insrance of the UDT, not in the client event script specifically. I set up the code to print each printer it finds in the wrapper log, inwhich in finds and prints all those configured.
If this is caused by not directly using the vision client script is there a way to incorporate the UDT tag change into the client script so I do not need to add every tag instance I create?
Nope. Gateway scope is gateway scope, while Vision client scope is Vision client scope.
You may be able to print to network printers from gateway scope, as long as they are actually configured for the gateway's service user. The gateway is not going to print to a Vision client's locally-attached printer.
Would it make a difference that im using Ignition Edge (Trial, latest version). Your comment on an IP printer made me think of that, Im not actually using an Ignition Server on some remote Server and a local vision client, will all be on the same local PC.
Was hoping that I could call a Project library script from the UDT.
The Print queue shows the Print Job as comming from SYSTEM, and the ignition server service is set to run as Local.
The down and dirty method may be to bind a vision client tag to the gateway tag (to avoid tryng to set up a printer for the gateway service to use) and trigger the script from the Client tag trigger a Vision Client Tag Event.
Got it working, was due to the Windows User Issue as mentioned, Changed the "Logged on As" account for the Ignition Service to use the same user account and password as the PC logon. Has been working fine and spinning out print jobs as fast as Ignition can supply. Thanks!