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 bit1 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-1
8: 8 data bit
N: No parity bit
1: 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.長距離:可達1333m
4.快速:可達10Mbits/s, RS232只能達
~20Kbits/s
為何 RS485能長距離通訊?
• RS232採用single ended
(unbalanced),
而 RS485使用differential ended
(balanced)• RS232
• RS485
長距離時,兩個ground可能電位會有不同Î電流Î影響訊號接收
兩導線是同大小,方向相反電流,所產生電磁感應雜訊可相消除 而且只看電壓差,不受接地影響
T/RAT/RB SG
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 then comm1.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, b
reset_timer tim
Dob = b + comm.Input
Loop Until (InStr(b, Chr(3)) <> 0) Or (timer_read(tim) > 3) If b = "" Then
TTM_buffer = "Timeout"
TTM_resp = "Timeout"
Exit Function ElseTTM_buffer = b
TTM_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_p sub TTM_set_i sub TTM_set_d
function TTM_read_p function TTM_read_i function 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 chopper 8.光導量測系統
9.其他IdeaÎ討論