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

2D Codes vs Stacked Linear Codes

Here are two barcode symbols that both encode the string “12345678”:

Which of these codes is a 2D code? The one on the right is Datamatrix code, a true two dimensional code. The one on the left is PDF417, a stacked linear code; it looks like a two dimensional barcode, but it isn’t.

2D codes store data in both the X and Y coordinates. Linear codes only contain data in one dimension. This is easy to see in a normal linear code.

It doesn’t matter where the scanner goes across the code, data is only encoded in the widths of the bars and spaces. Datamatrix characters are encoded in a matrix of 5 by 5 cells and have to be read by a camera.

Stacked linear codes are really a bunch of small linear barcodes stacked on top of one another. Each row has a row indicator or number, so a 1D scanner such as a laser is capable of reading these codes by sweeping across the code while the decoder keeps track of the row numbers and puts together the final output. Check the specs of your scanner, not all 1D scanners will read PDF417 symbols.

Other stacked symbologies besides PDF417 are Code 49, Code 16K,  and
GS1 Databar Stacked.

Note the size difference between the PDF417 and the Datamatrix symbol above. Not many new  applications use PDF417 because of the size and density advantage of Datamatrix.

Other 2D codes are Maxi Code, Aztec Code, and the ubiquitous QR Code.

 

Sherman, Set the Wayback machine to 1967

Sherman– 1967 Please.

This KarTrak railroad label is probably one of the oldest items in our collection.  The labels were hand-made by attaching strips of red, white and blue reflective material to a piece of 14 gauge sheet steel.  They were all 10 digits long.  Four digits identified the railroad and six identified the car. Each tag cost about $15 to make.

Our Kartrak Tag

The Automatic Car Identification (ACI) system was originally developed by GTE in 1961 and implemented by Dave Collins in 1967.  Dave later went on to form Computer Identics Corp. in Westwood and Canton, MA.

Original 1967 Ad for the Rail Scanning System.

The labels were read by moving beam scanners that were activated by a wheel sensor as the car moved by.  The scanner was mounted along the side of the track in a large metal NEMA enclosure with a hooded window.  It used a Xenon bulb and a four-sided spinning mirror along with a camera-like lens to read the tags.  The decoder used some circuitry to decode the red, white and blue channels from the signal that was reflected back from the tag.  If I remember correctly, the last time I saw one of these a PDP-11 series mini-computer ran the software system for the scanner.

The major problem with the system was dirt. When the labels got dirty they did not read well. The railroads would not clean them and this caused the system to be discontinued in 1974.

The last time I can recall these systems being used or seeing a label in public was in the Washington DC Metro system in the mid 1980’s. Computer Identics Corp. was still maintaining them at this time.

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.

 

My favorite scanner – Part 2

I’ve written about the center decode feature in the Intermec EA30 scan engine (see part 1 below) but there are a few other features I’d like to bring to your attention.

Presentation Mode:  Sometimes scanners are used with desktop holders to let a user pass a barcode underneath it and scan hands free. Think of a library check out, a convenience store cash register, or a club scanning ID cards.

Laser scanners typically pulse their laser on and off when they are in presentation mode (which drives me nuts) in order to detect the presence of a barcode.  2D Camera based scanners have an advantage of being omnidirectional and they will have some illumination on to detect a code.

The EA30 does presentation mode right. The scanner uses ambient light to detect a bar code, so no distracting lights come out of the scanner when it’s idle.

The EA30 scanner can be set up to scan more than one barcode at a time.  Take a look at EasySet under Symbologies, and you’ll see the Multicode set up:

You can specify the number and type of codes to scan and because of the way the software scans the image, it’s works as quickly as if you were scanning a single code. Other scanners can read multiple barcodes, but you have to move the scanner around to pick up all of the codes. The EA30 works better than this; the software scans the image so you don’t have to move the scanner. Try it out.

The last feature I’ll mention is the ability to scan both UPC-A symbols and UPC symbols with supplemental codes with one configuration:

Reading both UPC and with one set up is difficult because the large portion of the UPC with supplemental code is a valid UPC-A symbol. The scanner must reliably detect the presence of the supplemental and read it. If you want to test this, use these setting from EasySet:

Consecutive validations = 2
Center decode = on
Supplemental = Transmit if found
Add on security = 100
Imager decode mode = 2D
Initial 1D search = Full

You’ll find these settings in the Symbology section, the Imager Settings, and the Operating Section.

 

 

 

Running Windows Mobile Device Center under Windows 10

In my previous post I said that Microsoft broke Windows Mobile Device Center is Windows 10. This is true, but there is somewhat of a workaround.

First off, if you use WMDC regularly and you’re using Windows 10, make your life easier and run Win 7 in a virtual machine and use it there.

I saw this tip on getting WMDC running on Win 10 at a Microsoft tech support site.

Click on Start, then type “Services” and launch the services application. Scroll down to the “Window Mobile-2003 based device connectivity” service:

Double click on this and click on the “Log On“ tab at the top of the screen.

Click on the “Local System account” button and turn on the “Allow service to interact with desktop” check box. Apply these setting and go back to the “General” tab and make sure the service is running, then exit the application.

Now click on Start, type in “Mobile Device Manager”, right click on the app and pin it to your task bar. Click on the round green icon in the task bar and WMDC should start.

Put your reader into a dock that’s connected to your PC with a USB cable; you should hear the connection sound. If you hear a loud beep and get a synchronization error, WMDC has crashed. Remove the reader from the dock and restart WMDC. If it doesn’t start, check the log on options in the services app again.

If you do hear the connection sound but WMDC shows “Not Connected”, double click on My PC and you should see your reader in the Devices and drives section:

If you double click on the device you’ll see its file system and you’ll be able to copy files to and from it with Windows File Manager.

It’s not perfect solution, but if you have some quick copying to do, it may help.

How to copy files to a CN70 or CK70 computer

This post covers copying files to the Intermec/Honeywell CN and CK series computer with Windows Embedded Handheld 6.5, it doesn’t cover the new Android computers.

Connecting a dock to your computer with a USB cable and using Windows Mobile Device Center is very  easy, but Microsoft broke this in Windows 10. WMDC works fine under Windows 7 and is your best choice if you are running this OS. There are some tips on the internet about running WMDC in compatibility mode under Win 10, but they didn’t work for me.

Another easy option is to put your files on a USB stick and then plug the stick into the USB A connector on the side of a single docking station for your CN/CK computer.  Once inserted click on Start, File Explorer, My Device and you should see the USB key in the pull down menu show up as “Hard Disk”:

You can copy files to the computer over your wireless network too. There’s an FTP server program available on these devices, but it’s a hidden file. Click on Start, File Explorer, then scroll down to the Windows folder. Click on the Menu button on the bottom of the screen and click on “Show All Files”. Now scroll down this folder listing and look for the file “ftpdce”.  Press the stylus on this filename and hold it for a couple of seconds until the menu pops up and select “copy”.  Scroll back to the top of the Windows folder and click on the Start Up folder. Press the stylus on some white space and hold if for a couple of seconds. When the menu pops up select “Past Shortcut”. Now the FTP server will start when window boots.

Press the power key and choose the Reboot option.

I use FileZilla as an FTP client, but feel free to try your own; I had no luck using FTP within a browser. Find the IP address of your your computer by clicking on Start then ISpyWiFi. Keythis IP number into FileZilla and log in with the user name “intermec” and a password of “cr52401” and you should see this screen:

Other options are Intermec’s Smart Systems (free, big install) or Soti’s Mobi Control (licensed, reliable, if you have a lot of devices).

Good luck, email any questions to info@accuratedata.com.