Video about the results of the PLC and Computer (Laptop) communication Architecture of PLC and Computer Communication: Remarks of PLC and Computer Communication Architecture: PLC: 1. Siemens S7-200 PLC with PPI Communication Port PLC Cable: 2. PLC Cable: USB to PPI (RS485) Adapter for Siemens S7-200 Computer: 3. Computer or Laptop 4. Windows 7 Operating System, I use Windows 7 64Bit 5. PLC Cable Driver for Windows 7 6. Visual Basic 2010 Express A. Prepared of Hardware and software for PLC and Computer Communication 1. Siemens S7-200, CPU 226 CN 2. USB to PPI Adapter for Siemens S7-200 3. Download PLC Cable driver for windows 7, Click: CP210x_VCP_Win_XP_S2K3_Vista_7 4. Installation Siemens S7-200 PLC, PLC Cable and Laptop 5. How to Serial Port Number Check in Windows 7 Video About How to Serial Port Number Check B. Visual Basic Express Programming for PLC and Computer Communication 1. Layout Form in Visual Basic 2. Communication setting in SerialPort Properties 3. Visual Basic Code Imports System.Threading Public Class Form1 Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed If (spPLC.IsOpen = True) Then spPLC.Dispose() End If End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load spPLC.PortName = "COM7" 'serial port number = 7 Try spPLC.Open() Catch ex As Exception Me.Text = ex.Message End Try End Sub Private Sub bitQ_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bitQ.Click Dim Qx As Byte Dim Qy As Byte Dim Qv As Byte If ((Val(txtQx.Text) > 31) Or (Val(txtQy.Text) > 7)) Then MsgBox("Qx >31 or Qy > 7") Return End If Qx = CByte(Val(txtQx.Text)) ' Qx.y Qy = CByte(Val(txtQy.Text)) ' Qx.y If (ckQv.Checked = True) Then Qv = 1 ' Q Value Else Qv = 0 ' Q Value End If Dim str_write(0 To 37) As Byte Dim Temp_FCS As VariantType Dim i As Long bitQ.Enabled = False str_write(0) = &H68 str_write(1) = &H20 str_write(2) = &H20 str_write(3) = &H68 str_write(4) = &H2 str_write(5) = &H0 str_write(6) = &H7C str_write(7) = &H32 str_write(8) = &H1 str_write(9) = &H0 str_write(10) = &H0 str_write(11) = &H43 str_write(12) = &H1 str_write(13) = &H0 str_write(14) = &HE str_write(15) = &H0 str_write(16) = &H5 str_write(17) = &H5 str_write(18) = &H1 str_write(19) = &H12 str_write(20) = &HA str_write(21) = &H10 str_write(22) = &H1 'len = 1 str_write(23) = &H0 str_write(24) = &H1 str_write(25) = &H0 str_write(26) = &H0 ' type q str_write(27) = &H82 'type q str_write(28) = &H0 str_write(29) = &H0 str_write(30) = Qx * 8 + Qy str_write(31) = &H0 str_write(32) = &H3 str_write(33) = &H0 str_write(34) = &H1 str_write(35) = Qv For i = 4 To 35 Temp_FCS = Temp_FCS + str_write(i) Next str_write(36) = Temp_FCS Mod 256 str_write(37) = &H16 If (spPLC.IsOpen = True) Then ' Send the binary data out the port spPLC.Write(str_write, 0, str_write.Length) Thread.Sleep(100) 'wait 100ms End_comm() 'end Communication End If bitQ.Enabled = True End Sub Private Sub End_comm() 'End Communication Dim str_val(0 To 5) As Byte spPLC.ReadExisting() str_val(0) = &H10 str_val(1) = &H2 str_val(2) = &H0 str_val(3) = &H5C str_val(4) = &H5E str_val(5) = &H16 If (spPLC.IsOpen = True) Then spPLC.Write(str_val, 0, str_val.Length) End If End Sub Private Sub ckQv_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ckQv.CheckedChanged If (ckQv.Checked = True) Then ckQv.Text = "Qv = 1" bitQ.Text = "Write Bit Q" + txtQx.Text + "." + txtQy.Text + " = 1" Else ckQv.Text = "Qv = 0" bitQ.Text = "Write Bit Q" + txtQx.Text + "." + txtQy.Text + " = 0" End If End Sub Private Sub txtQx_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtQx.TextChanged If (ckQv.Checked = True) Then ckQv.Text = "Qv = 1" bitQ.Text = "Write Bit Q" + txtQx.Text + "." + txtQy.Text + " = 1" Else ckQv.Text = "Qv = 0" bitQ.Text = "Write Bit Q" + txtQx.Text + "." + txtQy.Text + " = 0" End If End Sub Private Sub txtQy_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtQy.TextChanged If (ckQv.Checked = True) Then ckQv.Text = "Qv = 1" bitQ.Text = "Write Bit Q" + txtQx.Text + "." + txtQy.Text + " = 1" Else ckQv.Text = "Qv = 0" bitQ.Text = "Write Bit Q" + txtQx.Text + "." + txtQy.Text + " = 0" End If End Sub Private Sub Ixy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ixy.Click Dim str_read(0 To 32) As Byte Dim i As Integer Dim Temp_FCS As VariantType Dim Rx As String Rx = 0 ' Read from I0.0 str_read(0) = &H68 str_read(1) = &H1B str_read(2) = &H1B str_read(3) = &H68 str_read(4) = &H2 str_read(5) = &H0 str_read(6) = &H6C str_read(7) = &H32 str_read(8) = &H1 str_read(9) = &H0 str_read(10) = &H0 str_read(11) = &H0 str_read(12) = &H0 str_read(13) = &H0 str_read(14) = &HE str_read(15) = &H0 str_read(16) = &H0 str_read(17) = &H4 str_read(18) = &H1 str_read(19) = &H12 str_read(20) = &HA str_read(21) = &H10 str_read(22) = &H8 'read len 1=bit, 8=byte str_read(23) = &H0 str_read(24) = &H1 str_read(25) = &H0 str_read(26) = &H0 ' type Ixy str_read(27) = &H81 'type Ixy=&H81, Qxy=&H82 str_read(28) = &H0 str_read(29) = (Str(Rx) * 8) \ 256 str_read(30) = (Str(Rx) * 8) Mod 256 For i = 4 To 30 Temp_FCS = Temp_FCS + str_read(i) Next i str_read(31) = Temp_FCS Mod 256 str_read(32) = &H16 If (spPLC.IsOpen = True) Then ' Send the binary data out the port spPLC.Write(str_read, 0, str_read.Length) Thread.Sleep(100) 'wait 100ms End_comm() 'end communication End If End Sub Private DisplayDelegate As New DisplayData(AddressOf Display) Private Sub spPLC_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles spPLC.DataReceived 'Suppose that you want to use the built-in SerialPort control (System.IO.Ports.SerialPort) 'this code is equivalent to the EnhancedSerialPort DataReceived code Dim BytesAvailable As Integer = spPLC.BytesToRead If BytesAvailable >= 29 Then 'Total byte data from I = 29 Dim Buffer(0 To BytesAvailable - 1) As Byte spPLC.Read(Buffer, 0, BytesAvailable) Me.BeginInvoke(DisplayDelegate, Buffer) End If End Sub Public Delegate Sub DisplayData(ByVal Buffer() As Byte) 'This delegate routine marshals receive data from the receive thread context DataReceived to the Windows Form STAThread context Private Sub Display(ByVal Buffer() As Byte) Dim xyval As Byte xyval = Buffer(25) txtI00.Text = (xyval And 1) / 1 txtI01.Text = (xyval And 2) / 2 txtI02.Text = (xyval And 4) / 4 txtI03.Text = (xyval And 8) / 8 txtI04.Text = (xyval And 16) / 16 txtI05.Text = (xyval And 32) / 32 txtI06.Text = (xyval And 64) / 64 txtI07.Text = (xyval And 128) / 128 End Sub Private Sub InputScan_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InputScan.Tick Ixy_Click(New Object(), New EventArgs()) End Sub Private Sub scan_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles scan.CheckedChanged If (Val(TimeScan.Text) < 200) Then TimeScan.Text = 200 InputScan.Interval = Val(TimeScan.Text) If (scan.Checked = True) Then InputScan.Enabled = True Ixy.Enabled = False Else InputScan.Enabled = False Ixy.Enabled = True End If End Sub End Class 4. Download Visual basic Code 1. Form1.vb 2. Form1.Designer.vb 3. Project File Video about How to use Download File: PLC and Computer Communication Labels: PLC and Computer PLC Application Siemens PLC