Writing Fingerprint to run on the PM and PX series, part 2

I mentioned in an earlier post that the Dir command (used to rotate images, text, and barcodes) works differently in the PM and PX series when applied to images. The PX series printer can only rotate an image by 180 degrees but the PM series can rotate images at 0, 90, 180, and 270 degrees. Here’s a label that prints an image using all four Dir parameters:

The way around this is to rotate your images (I like IRfanview) ahead of time and print all of your images at Dir 1 and both printer will behave the same.

While we’re on the subject of IRfanview, you can greatly reduce the size of your images by reducing them to 2 bits per pixel. Thermal and thermal transfer printers can only print in black or white, so anything beyond 2 bpp is a waste of space. For example, here’s an image that we had to use in a Fingerprint program:

At 16 bits per pixel this image used 2,718,478 bytes of storage. After conversion to 2 bits per pixel it was only 340,262 bytes, an almost 90% reduction in size with no loss of resolution.

 

Speeding up batch printing on an Intermec PM43

We recently wrote a Fingerprint application for a large snack food manufacturer. The application prompts the user for the item number they want to print and the number of labels. After printing a sample label for approval, the program prints the requested quantity. There are four different label formats, and the data for the label is retreived from a .CSV look up file.

We issue a “PRINT FEED” command for each label; the labels are serialized so each one is unique.

Here’s a video of the labels printing:   Video

Notice that the printer pauses after each label. On our next release we implemented the command “OPTIMIZE “BATCH” ON” with each of the label formats. According to the manual, this command means that “The program execution will not wait for the printing of the label to be completed, but proceeds executing next label image into the other of the two image buffers as soon as possible.”

The effect was to greatly speed up label printing: Video_1

Writing Fingerprint programs that run on the PM and PX series printers

I’m in the middle of a couple of these projects, so while the subject is fresh, I’ll note tips.

The PM series printer needs to have device names in lower case, and both the PX and PM series converts everything to upper case by default. The command to turn this off is SYSVAR(43)=1, so you can get the version of the printer and execute this command accordingly:

IF LEFT$(VERSION$(1),2) = “PM” THEN SYSVAR(43) = 1

The VERSION$(1) command returns the printer type: PM43, PX4, etc.

I’m converting a program that runs on a PX series to run on a PM. The users are used to pressing the “<” and “i” key to execute certain functions, but these keys are absent on the PM series. To get around this I copied the less than key image from the /usr/share/ui/images/fpapps folder on the PM43 and copied it into the /home/user/display folder and named it funckey_1.png. I then edited the image with Paint to create a custom “i” key and saved it as funkey_5.png.

Next, I executed the display key function if the printer was a PM series:

IF LEFT$(VERSION$(1),2) = “PM” THEN
DISPLAY KEY 1,1
DISPLAY KEY 5,5
DISPLAY KEY 2,0
DISPLAY KEY 3,0
DISPLAY KEY 4,0
END IF

When the code executes, the display looks like this:

The less that and I key map to the F1 and F5 keys, but the display is friendly for the user. Note that the DISPLAY KEY2,0 through 4,0 hides the F2, F3, and F4 keys from the screen.

As I mentioned earlier, the PM series needs device names in lower case, so UART1: becomes uart1: and CONSOLE: becomes console:

Make all of your file names upper case and specify the path to make them compatible with both printers, so it’s /c/MYFILE.TXT.

We use the sound command to put timed delays into our code; a typical command: SOUND 20000,100. This doesn’t work with the PM series, it’s sound command is limited to 4 digits, so use SOUND 0,100 instead, This will run on both printers.

Intermec published a nice document on migrating to the PM series, you can find it here.

If you have images to print on your labels be aware the the DIR command works differently in the PM and PX series. The PM can rotate images in all four directions, the PX only by 180 degrees. The best practice is to use DIR1 on all images on your label and rotate the images themselves with an editor(such as IRFAN) as needed so you images will print out the same on both printers.

 

One last item that has nothing to do with this subject, but it is a Fingerprint topic. I was doing a program on a PC43 series printer using small cryo labels .5 inches long. After the label printed the label gap came to rest directly over the label sensor and the printer returned an out of media status when I queried it with ?PRSTAT.  No start/stop or label length commands could fix this so I used a PRSTAT(8) command instead and waited on a “next label not found error”,  a 132 to get around this issue. Saved a project.

How to print barcode labels from your program

Sometimes you need to print labels from a program you are writing. Here’s a few tricks to make that job easier.

You can develop a label format in its native language of IPL, ZPL, Direct Protocol, etc (there’s a bunch of them) but an easier method is to use a design tool, which are available for free from printer manufacturers and capture its output.  For Intermec printers you can download Bartender UltraLite from the Honeywell web site here. You’ll need to sign up to get an account and you’ll have to use their download tool, which works with Windows 7 but not 10.

Next, download the appropriate printer driver for your target printer. You can get these from the same Honeywell site or from Seagull Scientific.

