IBM 4610

The IBM 4610, also known as SureMark, is a thermal point-of-sale printer, originally developed and manufactured by IBM and currently offered by Toshiba Global Commerce Solutions, launched in 1996. It is used by major retailers such as Wal-Mart (in most countries, most notably United States and Mexico), Carrefour, Costco, Cencosud, Office Depot, Tesco, Best Buy, Chedraui, King Soopers (and Kroger affiliates), London Drugs and Soriana (Mainly formerly Gigante stores). It had replaced the famous IBM Printer Model 4. With the acquisition of IBM's Retail Store Solutions (RSS) business, the SureMark printers are now produced by Toshiba Global Commerce Solutions.

IBM SureMark printer

All printers feature a thermal printing unit for printing receipts onto thermal paper. Some models also feature an Impact printer optionally equipped with a MICR-Reader for cheque processing. The printers closely integrate into the IBM SurePOS point-of-sale systems using their 4690 Operating System, both in software (via means of an API) and hardware (certain models fit into the point-of-sale system). The printers usually feature a connector to control one or two solenoids in cash register drawers.

Model overview

Over the years, IBM released a set of different printers. Usually, the same model is available in two colors to match the color of the point-of-sale system they were released with, but can be operated independently. All TG-models are functionally equivalent to the TI-models with the same number and TF-models match TM-models. TG- and TF—models feature "iron gray" covers, while TI- and TM-models are "pearl white".

Features common to all models are:

  • 256KB flash memory, used to store custom messages, logos, code pages and journal data.
  • Barcode generation
  • Ability to download custom fonts and codepages
  • Proportional and scalable fonts
  • Upside-down printing
  • Updatable microcode
  • 85mm paper roll (90mm roll for models TG6 / TM6)

Printers commonly use RS-232 and RS-485 interfaces, later models added a USB or Ethernet connection. Except for TF6 / TM6, the printers feature a replaceable interface card at the bottom. This card is used for both power and data and can be replaced to offer different interfaces.

ModelThermal printerImpact printerMICR-ReaderCheque flipperDocument scannerIntroducedReplaced byOther features
TI1 / TG1YesYesNoNoNo1996TI3 / TG3No Euro symbol
TI2 / TG2YesYesYesYesNoTI4 / TG4No Euro symbol
TI3 / TG3YesYesNoNoNo
TN3YesYesNoNoNo[1] Three-station model that includes integrated paper journaling
TN4YesYesYesYesNoSame as TN3 with additional checkque handling
TI4 / TG4YesYesYesYesNo
TI5 / TG5YesYesNoNoNo1999[2] Like TI3 / TG3 but for the Chinese market, featuring DBCS character support. Additional 16MB flash for DBCS characters.
TI8 / TG8YesYesYesYesYesTI9 / TG9Powered flipper, freely manageable flash storage
TI9 / TG9YesYesYesYesYesPowered flipper, freely manageable flash storage, compliance with Check 21 legislation
TF6 / TM6YesNoNoNoNo[3] Audible alarm (Beeper), wall mountable, spill resistant, optional additional spill cover, optional external paper roll, power switch
TF7 / TM7YesNoNoNoNo[4] Like TF6 / TM6 but for the Chinese market, featuring DBCS character support. Additional 16MB flash for DBCS characters.

Additionally, there are models with a D instead of a T. This denotes a different warranty service ("Depot repair" instead of "IOR 24x7").

Some models, especially those that IBM marks for "fiscal use" feature paper journaling in addition to electronic journaling (optionally with CompactFlash-cards) or an RS-232 auditing port.[5] These models include: KR3 / KD3, KR5 / KD5, KC4, KC5, FV5, GR3 / GB3 / GE3, GR5 / GB5. Some of these models have a power supply integrated.

Interface

Printers attached using RS-485 are supplied with 35V from the data cable. When using RS-232 or USB (depending on model and interface card), a separate 24V connected is used, either using a PoweredUSB-connection cable plugged into the point-of-sale system or using an external power brick. Note that the PoweredUSB-Cable does not transmit data and is used for power only.

Interface speeds are as follows:

  • RS-232: 9600 and 19200 bit/s, 115200 bit/s for Tx8 and Tx9
  • RS-485: 185.5 kbit/s
  • USB: up to 12 Mbit/s

IBM provides extensive documentation[6] Users guide for a large range of 4610 printers including programming information (Retrieved: 2018-01-06 16:31+00)

for interfacing with the printer family programatically. Generally, when connecting the printer via RS-232 or RS-485, the commands are sent in binary along with the text. It is therefor possible to use the printers in different applications.

Interface Examples

