Implementing the Omron Host Link Protocol (VB.Net)

Previously we used VB6 (Visual Basic 6) to implement the Omron Host Link Protocol to communicate to our programmable logic controller. (PLC) In part 2 we used Visual Basic for Applications (VBA) to accomplish our host link serial communication. We will now look at using VB.Net to establish and retrieve information in and out of the PLC using host link. (C mode commands)

Hostlink communication protocol is a method developed by Omron for communication to PLC’s and other equipment. This ASCII based protocol is used over RS232 or RS422/RS485. It is a many to one implementation which means that you can communicate with up to 32 devices back to a master. (1:N) This communication on the industrial floor can control PLC’s, Temperature Controllers, Panel Meters, etc.

The Omron CP1H plc will be used with a CP1W-CIF11 (RS485) communication serial link adapter. We will also use a USB-485M Universal Serial Bus to RS485 adapter from automation direct. The video at the end of this post will demonstrate the communications by reading 10 registers form the DM area of the PLC.

Let’s look at the hardware that we will be using. The CP1W-CIF11 is a communication module that can fit into either port on the CP1H.

The terminal on the front is as follows:

We will be using the RDA- and RDB+ terminal to hook up to our SG+ and SG- wires from our usb to RS485 converter.

Set the following dip switches on the back of the CP1W-CIF11 for RS485 2-wire serial mode.
Pin 1 – Off
Pin 2 and 3 – On
Pin 4 – Not used (Off)
Pin 5 and 6 – On

Note: If using an Omron 9 pin serial port, here is the diagram for the cable pinout. It will use only three wires and the handshaking signals will be jumped out. This is for an Omron 9 pin RS232C port such as a CP1W-CIF01, CQM1H, C20H, PT Terminals, etc. You can use this cable for programming or communication links.

