# Label Printing from ignition using Videojet 9550 with Zpl over TCP/IP

**URL:** <https://forum.inductiveautomation.com/t/label-printing-from-ignition-using-videojet-9550-with-zpl-over-tcp-ip/87230>\
**Category:** Ignition\
**Created:** [March 12, 2024, 11:17pm UTC](https://forum.inductiveautomation.com/t/label-printing-from-ignition-using-videojet-9550-with-zpl-over-tcp-ip/87230 "2024-03-12T23:17:06Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![ukamani](https://avatars.discourse-cdn.com/v4/letter/u/d9b06d/32.png) [@ukamani](https://forum.inductiveautomation.com/u/ukamani)\
**Post date:** [March 12, 2024, 11:17pm UTC](https://forum.inductiveautomation.com/t/label-printing-from-ignition-using-videojet-9550-with-zpl-over-tcp-ip/87230/1 "2024-03-12T23:17:06Z")

</div>

Hi everyone,  
I want help with printing labels from ignition using Videojet 9550 with Zpl over TCP/IP.  
If anyone has worked with Videojet printers before within ignition, can you please provide me with a step by step guide. I've tried a lot of things that I found on this forum, but to no avail. I'm not sure if I'm missing a step here. Please help!  
Some of the solutions that I've tried are below:

> [@Printing barcode to Zebra printer](https://forum.inductiveautomation.com/t/printing-barcode-to-zebra-printer/8957/11):
>
> Finally made it back to my desk. Here’s a chopped down version of what I use. from java.net import Socket from java.io import DataOutputStream partnum = 'ABCBEFGH' serialNum = '12345678' strMessage100 = "^XA" strMessage110 = "^BY3,3,60^FT065,120,^BCN,N,N,N,N^FDP%s^FS" % partNum strMessage111 = "^FT170,040^A0N,40,45^FD%s^FS" % partNum strMessage112 = "^FT065,260,^BCN,N,N,N,N^FDS%s^FS" % serialNum strMessage113 = "^FT170,170^A0N,40,45^FD%s^FS" % serialNum strMessage199 = "^PQ1,0,1,Y^XZ" strO…

> [@ASCII commands to printer via printjob?](https://forum.inductiveautomation.com/t/ascii-commands-to-printer-via-printjob/5482/7):
>
> I print to Zebras as well as several other printers. In the case where it is a serial printer, I just use an ethernet-serial converter so my code is the same. To do this, I don’t use any built-in Ignition functions. There very well could be a function that would work fine, but my personal preference is to create my own in Python. To each his own. For one printer that uses a serial converter, I use UDP. The following code works nicely: import socket import system udpSocket=socket.socket(socket…

I've also tried adding the labeler as a TCP driver under OPC devices and tried to write the ZPL code to its "message" tag.

On the labeler side, I used their configuration software called "Clarity Config" and worked with their tech support to properly configure it to receive Zpl code.

I'm not sure what's missing here, so any help would be appreciated!

---

<div class="post-metadata">

**Author:** ![JordanCClark](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jordancclark/32/83362_2.png) [@JordanCClark](https://forum.inductiveautomation.com/u/JordanCClark)\
**Post date:** [March 12, 2024, 11:18pm UTC](https://forum.inductiveautomation.com/t/label-printing-from-ignition-using-videojet-9550-with-zpl-over-tcp-ip/87230/2 "2024-03-12T23:18:46Z")

</div>

I took a quick look at the manual. What is the ZPL emulation settings?

---

<div class="post-metadata">

**Author:** ![ukamani](https://avatars.discourse-cdn.com/v4/letter/u/d9b06d/32.png) [@ukamani](https://forum.inductiveautomation.com/u/ukamani)\
**Post date:** [March 13, 2024, 3:08pm UTC](https://forum.inductiveautomation.com/t/label-printing-from-ignition-using-videojet-9550-with-zpl-over-tcp-ip/87230/3 "2024-03-13T15:08:28Z")

</div>

This is the ZPL Emulation setting:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/4/f/4fa9b44c34931ce0400120210c21639395cb6766.png)

Apart from that I've set Remote Access to "Yes", and Print Mode to "Select only (don't use database)"

---

<div class="post-metadata">

**Author:** ![JordanCClark](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jordancclark/32/83362_2.png) [@JordanCClark](https://forum.inductiveautomation.com/u/JordanCClark)\
**Post date:** [March 13, 2024, 4:36pm UTC](https://forum.inductiveautomation.com/t/label-printing-from-ignition-using-videojet-9550-with-zpl-over-tcp-ip/87230/4 "2024-03-13T16:36:31Z")

</div>

If you're using the example I posted, try removing the try/except portions and see if it generates an error.

---

<div class="post-metadata">

**Author:** ![ukamani](https://avatars.discourse-cdn.com/v4/letter/u/d9b06d/32.png) [@ukamani](https://forum.inductiveautomation.com/u/ukamani)\
**Post date:** [March 13, 2024, 7:46pm UTC](https://forum.inductiveautomation.com/t/label-printing-from-ignition-using-videojet-9550-with-zpl-over-tcp-ip/87230/5 "2024-03-13T19:46:32Z")

</div>

Thanks @JordanCClark ,will do. Meanwhile, I downloaded drivers for the videojet 9550 printer and added the labeler as if it were a regular printer on my laptop. Then I tried printing test pages from windows, but its not printing anything. So I think that could be the issue. Running some more tests, will update you soon.

---

<div class="post-metadata">

**Author:** ![ukamani](https://avatars.discourse-cdn.com/v4/letter/u/d9b06d/32.png) [@ukamani](https://forum.inductiveautomation.com/u/ukamani)\
**Post date:** [March 13, 2024, 7:52pm UTC](https://forum.inductiveautomation.com/t/label-printing-from-ignition-using-videojet-9550-with-zpl-over-tcp-ip/87230/6 "2024-03-13T19:52:06Z")

</div>

Another question. I saw this post here where it says you can print to Zebra using HTTPS:

> [@Send ZPL command to Zebra 170PAX4 via TCP/IP Socket](https://forum.inductiveautomation.com/t/send-zpl-command-to-zebra-170pax4-via-tcp-ip-socket/6003/10):
>
> Please note that there is a much simpler way to communicate with Zebra nowadays using HTTP. [https://km.zebra.com/kb/index?page=content&id=WH133&actp=LIST](https://km.zebra.com/kb/index?page=content&id=WH133&actp=LIST)

Do you think the same will work for Videojet?Maybe a code like so:

```auto
#assuming i have the printerIP and zpl code
# Create an Http Client Object
client = system.net.httpClient()
# Send the command
response = client.post('http://%s:9100/pstprnt' %printerIP, data=zpl)
statusCode = response.getStatusCode()

```

---

<div class="post-metadata">

**Author:** ![Bushmatic](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bushmatic/32/87014_2.png) [@Bushmatic](https://forum.inductiveautomation.com/u/Bushmatic)\
**Post date:** [March 13, 2024, 9:03pm UTC](https://forum.inductiveautomation.com/t/label-printing-from-ignition-using-videojet-9550-with-zpl-over-tcp-ip/87230/7 "2024-03-13T21:03:26Z")

</div>

Assuming you have printer IP and ZPL code, try this. You may have to try different socket parameters depending on your system. This is probably not correct based on your original requirements but could work?

```auto
import socket
printerName = # (printer IP or name goes here)
label = # (ZPL code goes here)
labelBytes = bytes(label)
mySocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
port = 9100
mySocket.connect((printerName,port))
mySocket.send(labelBytes)
mySocket.close()

```

---

<div class="post-metadata">

**Author:** ![ukamani](https://avatars.discourse-cdn.com/v4/letter/u/d9b06d/32.png) [@ukamani](https://forum.inductiveautomation.com/u/ukamani)\
**Post date:** [March 18, 2024, 7:27pm UTC](https://forum.inductiveautomation.com/t/label-printing-from-ignition-using-videojet-9550-with-zpl-over-tcp-ip/87230/8 "2024-03-18T19:27:12Z")

</div>

Hi Bushmatic,  
Apologies for the late response. I tried your code and unfortunately it hasn't worked. I've reached out to videojet's tech support to request further assistance.

---

<div class="post-metadata">

**Author:** ![ik808520](https://avatars.discourse-cdn.com/v4/letter/i/958977/32.png) [@ik808520](https://forum.inductiveautomation.com/u/ik808520)\
**Post date:** [November 2, 2025, 5:27pm UTC](https://forum.inductiveautomation.com/t/label-printing-from-ignition-using-videojet-9550-with-zpl-over-tcp-ip/87230/9 "2025-11-02T17:27:28Z")

</div>

Hello, Ukamani,  
Could you please tell me if you were able to print a label from C#? My job seems to be sending, but the output is blank. I've attached the settings and code.

 ![ZPL](https://us1.discourse-cdn.com/inductiveautomation/original/3X/b/e/beaaf6b9245037f31aab8b476e4a925d4bba82a2.png)

> ```python
> using System;
> using System.IO;
> using System.Net.Sockets;
> using System.Text;
> 
> class Program
> {
> static void Main(string
> args)
> {
> string printerIp = "10.118.4.200"; // Replace with your printer's IP address
> int port = 9100; //3001
> 
> // Example ZPL code to print a simple label
> string zplCode =
> "^XA^FO10,10^A0N,100,100^FDhello World^FS^XZ"; // End Format
> 
> try
> {
> SendZplToPrinter(printerIp, port, zplCode);
> Console.WriteLine("ZPL code sent successfully!");
> }
> catch (Exception ex)
> {
> Console.WriteLine($"An error occurred: {ex.Message}");
> }
> 
> Console.ReadKey();
> }
> 
> static void SendZplToPrinter(string ipAddress, int port, string zplData)
> {
> using (TcpClient client = new TcpClient())
> {
> // Connect to the printer
> client.Connect(ipAddress, port);
> 
> // Get a stream for writing data
> using (NetworkStream stream = client.GetStream())
> {
> // Convert the ZPL string to bytes
> byte[] bytes = Encoding.ASCII.GetBytes(zplData);
> 
> // Send the bytes to the printer
> stream.Write(bytes, 0, bytes.Length);
> }
> }
> }
> 
> }
> 
> ```

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [November 2, 2025, 5:38pm UTC](https://forum.inductiveautomation.com/t/label-printing-from-ignition-using-videojet-9550-with-zpl-over-tcp-ip/87230/10 "2025-11-02T17:38:16Z")

</div>

> [@ik808520](#):
>
> from C#?

There's no C# in Ignition. Wrong website?

---

<div class="post-metadata">

**Author:** ![David\_Stone](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/david_stone/32/79749_2.png) [@David\_Stone](https://forum.inductiveautomation.com/u/David_Stone)\
**Post date:** [November 2, 2025, 8:05pm UTC](https://forum.inductiveautomation.com/t/label-printing-from-ignition-using-videojet-9550-with-zpl-over-tcp-ip/87230/11 "2025-11-02T20:05:36Z")

</div>

Is FT Optix leaking?

---

<div class="post-metadata">

**Author:** ![lwood](https://avatars.discourse-cdn.com/v4/letter/l/977dab/32.png) [@lwood](https://forum.inductiveautomation.com/u/lwood)\
**Post date:** [January 21, 2026, 1:22pm UTC](https://forum.inductiveautomation.com/t/label-printing-from-ignition-using-videojet-9550-with-zpl-over-tcp-ip/87230/12 "2026-01-21T13:22:42Z")

</div>

I’m setting up a videojet 9560 right now, I’m able to send the print job but the actual printing signal seems to be separate. So it just sits there waiting for a sensor command. Anyone know if there is a setting on the videojet for print when getting a job? Or if it is something I need to add to my socket commands.

```python
def send_to_print(zpl,ip,port=6101):
	from java.net import Socket
	from java.io import DataOutputStream
	try:
		# Open Socket Connection
		clientSocket=Socket(ip,port)
		#Open data output stream
		outToPrinter=DataOutputStream(clientSocket.getOutputStream())
		#Send Data to Printer
		outToPrinter.write(zpl)
		#close data stream and socket
		outToPrinter.close();
		clientSocket.close();
		return "Done"
	except IOError as e:
	    return ("Sending to Printer IOError: %s" % e)
	except:
		return 'Error Sending to Printer'

```

---

<div class="post-metadata">

**Author:** ![ukamani](https://avatars.discourse-cdn.com/v4/letter/u/d9b06d/32.png) [@ukamani](https://forum.inductiveautomation.com/u/ukamani)\
**Post date:** [January 21, 2026, 5:53pm UTC](https://forum.inductiveautomation.com/t/label-printing-from-ignition-using-videojet-9550-with-zpl-over-tcp-ip/87230/13 "2026-01-21T17:53:30Z")

</div>

In our case, we used PLC to send the print+apply command like so:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/a/5/a5d05ba1a653631ca71048f8da9393453056024e.png)  
 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/0/3/034ffdfec9596427552641212e1639209ec27ce0.png)

If you want to take the same route, reach out to Videojet’s tech support for documentation on IO Interface for 9560.  
Here’s some general questions I asked them, maybe it helps you or someone reading this post in the future:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/2/0/20d1ac266250e21aeca22b451e96c40647efb477.png)

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/2/4/2485495a2db36da3622aaf27ac13aa77332b4bc1.png)

In any case, you should reach out to Videojets tech support team. They are an awesome bunch; responsive and knowledgeable.  
Good luck.

---

<div class="post-metadata">

**Author:** ![lwood](https://avatars.discourse-cdn.com/v4/letter/l/977dab/32.png) [@lwood](https://forum.inductiveautomation.com/u/lwood)\
**Post date:** [January 30, 2026, 2:34pm UTC](https://forum.inductiveautomation.com/t/label-printing-from-ignition-using-videojet-9550-with-zpl-over-tcp-ip/87230/14 "2026-01-30T14:34:27Z")

</div>

Thanks! I did end up adding it to the PLC, using the EDS/Routine they supplied we figured out we send the Command tag a 14 it prints then send it a 15 to clear.