Once you have the software and driver installed, use Bartender to design your label:

Print your label to check that it looks the way you want and you can then print your template to disk for later inclusion into your code.

Find the printer driver and open the Printer Properties page. Click on the Port Tab and change the Port to “File”:

Now print your label from Bartender again. A dialog box will pop up asking you for a file name and location to save the output. Once this is done you can open the file with a text editor and look at the data. The label above created this output file:

<xpml><page quantity=’0′ pitch=’50.8 mm’></xpml>’Seagull:2.1:DP
INPUT OFF
VERBOFF
INPUT ON
SYSVAR(48) = 0
ERROR 15,”FONT NOT FOUND”
ERROR 18,”DISK FULL”
ERROR 26,”PARAMETER TOO LARGE”
ERROR 27,”PARAMETER TOO SMALL”
ERROR 37,”CUTTER DEVICE NOT FOUND”
ERROR 1003,”FIELD OUT OF LABEL”
SYSVAR(35)=0
OPEN “tmp:setup.sys” FOR OUTPUT AS #1
PRINT#1,”MEDIA,MEDIA SIZE,XSTART,0″
PRINT#1,”PRINT DEFS,PRINT SPEED,200″
CLOSE #1
SETUP “tmp:setup.sys”
KILL “tmp:setup.sys”
CLIP ON
CLIP BARCODE ON
LBLCOND 3,0
<xpml></page></xpml><xpml><page quantity=’1′ pitch=’50.8 mm’></xpml>CLL
OPTIMIZE “BATCH” ON
PP373,698:AN7
BARSET “CODE128C”,2,1,6,203
PB “12345678”
PP474,495:NASC 1252
FT “Dutch 801 Roman BT”
FONTSIZE 12
FONTSLANT 0
PT “12345678”
PP325,297:PT “Sample Text”
LAYOUT RUN “”
PF
PRINT KEY OFF
<xpml></page></xpml><xpml><end/></xpml>

You can get rid of of the overhead and just keep the portion that actually prints the label:

PP373,698:AN7
BARSET “CODE128C”,2,1,6,203
PB “12345678”
PP474,495:NASC 1252
FT “Dutch 801 Roman BT”
FONTSIZE 12
FONTSLANT 0
PT “12345678”
PP325,297:PT “Sample Text”
PF

You can replace the two fixed text fields “12345678” and “Sample Text” with variable names and include it in your code.

You can test print the small file above by making an FTP connection from a command line to the printer and use PUT to sendthe label format to location PR1. As an example:

One label printer after the PUT command. Hope this helps.

How to connect an Intermec printer to a PLC

One thing I can say with confidence about Intermec printers is that they are the most versatile on the market. Intermec printers can run user developed programs and they have a wide variety of add on options.

I recently did a job for a medical manufacturer who wanted to control label printing from a Programmable Logic Controller (PLC).  They use Bartender to send the label data and needed the printer to print one label each time the PLC fires a relay.

Intermec offers an industrial I/O board for their PX and PM series of printers (1-971143-800 and 270-192-001, respectively) that have 8 sense inputs, 8 optocoupler out ports, and 4 relay ports. The manual is here.

I used a Fingerprint program and an I/O board to connect their PX6 printers to a PLC.

When the program starts it turns on a relay that is used as a “ready” signal to the PLC indicating that it’s ready for a new job.

A fingerprint program then receives label data from Bartender on the Centronics port, filters out unneeded data and writes the label to disk.  The program then turns the  “ready” relay off, indicating that to the PLC that a job is running.

If an error occurs (out of labels, ribbons, etc.) another relay is closed to flag the PLC of the error condition and the specific error is displayed by the printer for the user’s intervention.

The program monitors one of the sense input ports and prints one label when it detects voltage on that pair (10V to 40V). The setup during testing looked like this:

The industrial I/O board uses a 44 pin high density connector for the inputs and relay pairs. We used the red pair of wires and a 24 volt power supply to simulate the PLC output, the black pair was “ready”,  and the white pair was the error indicator. I used a serial port to connect to Bartender because I didn’t have a Centronics port available. We could have used any port, Ethernet, USB, serial, or parallel to receive the label data from Bartender.

 

What’s the warranty on Honeywell barcode equipment?

It’s not so easy to find, but the official list is here.

In general, with few exceptions:

Hand held computers: 1 year

Tethered scanners: 5 years

Battery operated scanner: 3 years

Presentation and hands free scanners: 2 years

Printers: 1 year

Printheads: One year or one million lineal inches, whichever comes first (note that you get free printhead replacements if you use Honeywell media)

Vehicle mount computer: 1 year

Accessories: 90 days

Fixing a print issue with Fingerprint programming