The following examples assume a Linux-computer with the printer connected via a USB to serial adapter known to the system as /dev/ttyUSB0 with the port configured for the desired baud rate.

Printing text on the thermal printer is as easy as writing to the device:

$ echo "Hello World" > /dev/ttyUSB0

Commands are sent as binary. This will cause the paper in the thermal printer to be cut:

$ echo -e -n "\x0c" > /dev/ttyUSB0

Printer status

The printer responds with a status message to certain commands. The status message consists of two bytes denoting the length of the message including these two bytes. All status messages consist of at least 8 bytes of general status and error information as well as microcode version. If, for example, bit 8 in byte e of the status message is set, the printer reports that its buffer has less than 1k characters left to make the controlling system aware that it should slow down or discard the buffer.

A set of bits is used to denote if the message is an answer to an inquiry command such as "Request printer ID". If that is the case the printer appends a command-specific amount of extra information to the end of the status message. The reported size of the message that is encoded in the first two bytes of the printers response is higher, accordingly. The following python-script requests the printer ID in order to identify the printer type and capabilities in use:

import serial
import struct

# select, configure and open the serial interface
with serial.Serial('/dev/ttyUSB0', 19200, timeout=5) as ser:
    # tell the printer to respond with its ID information
    ser.write(b'\x1d\x49\x01')

    # read the first two bytes of the response
    message_length_data = ser.read(2)
    # convert the data to an integer
    message_length = struct.unpack('>H', message_length_data)[0]

    print('Message length: {}'.format(message_length))

    # read the entire response. keep in mind that the first two bytes have already been read
    raw_data = ser.read(message_length - 2)

    # Because the two bytes denoting the length have been read earlier, the response is two bytes shorter
    # than the length of the message. The first byte of the actual status response is therefor is 1 and the highest is 13
    # The status bytes are being pushed into a python list [] object which start its indexing at 0 so 1 must be subtracted
    # from they byte number reference in the user guide and in the comments.
    # 
    # Check if the message is indeed a response to a printer ID request:
    if raw_data[4] & (1 << 0) != 0: 
        # byte 9 gives a rough indication of the printer type:
        if raw_data[8] == 0x30:
            print('Type: non-Tx8/Tx9 model, or Tx8/Tx9 in TI4 emulation mode')
        elif raw_data[8] == 0x31:
            print('Type: Tx8 or Tx9 model')

        # byte 10 indicates the model more closely and distinguishes between features regarding to memory options:
        if raw_data[9] == 0x00:
            print('Device ID: Models TI1 and TI2 (impact DI/thermal CR)')
        elif raw_data[9] == 0x01:
            print('Device ID: Models TI3, TI4, TI8, TI9, TG3, and TG4 (high speed; impact DI/thermal CR)')
        elif raw_data[9] == 0x02:
            print('Device ID: Models TI3, TI4, TG3, and TG4 with the 2MB option')
        elif raw_data[9] == 0x03:
            print('Device ID: Models TF6 and TM6 (512K; thermal CR)')
        elif raw_data[9] == 0x04:
            print('Device ID: Models TI3, TI4, TG3, and TG4 with the 8MB option')
        elif raw_data[9] == 0x05:
            print('Device ID: Models TF6 and TM6 with the 8MB option')
        elif raw_data[9] == 0x06:
            print('Reserved (0x06)')
        elif raw_data[9] == 0x07:
            print('Models TF6 and TM6 with the 2MB option')

        # bytes 11 and 12 indicate individual features like presence of MICR-reader, check flipper, emulation or two-color mode etc.

        # byte 13 contains the microcode level, which is always referred to in hexadecimal notation:
        print('Printer microcode level: {:02X}'.format(raw_data[12]))

For a TF6-model, the output looks like this:

 Message length: 15
 Type: non-Tx8/Tx9 model, or Tx8/Tx9 in TI4 emulation mode
 Device ID: Models TF6 and TM6 (512K; thermal CR)
 Printer microcode level: 44

References

  1. "IBM SureMark printers: Three-station models" (PDF). ibm.com. Retrieved 2018-01-06.
  2. "4610 SureMark DBCS" (PDF). ibm.com. Retrieved 2018-01-06.
  3. "IBM SureMark Printers: Single-station models" (PDF). ibm.com. Retrieved 2018-01-06.
  4. "IBM SureMark Printers" (PDF). ibm.com. Retrieved 2018-01-06.
  5. "IBM SureMark Printers: Fiscal models" (PDF). ibm.com. Retrieved 2018-01-06.
  6. "SureMark Printers User's Guide" (PDF). Datamax System Solutions. Retrieved 2018-01-06.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.