VB 與 PLC 通訊控制 NCYU_BME 1
真空播種系統 真空播種系統主要之組成構件包括 : 介質裝填整平機構 打孔壓實機構 振盪式真空播種機 灑水機構等 NCYU_BME 2
針式播種機 穴盤輸送方向 NCYU_BME 3
針式播種機之電腦圖形監控系統 電腦圖形監控設計重點在於利用簡單的圖形介面及文字說明, 提供人性化與穩定性的操作方式, 讓使用者能在最短時間內操作本系統 監控系統是以 Visual Basic 程式語言撰寫, 透過 RS232 傳輸線與 PLC 連結, 監控 PLC 之運轉狀態, 經連線後將其通訊狀況顯示在監控螢幕上 NCYU_BME 4
歡迎表 NCYU_BME 5
流程表 NCYU_BME 6
設定表 NCYU_BME 7
監視表 NCYU_BME 8
資訊表 NCYU_BME 9
監控系統動作影片 NCYU_BME 10
PLC 通訊規格 NCYU_BME 11
RS-232 構造 電腦上為公頭 1 2 3 4 5 6 7 8 9 連接線上為母頭 5 4 3 2 1 9 8 7 6 1:CD Carrier Detect ( 設備 ) 2:RXD Receive 3:TXD Transmit 4:DTR Data Terminal Ready ( 電腦 ) 5:GND Ground 6:DSR Data Set Ready ( 設備 ) 7:RTS Request To Send ( 電腦 ) 8:CTS Clear To Send ( 設備 ) 9:RI Ring Indicator ( 設備 ) NCYU_BME 12
線路要求 2 (RXD) 3 (TXD) 5 (GND) 4 (DTR) 1 (DCD) 6 (DSR) 7 (RTS) 8 (CTS) 9 (RI) 3 (TXD) 2 (RXD) 5 (GND) 6 (DSR) 1 (DCD) 4 (DTR) 8 (CTS) 7 (RTS) 9 (RI) 9 Pin 9 Pin NCYU_BME 13
COM Port 初始化參數 (1) 如何從不斷改變的電壓狀態中解讀訊息, 需要通訊的雙方在通訊開始前先取得共識 共同的通訊規則 Baud Rate( 傳輸速率 ): 設定參考時脈每秒所能產生的電壓狀態最大改變率 Parity( 同位位元檢查 ): 預防錯誤的產生檢查字元碼中 1 的數目是奇數或偶數 Data Bits( 資料傳送單位 ) 7 或 8 個位元形成一個字元 Stop Bits( 停止位元 ): 停止位元的通知, 確切訊號的結束 1 1.5 2 bits 等選擇 NCYU_BME 14
COM Port 初始化參數 (2) Baud Rate Unit: bits per second (bps) 1200, 2400, 4800, 9600, 19200, 38400,... Baud rate = Data transfer rate? Data bits 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 7 bits: ASCII Code 0~127, Text Data ( 日本 ) 8 bits: ASCII Code 0~255, Binary Data( 歐美 ) NCYU_BME 15
COM Port 初始化參數 (3) Parity( 同位位元 ): 用於將所傳送字元中的 bit 和同位位元中 1 的數目作加總, 並將結果記錄 None Even: 保持值為 1 的位元數為偶數 Odd: 保持值為 1 的位元數為奇數 如 :A 01000001 010000010 偶位元 01000001 010000011 奇位元 NCYU_BME 16
COM Port 初始化參數 (4) Start Bits:1 bits Stop Bits:1 1.5 or 2 bits Ex: Data Bits:8, Stop bits:1, No Parity 每組資料長度 Start+Data+Parity+End 1 0 1 0 0 1 0 0 1 1 Stop Bit Start Bit Data (Hex: 91) Stop Bit Start Bit NCYU_BME 17
VB 中的串列通訊元件 引用步驟 1. 加入命名空間 Imports System.IO.Ports 2. 宣告通訊埠物件 可以用 Dim RS232 As SerialPort 的敘述 或 直接從工具箱雙擊 SerialPort 的控制元件選項 NCYU_BME 18
SerialPort 操控原則 a. 物件 : 首先瞭解所要操作的物件是什麼? b. 屬性 : 設定該物件所具備的特性 c. 事件 : 該物件在系統執行的過程中會因其他物件而發生什麼樣的事情? d. 方法 : 當該物件被引發了某個事件之後, 系統 ( 或程式 ) 應該採用的相應步驟為何? NCYU_BME 19
SerialPort 控制項 Properties BaudRate, DataBits, Handshake Parity, PortName, ReadBufferSize StopBits, ReceiveBytesThreshold NCYU_BME 20
SerialPort Property PortName RS232.PortName = COM1 => use Com1 port BautRate RS232.BaudRate = 1200, 2400, 4800, 9600, 19200,... Parity RS232.Parity=Parity.None (Parity.None, Parity.Odd, Parity.Mark, Parity.Space) DataBits RS232.DataBits = 8 StopBits RS232.StopBits = StopBits.One (None, OnePointFive, Two) 設定完成後, 送出和收回的字串便以此為基準, 連接的兩端必須完全一樣, 才能順利的溝通 NCYU_BME 21
SerialPort Events Open 或 Close: 設定或關閉通訊連接埠的狀態 Ex: RS232.Open <= Open Com Port... <= 收發 Data... <= 收發 Data RS232.Close <= Close Com Port ReadExisting Ex: InStr = RS232.ReadExisting <= 由串列埠讀入 Data Write Ex: RS232.Write( AT & vbcrlf ) => 由串列埠輸出 AT & Return 字元 NCYU_BME 22
通訊步驟 加入通訊物件 : 即 SerialPort 物件 設定通訊埠 : 即 SerialPort 屬性 設定通訊協定 : 即 HandShakingt 屬性 設定傳輸速度等參數 : 即 BaudRate 屬性 設定其他參數 : 即其他屬性設定 開啟通訊埠 : 即 SerialPort.Open 送出或讀入字串 : 即使用 ReadExisting 和 Write 屬性 關閉通訊埠 : 即 SerialPort.Close NCYU_BME 23
VB 中串列通訊元件的引用 FX-2N 的通訊參數 9600 bps 偶同位 7 個資料位元 1 個停止位元 NCYU_BME 24
PLC 控制系統設計流程 系統設計 輸出入接點設計 設計控制原理圖 程序寫入 PLC 測試並修改 PLC 程序 電腦端的通訊程式開發 NCYU_BME 25
PLC 通訊方法 1. 外接延伸通訊板 2. 內建通訊埠 NCYU_BME 26
PLC 通訊協定封包格式 寫入指令 Chr(2) 1 01 Chr(3) 讀取指令 Chr(2) 0 01 Chr(3) NCYU_BME 27
FX-2N 群組位址 輸入接點 群組位址 輸出接點 群組位址 X0-X7 0080 Y0-Y7 00A0 X10-X17 0081 Y10-Y17 00A1 X20-X27 0082 Y20-Y27 00A2 計時器 群組位址 資料暫存器 群組位址 T0 0800 D0 1000 T1 0802 D1 1002 T2 0804 D2 1004 NCYU_BME 28
8-15 NCYU_BME 29
控制指令範例 ( 寫入 ) 希望呈現的 Y 接點狀態 5 3 資料內容 : 2 個字元 位元組數為 1 4 個字元 位元組數為 2 指令排列 十六進位 Y0-Y7 NCYU_BME 30
CheckSum 程式內容 指令號碼到結尾字元的組合 Function CheckSum(ByVal InputStr As String) As String Dim StrLen As Integer, a As Integer, j As Integer Dim StrCh As String, Sum As String StrLen = InputStr.Length a = 0 For j = 1 To StrLen StrCh = Mid(InputStr, j, 1) a = Asc(StrCh) + a Next j Sum = Hex(a) If Sum.Length = 1 Then Sum = "0" + Sum CheckSum = Mid(Sum, Sum.Length - 1, 2) End Function 轉換十六進位 最後 2 個字元 指令字串程式內容 NCYU_BME 31
寫入之回傳値 指令正確 ACK (ASCII 編號 6) 指令錯誤 NAK (ASCII 編號 21) NCYU_BME 32
讀取之回傳値 讀取 X0-X7 的狀態 啟始字元 指令號碼 群組位元 位元組數 結尾字元 CheckSum Chr(2) 0 0080 01 Chr(3) 5C 回傳格式 啟始字元 資料內容 結尾字元 CheckSum Chr(2) 63 Chr(3) 6C 第 1 字元 第 2&3 字元 第 4 字元 第 5&6 字元 6 54 3 51 2+54+51+3=110 110 6C( 十六進位 ) X0-X7 的狀態 X7 X6 X5 X4 X3 X2 X1 X0 0 1 1 0 0 0 1 1 NCYU_BME 33
讀取 PLC 回傳値的注意事項 RS232.Write(OutCmd) ' 讀取或寫入指令 TimeDelay(100) ' 需要一點時間傳遞資料 RetStr = RS232.ReadExisting() ' 讀取 PLC 回傳値 讀取 PLC 回傳値前需要延遲, 本裝置的延遲時間最少需要 40 毫秒 Private Sub TimeDelay(ByVal DT As Integer, ByVal retlen As Integer) Dim StartTick As Integer StartTick = Environment.TickCount() ' 開始計數前的 Tick Do If RS232.BytesToRead >= retlen Then Exit Sub If Environment.TickCount() - StartTick >= DT Then Exit Do Loop End Sub Application.DoEvents() ' 處理佇列中的訊息 Retlen 為回傳値的字元數 : 寫入 retlen=1 讀取 retlen=? NCYU_BME 34
群組內容寫入與讀取 寫入 讀取 NCYU_BME 35
XY 接點的直接讀取 與 Y 接點控制 NCYU_BME 36