A large pharmaceutical company is using an ancient lab system that prints cryo labels for test tubes. They replaced Intermec 3400 printers that were almost 20 years old with new PC43T printers. The PC43T runs IPL (Intermec Print Language) and should have been a plug and play replacement. Unfortunately, some of the barcodes that printed on the 3400 no longer printed on the PC43T. The problem was caused by the different designs of the two printers. The PC43T’s labels are centered in the printer instead of all the way to the left (as you are facing the printer) on the 3400. Without getting into too much detail, their label format had to be modified to use the PC43T, but due to the age of the system this turned out to be impossible. The labels are .5 by 1.25 inches:

These are Code 128 barcodes printed with a 5 mil X (narrow bar) dimension.

We wrote a Fingerprint program that ran in the PC43T that intercepted data coming from the host, reformatted it into Direct Protocol (which has a center justify feature) and printed the label. Problem solved.

 

Thermal barcode printer resolution

Thermal and thermal transfer printers use a printhead made up of individual dots that heat up to melt ribbon onto a label (thermal transfer) or darken some heat sensitive media (direct thermal). In either case you’ll need to determine the best printhead resolution for your application.

Printhead resolutions are specified in dots per inch, (dpi) and are nominally 200, 300, 400, or 600 dpi. The individual dot size for these are 5 mil (.005 inch), 3.3 mil, 2.5 mil, and 1.6 mil. Of course, a printer can’t print anything smaller than its dot size. Printheads are usually 4 inches wide, but you can also get them in 2, 6, and 8 inch widths.

Which resolution should you use? That depends on what you are printing.

If you’re printing shipping labels for UPS or Fed Ex and all you need is a legible address and bar codes that the shipping companies can scan, 200 dpi is the choice. Replacement printheads are cheaper and print speeds are higher at 200 dpi.

A few years ago the only way to print more data into a bar code in a small space was to print narrower bars. Not many applications used narrow bars (called the X dimension of a code) smaller than 5 mils. Today you would use a 2D code like Datamatrix to fit more data in a small space, making printhead resolution less important when printing small labels.

The real reason to use a higher resolution printhead is when you need to print a logo or small text; marketing people are very fussy about logos and the look of their finished goods labels. Here’s the same logo printed at 200 and 400 dpi. You’ll see that the 200 dpi suffers from jagged edges when printing curves or angled lines.

The effect of resolution is a lot more apparent when printing small images and text. Labels in the medical industry often require small images and warnings or instructions in multiple languages. It’s common to prepare these in Photoshop and save them as a bit map image to avoid the complexity of printing multiple languages on the thermal printer. Here are two examples, again at 200 and 400 dpi:

This image is blown up slightly, but the 200 dpi printing is unacceptable, the 400 is legible.

 

 

Why you should only use printers with displays

The Honeywell PM and PC series of printers are available with color displays. You can also order these without displays to save some money and use the LEDs/icons instead.

We don’t sell these printers without displays. The display gives you immediate access to the configuration menus, wizards, and error messages that make support work far easier.  Here’s a display and icon printer that have run out of labels:

Notice that there is a Wizard button under the message on the display unit. Pressing this will show a user how to install labels in a series of step by step pictures.

Printers are normally assigned a static IP address, or a reserved IP address via DHCP. But, when you first connect a printer to the network, how do you know the IP address that it has been assigned? This is easy with a display, it can be shown on screen. With an icon printer you have to first set up the media type, then calibrate the printer, wait two minutes and press and hold the feed key for three seconds. Test labels will print that show the current IP address of the printer, as long as the labels are the correct size and the IP doesn’t print off the side of the label or on the gap in between labels. Or you can make a static ARP entry using the printer’s MAC address on your PC, browse to the printer and set up a static IP, but that’s beyond most users.

There are some features that are only available with printers with displays. One of my favorites is the print quality wizard. The two things that determine the print quality of thermal printers are speed and heat. In general, slower printing yields better quality, and the heat applied by the printhead needs to be matched to the speed and materials used. There are three types of ribbons (wax, wax/resin, resin) and many types of label materials. Getting the right settings can be challenging.
The print quality wizard first asks you for the print speed (go slow!) and then prints five different labels using different media sensitivity settings. It then asks you to pick the best of the five and then prints three more labels at different darkness setting and again asks you to pick the best one. This is usually sufficient to dial in the settings properly, but you can manually change the print contrast for additional control, if needed.

These printer are also programmable, and having a display makes software a whole lot more user friendly.

If you are worried about user’s getting into the menu system and messing up your settings you can control access to the menu system through the menu system or the printer’s; web interface:

PC series printer web interface

You can disable access to the menu system, or enable it with a required PIN number to log in.

The difference in price between a PC43 with a display and one without is less than $69, well worth it. The same advice applies to the PM43 series.

One more tip on buying a PC43 printer: if you want a LAN connection for your printer, order it separately and install it yourself. If you order a PC43 with Ethernet already installed it is $131.20 (at our discounted price) more expensive, and the adapter ordered separately is $104. Installation of the adapter is very easy. All you need is a small Philips screwdriver and it won’t take more than a couple of minutes to install.