We will be using Visual Studio Community ( for the software package to communicate to the CP1H PLC. You can download and install Visual Studio Community at the following url:

This is a free, fully-featured IDE (Integrated Development Environment) for students, open-source and individual developers.
The Host Link Protocol (C-mode Commands) is a command / response system for serial communications. This will allow us to perform control operations between a CPU unit and a host computer directly connected to it.

Here is the command format. This is what the computer will send to the PLC.

  •  @ – This indicates the start of the command
  •  Unit Number – This is set in BCD from 00 to 31. So the network can have 32 devices attached
  • Header Code – This has two characters that specify what you want to do. Example “RD” is used to read the Data Memory area of the PLC.
  • Text – This is the parameters associated with the header code. (Command Code)
  • FCS – The frame check sequence (FCS) is a calculated 2 character value.
  • Terminator – The “*” and Carriage Return (CHR$(13)) are used to indicate the end of the command.

Here is the response format. This is what the PLC will send back from the command.

  • @ – This indicates the start of the response
  • Unit Number – This is the device that is responding to the command sent. (00-31)
  • Header Code – The same command code sent is returned.
  • End Code – The error code of the command executed is returned. Example “00” no error code.
  • Text – Returned only if data is being read.
  • FCS – The frame check sequence (FCS) is a calculated 2 character value.
  • Terminator – The “*” and Carriage Return (CHR$(13)) are used to indicate the end of the response.

Here is a diagram of the communications that will take place. If the response is greater than 131 characters, a delimiter is used ‘CR’ (CHR$(13)) instead of the terminator.

Host Link Protocol is usually embedded in allot of the Omron product. Please refer to the specific communication manual for the command codes for temperature controllers, process controllers and Omron PLC units.
Here is a chart of the Omron Manuals for PLC Host Link Operations.

We will be using a CP1H Omron PLC. Here is the manual for the host link operations.

Here are the commands we can use with the CP1H.

See the above manual for the instructions on using each of the commands.

Visual Basic Net (Example)
We will use the VB6 example and read the first 10 words from the DM area of the Omron PLC.

The first step is the design the form. You can see that we have our ten DM area words set out to populate with values. We also have a TX for transmit. This will show what we are sending to the PLC. The RXD will show what the response will be from the PLC.
SerialPort is used to communicate through the serial ports of the computer. The following is the settings for the communication port.

COM5, 9600, Even Parity, 7 Data Bits and 2 Stop bits. This is the default values for Omron serial communication.

A timer is used for the communication timing. Every time the timer expires the communication will take place with the PLC.

In our case we will have a 100 msec delay between communication commands to the PLC.

Here is the code to create some public strings and handle the time function every 100 msec.

Public Class Form1
 Public TX As String
 Public FCS As String
 Public RXD As String

 Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
 Timer1.Enabled = False
 'Display current date and time
 Label2.Text = System.DateTime.Now

 'Open the serial port
 If SerialPort1.IsOpen = False Then
 End If
 Dim charreturn As Integer

 'Check DM AREA DM0000 to DM0009 data update
 TX = "@00RD00000010"
 Call GetFCS()
 Label25.Text = TX + FCS + "*"
 Call communicate()

 ' Set information on the screen
 Label26.Text = RXD
 If RXD.Substring(5, 2) = "00" Then
 Label4.Text = RXD.Substring(7, 4)
 Label5.Text = RXD.Substring(11, 4)
 Label7.Text = RXD.Substring(15, 4)
 Label9.Text = RXD.Substring(19, 4)
 Label11.Text = RXD.Substring(23, 4)
 Label13.Text = RXD.Substring(27, 4)
 Label15.Text = RXD.Substring(31, 4)
 Label17.Text = RXD.Substring(35, 4)
 Label19.Text = RXD.Substring(39, 4)
 Label21.Text = RXD.Substring(43, 4)
 End If

 Timer1.Enabled = True
 End Sub

This is the code for the FCS calculation.

Private Sub GetFCS()
 'This will calculate the FCS value for the communications
 Dim L As Integer
 Dim A As String
 Dim TJ As String
 L = Len(TX)
 A = 0
 For J = 1 To L
 TJ = Mid$(TX, J, 1)
 A = Asc(TJ) Xor A
 Next J
 FCS = Hex$(A)
 If Len(FCS) = 1 Then FCS = "0" + FCS
 End Sub

Here is the code to actually send and receive the information from the Omron CP1H PLC.
Note: Once information is sent on the port, we delay for 50 msec. This is more for the computer wait time. It can be 0 if nothing else is using computer ports. 50 works well when we are running CX-Programmer (USB Serial) and our VB.Net application (COM5).

Private Sub communicate()
 'This will communicate to the Omron PLC
 Dim BufferTX As String
 Dim fcs_rxd As String
 RXD = ""
 BufferTX = TX + FCS + "*" + Chr(13)

 'Send the information out the serial port

 'Sleep for 50 msec so the information can be sent on the port

 'Set the timeout for the serial port at 100 msec
 SerialPort1.ReadTimeout = 100

 'Read up to the carriage return
 RXD = (SerialPort1.ReadTo(Chr(13)))

 Catch ex As Exception
 'If an error occurs then indicate communication error
 RXD = "Communication Error"
 End Try

 'Get the FCS of the returned information
 fcs_rxd = RXD.Substring(RXD.Length - 3, 2)
 If RXD.Substring(0, 1) = "@" Then
 TX = RXD.Substring(0, RXD.Length - 3)
 ElseIf RXD.Substring(2, 1) = "@" Then
 TX = RXD.Substring(2, RXD.Length - 5)
 RXD = RXD.Substring(2, RXD.Length - 1)
 End If

 'Check the FCS of the return information. If they are not the same then an error has occurred.
 Call GetFCS()
 If FCS <> fcs_rxd Then
 RXD = "Communication Error"
 End If
 End Sub
 End Class

Here is the code running:

You can download this program as well as the source code here.

Watch on YouTube : Implementing the Omron Host Link Protocol VB Net
If you have any questions or need further information please contact me.
Thank you,

If you’re like most of my readers, you’re committed to learning about technology. Numbering systems used in PLC’s are not difficult to learn and understand. We will walk through the numbering systems used in PLCs. This includes Bits, Decimal, Hexadecimal, ASCII and Floating Point.

To get this free article, subscribe to my free email newsletter.

Use the information to inform other people how numbering systems work. Sign up now.

The ‘Robust Data Logging for Free’ eBook is also available as a free download. The link is included when you subscribe to ACC Automation.

11 thoughts on “Implementing the Omron Host Link Protocol (VB.Net)”

  1. can i ask your program via email? i want to see field that contain plc memory inside, is it label or textbox? thanks

  2. Hii Garry. I hope you are good. one week ago, I asked a suggestion about barcode scanner as input in plc CP1H and you suggested me to use Visual Basic. I was researching on Visual Basic and I found very difficult to me. Because I have a Mechanical Background. Can you guide me on how to physically connect plc and pc for “visual basic”, “visual basic code” for reading and writing in plc and “how to internally connect cx-programmer and visual basic”. I really want to use visual basic in my project. I’m eager to receive your feedback. Thank you.

      1. Thank you, Garry.

        Do I need CP1W-CIF11 option board hardware for making the connection between visual studio and CP1H plc?

          1. Can I use CP1W-CIF01 option board instead of CP1W-CIF11 for visual basic?? Apologize for asking too much about it because I don’t want to waste 100 dollars on wrong part. Thank you.

          2. Hi Nishant,
            You can use a CP1W-CIF01 (RS232C) instead of the CP1W-CIF11 (RS422/RS485) for communication to the PLC using visual basic. This is just the type of communication media that you are using between the equipment. RS232 is good for about 50 feet of wire length. RS485 is good for about 4000 feet of wire length.
            RS232 is a 1:1 communication. This means that you cannot attach other devices.
            RS485 is a 1:N communication. This means that you can attach other devices on the network.
            If I were to specify, I would use the RS485 unit over the RS232. Most computers will not come with an RS232 port so a converter would have to be used anyway.

        1. Hi Nishant,
          There is no way for a program to communicate to the CX-Programmer. The USB port on board the CP1H is for programming only.

Leave a Reply

Your email address will not be published. Required fields are marked *