rs232 介面程式控制 -...

48
CH 12 CH 12 CH 12 RS232 RS232 介面程式控制 介面程式控制

Upload: others

Post on 12-Aug-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

  • CH 12 CH 12 CH 12 RS232 RS232 介面程式控制介面程式控制

  • 音樂用

    高級儀器控制用

    一般儀器控制用

    工廠儀器控制用

    印表機用

    網路用

  • RS232C• 電腦中最常用的介面之一。• RS-232 : Recommend Standard number 232.• C 表示最新的版本.• 大多電腦都是符合RS-232C一部份標準.• 全功能的 RS-232C 規定使用25-pin “D” 接頭,使用其中的 22 pins.

    • 對電腦通訊而言,許多都是不必要的,因此節省起見,大多數PC只使用一個9pin的公接頭。

    • 事實上,只要使用其中3根pin便可達到全雙工(full duplex)通訊的目的,一根Send,一根receive,一根ground。

    Full duplex:送資料與接收資料同時進行,亦即是雙向的溝通bi-directional

  • DCE and DTE接頭• RS232定義兩種接頭形式,接腳訊號定義不同

    DCE (data communication Equipment)資料通訊設備 遠端儀器母接頭

    DTE (data terminal equipment)資料終端設備 電腦公接頭

    • DTE與DCE可以直接一對一連接線• 但同類間連接需要用Null modem Cable,交換

    send與 receive腳位

  • http://www.taltech.com/TALtech_web/resources/intro-sc.html#232c

  • http://www.taltech.com/TALtech_web/resources/intro-sc.html#232c

    CD, DSR, DTR, RTS, CTS, RI都是硬體偵測傳輸狀態所需 很少用目前大多數只要利用RD與TD傳輸特定字元溝通,即可判斷傳輸狀況,因此只要用RD, TD, ground 3根線即可

  • 資料如何傳輸—start bit• RS232是屬於序列式的(serial)傳輸資料,亦即資料是一個bit一個bit傳的

    • 平時,TD與RD是在高電位,一端的TD是接到另端的RD,當有資料要傳時,一端的TD會先被拉低電位,而另一端的RD接收到低電位開始接收資料,這個動作叫做送Start bit(起始位元)

    Common ground

    TD RD

  • 接收資料-data bits

    • Start bit開始之後,兩邊的設備便準備接收接下來的資料

    • 為了溝通起見,兩邊必須有一樣的傳輸速度(baud rate),並了解接下來有多少data bits要送過來

    • Baud rate:紀念法國人Jean Maurice Emile Baudot, 發明用5bit代碼表示英文字母。表示每秒多少bit的傳輸動作

    • 確定好傳輸速度,接下來要傳多少bit,也要規定好,一般是傳8或7 bit,以8 bit最常用。LSB最小位元先送。 Start bit

    1 00 1 1 1 0 0

  • 資料檢查 Parity bit• 序列資料是否傳得正確? 奇偶檢查• Data bit送完,再附送一個parity bit,讓接收端檢查

    資料正確性• 通常有以下幾種:

    none:不送parity bit 最常用Odd:當data bit有偶數個1時=>送1補成奇數個Even:當data bit有奇數個1時=>送1補成偶數個

    • Mark:永遠送1做parity bit• Space :永遠送0做parity bit

    1 00 1 1 1 0 0 1

    Parity bit: none, odd or even?

  • Stop Bit• 停止位元: 將電位拉高,宣告資料已經傳輸完畢。

    • 因此,最常用的傳輸格式常記為8-N-18: 8 data bitN: No parity bit1: 1 start/stop bit(有些設備較慢時用2bits)

    1 00 1 1 1 0 0 1

    Stop bit

  • Qestion• 以8-N-1, 9600 baud傳送資料時,每秒最多可送多少個byte?

    • 以7-E-1送則如每秒多少byte?

    960byte/s

  • 防止資料遺失• 使用Handshaking(握手) 可不用

    很多型式,其一利用某一根線的高低電位(如DTR),當一端準備收資料時先拉高某一線電位,另一端接收到訊息後才開始送資料。另一種則利用TD RD線,傳送特殊的byte當成準備接收資料的代號。

    • 使用緩衝區(buffer)• 使用中斷(interrupt)或詢問(polling)

    中斷:有事件發生時執行 Polling:以軟體不斷檢查資料• 使用Acknowledgement(確認)

    收到資料時,送回一個特殊byte確認資料收到。• 錯誤檢查(error checking)

    送checksum byte給接收端檢查資料正確性有問題,通知重送資料

    通常,我們有不必管這些細節動作這些都是RS232本身的功能我們要做的,只是定好通訊方式,開啟port,送資料,接收資料而已

  • 誰來負責傳輸資料--UART(Universal Asynchronous Receiver/Transmitter)

    • 通用非同步接收傳送器• 細部的資料傳輸的工作由UART電路元件(如PC中的16550UART晶片)自動去完成

    • 我們的程式只要負責把通訊規格設好(如8-N-1),送收資料即可。

  • 另一個常用的序列介面RS485• RS232連線長度只能50~100呎(17~33m),一個

    Comm Port只能接一台• 為了因應工廠控制所需,因此1993年訂定

    RS485,抗雜訊能力提高,距離可達4000呎1333米!

    同時可控制32個設備• 其優點為

    1.比RS232便宜,只使用一個+5V電源,比RS232用的±5V方便

    2.網路功能:可長距離、多儀器連結,使用高阻抗的接收器,甚可接達到256台

    3.長距離:可達1333m4.快速:可達10Mbits/s, RS232只能達~20Kbits/s

  • 為何RS485能長距離通訊?• RS232採用single ended(unbalanced),而RS485使用differential ended(balanced)

    • RS232

    • RS485

    長距離時,兩個ground可能電位會有不同 電流 影響訊號接收

    兩導線是同大小,方向相反電流,所產生電磁感應雜訊可相消除而且只看電壓差,不受接地影響

    T/RAT/RBSG

  • RS485接線法基本上只有三條線TRA TRB SG可只使用2線須加終端電阻每台機器虛設不同的位址

    終端電阻加在電腦端及最遠一台機器的一端需搭配導線的阻抗值(必須大於75ohm)一般而言AWG24線使用100~150ohm即可

  • http://www.hw.cz/english/docs/rs485/rs485.html

    有些電阻可能內建在控制器

    AB線不要亂接一起

  • RS232 RS485• 由於RS232還是PC現有的介面,因此常使用RS232到RS485的轉接器,以便利用RS232控制RS485儀器

  • 使用VB的comm控制項• VB提供一個Microsoft Comm 6.0

    control可以作為RS232控制• 注意: 最好使用9pin或25pin全部連線都使用的連接線,若只用3線,則有些硬體通訊規格需要更動

  • 設定好所需的通訊規格

  • 通常不用更動(除非有問題)

  • Comm控制元件的細節資料• 按住toolbox中的comm 再按F1則可出現

    help說明

    TRY IT!

  • 開發儀器控制程式步驟• 閱讀使用手冊• 了解介面:了解儀器介面• 建立測試專案:寫一個測試專案程式,專門測試通訊功能,順便建立簡易的程式庫

    • 建立程式庫:程式庫最好能獨立形成一個模組,而不需要配合form使用

    • 建立使用者介面:設計表單配合該模組使用,以形成方便的使用者介面,該表單與模組最好能獨立運作,而不依賴外部的變數或物件

    • 將使用者介面加入主專案程式:將設計好的表單及模組加入主專案程式中,便可直接使用

  • RS232控制基本動作• 設定通訊規格• 開啟RS232 port• 送資料出去• 接收資料回來• 關閉RS232 port

  • 設定通訊規格--根據手冊 與儀器設定要同

  • 開啟RS232 port• Comm1.PortOpen=true• 使用error check On error goto避免錯誤時(例如沒接線時)程式一直亂try

    • 可用if comm1.portOpen=false thencomm1.portOpen=true

    endif確保沒有重新開啟已被開啟的Port例如mouse常使用comm1 port

  • 送指令出去• Comm1.output=“PMT-ON”• 送何指令會有何動作要參考使用手冊早期有時指令是ASC code例如chr(58)+chr(17)+chr(11)較新的儀器是用看得懂得文字如“PMT-ON” “800V” “GOTO 500nm”“READ POSITION”

    • 有時還會有加一些檢查碼要跟著指令送• 基本上手冊應該有清楚的說明

    指令在此

  • 讀資料回來• 依據儀器設計不同,當一個指令送出去之後,有可能有資料

    回傳,也有可能沒有資料回傳。若有資料,則可以讀取回來。若沒資料回傳而硬讀資料,可能會讀不到資料而卡住數秒鐘或更久。 check手冊

    • 讀資料 s=comm1.Input• 檢查有無資料 a=comm1.InBufferCount• 確定資料都讀到

    有時電腦速度太快,直接讀comm1.input會只讀回部份,因此,一般儀器在送資料時,會送一些可以作為傳輸結束的字元,例如CHR(13)甚或”OK”+Chr(13)等

    必須依照資料傳回規格檢查,以免亂掉

    • 例如:ACTON Spectra pro500 光譜儀下 ”GOTO 300nm”,光譜儀便開始移動光柵,經過數十秒鐘後,到達定位,才回傳”OK””

    一般設計每一個指令都會傳回資料,例如重覆一下所送的命令等或送個”OK”等

  • Function TTM_resp(ByVal addr)Dim tim, breset_timer timDob = b + comm.Input

    Loop Until (InStr(b, Chr(3)) 0) Or (timer_read(tim) > 3)If b = "" ThenTTM_buffer = "Timeout"TTM_resp = "Timeout"Exit Function

    ElseTTM_buffer = bTTM_resp = b

    End If

    End Function

    例TTM114控溫器每次送指令都會回傳資料因此寫個副程式來抓資料

    Reset_Timer var與Timer_read(var)是hjssub中的副程式,一個是將計時器歸零一個是傳回歸零後計時器走的時間Var是可變變數TTM_bufer是公用變數暫存讀回資料

    這是TTM114的特殊字元表示資料傳完了

  • 關閉Comm port• 程式結束時,記得關閉comm port以免再開程式時,卡住

    • 一般在VB中,當按停止時,會自動關閉comm port

    • Comm1.PortOpen=false

  • 開發儀器控制程式步驟• 閱讀使用手冊• 了解介面:了解儀器介面• 建立測試專案:寫一個測試專案程式,專門測試通訊功能,順便建立簡易的程式庫

    • 建立程式庫:程式庫最好能獨立形成一個模組,而不需要配合form使用

    • 建立使用者介面:設計表單配合該模組使用,以形成方便的使用者介面,該表單與模組最好能獨立運作,而不依賴外部的變數或物件

    • 將使用者介面加入主專案程式:將設計好的表單及模組加入主專案程式中,便可直接使用

  • 實例久德電子TOHO114

    • 控溫器的控制www.jetec.com.tw

    買的時候要指名有無通訊介面

    光電半導體製程常用到溫度控制器

  • RS232 RS485• 由於RS232還是PC現有的介面,因此常使用RS232到RS485的轉接器,以便利用RS232控制RS485儀器

  • 開發儀器控制程式步驟• 閱讀使用手冊(intruction manual and comm.

    manual)• 了解介面:了解儀器介面 RS485• 建立測試專案:寫一個測試專案程式,專門測試通訊功能,順便建立簡易的程式庫

    • 建立程式庫:程式庫最好能獨立形成一個模組,而不需要配合form使用

    • 建立使用者介面:設計表單配合該模組使用,以形成方便的使用者介面,該表單與模組最好能獨立運作,而不依賴外部的變數或物件

    • 將使用者介面加入主專案程式:將設計好的表單及模組加入主專案程式中,便可直接使用

  • 了解介面

    送指令要求回傳PV1(溫度)

    接收資料格式收玩資料再以字串處理抓出777度

  • 建立測試專案來開發程式庫• 為了方便使用,將程式包裝成自己習慣的方式 程式

    庫• 一般習慣

    init_TTM(comm1)sub TTM_comman(cmd)function TTM_resp()function TTM_Temp_read ()sub TTM_set_temp (T)sub TTM_set_psub TTM_set_isub TTM_set_dfunction TTM_read_pfunction TTM_read_ifunction TTM_read_d…close_TTM

    直接將comm1物件傳進來好處是程式庫可以同時控制好幾台機器壞處是速度會變慢一點

  • 測試專案程式

  • 建立程式庫

  • 建立使用者介面在介面上輸入溫度設定,則程式便把指令傳給儀器濺好使用者介面,以後該介面便可以直接加到大的程式去使用!

    Me.tag是一個沒用到的屬性我用來放unit address因為有好幾台控溫器

    Hjssub副程式專門用來叫使用者輸入一定範圍資料用

    最大,最小,預設值

    更新資料用

  • 介面建立好後,並適當將文字輸入框命名以後別的模咀要設定TTM114溫度,不需呼叫TTM_set_temp 指令而只要使用TTM114!setpoint=“100”即可簡化TTM使用方式

    進一步地若想把你的介面拿去賣錢可以把程式包裝成一個控制項如何寫控制項參考MSDN說明如何建立屬性、事件並設計成控制項等

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon98/html/vbconcreatingactivexcontrol.asp

    寫控制項的demo說明在此

  • 將使用者介面加入主專案程式• 把一系列的使用者介面加進到專案程式可形成一個大程式• 寫程式的時候除非有錯誤否則盡量不要改到使用者介面程式,因

    為可能不只一個專案程式用到該介面

  • 成為整合程式設計快手

    • 建立自己的程式庫及使用者介面

    • 需要時直接組合起來• 稍加修改 OK!• 經驗累積!!

  • 期末專案• 下次交要寫的期末程式• 直接討論程式如何設計• 若沒有 直接指定• Topics

    1.介紹如何設計控制元件2.網頁字典(新聞)程式3.參考文獻資料庫整理程式4.利用印表機或game port做控制示範5.RS232 電源供應器 AAO(多孔矽)6.RS232->RS485 控溫器

    奈米製程成長光電材料7.如何用電腦設計便宜的optical chopper8.光導量測系統9.其他Idea 討論