RS232 介面程式控制
RS232 介面程式控制
RS232 介面程式控制
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
CH 12<br />
<strong>RS232</strong> 介 面 程 式 控 制
一 般 儀 器 控 制 用<br />
工 廠 儀 器 控 制 用<br />
高 級 儀 器 控 制 用<br />
網 路 用<br />
音 樂 用<br />
印 表 機 用
<strong>RS232</strong>C<br />
• 電 腦 中 最 常 用 的 介 面 之 一 。<br />
• RS-232 : Recommend Standard number 232.<br />
• C 表 示 最 新 的 版 本 .<br />
• 大 多 電 腦 都 是 符 合 RS-232C 一 部 份 標 準 .<br />
• 全 功 能 的 RS-232C 規 定 使 用 25-pin “D” 接 頭 , 使<br />
用 其 中 的 22 pins.<br />
• 對 電 腦 通 訊 而 言 , 許 多 都 是 不 必 要 的 , 因 此 節 省<br />
起 見 , 大 多 數 PC 只 使 用 一 個 9pin 的 公 接 頭 。<br />
• 事 實 上 , 只 要 使 用 其 中 3 根 pin 便 可 達 到 全 雙 工<br />
(full duplex) 通 訊 的 目 的 , 一 根 Send, 一 根<br />
receive, 一 根 ground。<br />
Full duplex: 送 資 料 與 接 收 資 料 同 時 進 行 , 亦 即 是<br />
雙 向 的 溝 通 bi-directional
DCE and DTE 接 頭<br />
• <strong>RS232</strong> 定 義 兩 種 接 頭 形 式 , 接 腳 訊 號 定 義 不 同<br />
DCE (data communication Equipment)<br />
資 料 通 訊 設 備 遠 端 儀 器<br />
母 接 頭<br />
DTE (data terminal equipment)<br />
資 料 終 端 設 備 電 腦<br />
公 接 頭<br />
• DTE 與 DCE 可 以 直 接 一 對 一 連 接 線<br />
• 但 同 類 間 連 接 需 要 用 Null modem Cable, 交 換<br />
send 與 receive 腳 位
http://www.taltech.com/TALtech_web/resources/intro-sc.html#232c
CD, DSR, DTR, RTS, CTS, RI 都 是 硬 體 偵 測 傳 輸 狀 態 所 需 很 少 用<br />
目 前 大 多 數 只 要 利 用 RD 與 TD 傳 輸 特 定 字 元 溝 通 , 即 可 判 斷<br />
傳 輸 狀 況 , 因 此 只 要 用 RD, TD, ground 3 根 線 即 可<br />
http://www.taltech.com/TALtech_web/resources/intro-sc.html#232c
資 料 如 何 傳 輸 —start bit<br />
• <strong>RS232</strong> 是 屬 於 序 列 式 的 (serial) 傳 輸 資<br />
料 , 亦 即 資 料 是 一 個 bit 一 個 bit 傳 的<br />
• 平 時 ,TD 與 RD 是 在 高 電 位 , 一 端 的 TD<br />
是 接 到 另 端 的 RD, 當 有 資 料 要 傳 時 , 一<br />
端 的 TD 會 先 被 拉 低 電 位 , 而 另 一 端 的<br />
RD 接 收 到 低 電 位 開 始 接 收 資 料 , 這 個 動<br />
作 叫 做 送 Start bit( 起 始 位 元 )<br />
TD<br />
RD<br />
Common ground
接 收 資 料 -data bits<br />
• Start bit 開 始 之 後 , 兩 邊 的 設 備 便 準 備 接 收 接 下 來 的<br />
資 料<br />
• 為 了 溝 通 起 見 , 兩 邊 必 須 有 一 樣 的 傳 輸 速 度 (baud<br />
rate), 並 了 解 接 下 來 有 多 少 data bits 要 送 過 來<br />
• Baud rate: 紀 念 法 國 人 Jean Maurice Emile Baudot,<br />
發 明 用 5bit 代 碼 表 示 英 文 字 母 。 表 示 每 秒 多 少 bit 的 傳<br />
輸 動 作<br />
• 確 定 好 傳 輸 速 度 , 接 下 來 要 傳 多 少 bit, 也 要 規 定 好 ,<br />
一 般 是 傳 8 或 7 bit, 以 8 bit 最 常 用 。LSB 最 小 位 元 先<br />
送 。<br />
Start bit<br />
1 00 1 1 1 0 0
資 料 檢 查 Parity bit<br />
• 序 列 資 料 是 否 傳 得 正 確 ? 奇 偶 檢 查<br />
• Data bit 送 完 , 再 附 送 一 個 parity bit, 讓 接 收 端 檢 查<br />
資 料 正 確 性<br />
• 通 常 有 以 下 幾 種 :<br />
none: 不 送 parity bit 最 常 用<br />
Odd: 當 data bit 有 偶 數 個 1 時 => 送 1 補 成 奇 數 個<br />
Even<br />
: 當 data bit 有 奇 數 個 1 時 => 送 1 補 成 偶 數 個<br />
• Mark: 永 遠 送 1 做 parity bit<br />
• Space : 永 遠 送 0 做 parity bit<br />
Parity bit: none, odd or even?<br />
1 00 1 1 1 0 0 1
Stop Bit<br />
• 停 止 位 元 : 將 電 位 拉 高 , 宣 告 資 料 已 經 傳<br />
輸 完 畢 。<br />
• 因 此 , 最 常 用 的 傳 輸 格 式 常 記 為<br />
8-N-1<br />
8: 8 data bit<br />
N: No parity bit<br />
1: 1 start/stop bit( 有 些 設 備 較 慢 時 用<br />
2bits)<br />
Stop bit<br />
1 00 1 1 1 0 0 1
Qestion<br />
• 以 8-N-1, 9600 baud 傳 送 資 料 時 , 每<br />
秒 最 多 可 送 多 少 個 byte?<br />
• 以 7-E-1 送 則 如 每 秒 多 少 byte?<br />
960byte/s
防 止 資 料 遺 失<br />
• 使 用 Handshaking( 握 手 ) 可 不 用<br />
很 多 型 式 , 其 一 利 用 某 一 根 線 的 高 低 電 位 ( 如 DTR), 當 一<br />
端 準 備 收 資 料 時 先 拉 高 某 一 線 電 位 , 另 一 端 接 收 到 訊 息 後<br />
才 開 始 送 資 料 。 另 一 種 則 利 用 TD RD 線 , 傳 送 特 殊 的 byte<br />
當 成 準 備 接 收 資 料 的 代 號 。<br />
• 使 用 緩 衝 區 (buffer)<br />
• 使 用 中 斷 (interrupt) 或 詢 問 (polling)<br />
中 斷 : 有 事 件 發 生 時 執 行 Polling: 以 軟 體 不 斷 檢 查 資 料<br />
• 使 用 Acknowledgement( 確 認 )<br />
收 到 資 料 時 , 送 回 一 個 特 殊 byte 確 認 資 料 收 到 。<br />
• 錯 誤 檢 查 (error checking)<br />
送 checksum byte 給 接 收 端 檢 查 資 料 正 確 性<br />
有 問 題 , 通 知 重 送 資 料<br />
通 常 , 我 們 有 不 必 管 這 些 細 節 動 作<br />
這 些 都 是 <strong>RS232</strong> 本 身 的 功 能<br />
我 們 要 做 的 , 只 是 定 好 通 訊 方 式 , 開 啟 port, 送 資 料 , 接 收 資 料 而 已
誰 來 負 責 傳 輸 資 料 --UART<br />
(Universal Asynchronous<br />
Receiver/Transmitter)<br />
• 通 用 非 同 步 接 收 傳 送 器<br />
• 細 部 的 資 料 傳 輸 的 工 作 由 UART 電 路 元<br />
件 ( 如 PC 中 的 16550UART 晶 片 ) 自 動 去 完<br />
成<br />
• 我 們 的 程 式 只 要 負 責 把 通 訊 規 格 設 好 ( 如<br />
8-N-1), 送 收 資 料 即 可 。
另 一 個 常 用 的 序 列 介 面 RS485<br />
• <strong>RS232</strong> 連 線 長 度 只 能 50~100 呎 (17~33m), 一 個<br />
Comm Port 只 能 接 一 台<br />
• 為 了 因 應 工 廠 控 制 所 需 , 因 此 1993 年 訂 定<br />
RS485, 抗 雜 訊 能 力 提 高 , 距 離 可 達 4000 呎<br />
1333 米 !<br />
同 時 可 控 制 32 個 設 備<br />
• 其 優 點 為<br />
1. 比 <strong>RS232</strong> 便 宜 , 只 使 用 一 個 +5V 電 源 ,<br />
比 <strong>RS232</strong> 用 的 ±5V 方 便<br />
2. 網 路 功 能 : 可 長 距 離 、 多 儀 器 連 結 , 使 用 高 阻 抗<br />
的 接 收 器 , 甚 可 接 達 到 256 台<br />
3. 長 距 離 : 可 達 1333m<br />
4. 快 速 : 可 達 10Mbits/s, <strong>RS232</strong> 只 能 達<br />
~20Kbits/s
為 何 RS485 能 長 距 離 通 訊 ?<br />
• <strong>RS232</strong> 採 用 single ended(unbalanced),<br />
而 RS485 使 用 differential ended(balanced)<br />
• <strong>RS232</strong><br />
長 距 離 時 , 兩 個 ground 可 能 電 位 會 有 不 同 電 流 影 響 訊 號 接 收<br />
• RS485<br />
T/RA<br />
T/RB<br />
SG<br />
兩 導 線 是 同 大 小 , 方 向 相 反 電 流 , 所 產 生 電 磁 感 應 雜 訊 可 相 消 除<br />
而 且 只 看 電 壓 差 , 不 受 接 地 影 響
RS485 接 線 法<br />
基 本 上 只 有 三 條 線<br />
TRA TRB SG<br />
可 只 使 用 2 線<br />
須 加 終 端 電 阻<br />
每 台 機 器 虛 設 不 同 的<br />
位 址<br />
終 端 電 阻 加 在 電 腦 端 及<br />
最 遠 一 台 機 器 的 一 端<br />
需 搭 配 導 線 的 阻 抗 值<br />
( 必 須 大 於 75ohm)<br />
一 般 而 言 AWG24 線 使 用<br />
100~150ohm 即 可
有 些 電 阻<br />
可 能 內 建<br />
在 控 制 器<br />
AB 線 不 要<br />
亂 接 一 起<br />
http://www.hw.cz/english/docs/rs485/rs485.html
<strong>RS232</strong>RS485<br />
• 由 於 <strong>RS232</strong> 還 是 PC 現 有 的 介 面 , 因 此 常<br />
使 用 <strong>RS232</strong> 到 RS485 的 轉 接 器 , 以 便 利<br />
用 <strong>RS232</strong> 控 制 RS485 儀 器
使 用 VB 的 comm 控 制 項<br />
• VB 提 供 一 個 Microsoft Comm 6.0<br />
control 可 以 作 為 <strong>RS232</strong> 控 制<br />
• 注 意 : 最 好 使 用 9pin 或 25pin 全 部 連 線 都<br />
使 用 的 連 接 線 , 若 只 用 3 線 , 則 有 些 硬 體<br />
通 訊 規 格 需 要 更 動
設 定 好 所 需 的 通 訊 規 格
通 常 不 用 更 動 ( 除 非 有 問 題 )
Comm 控 制 元 件 的 細 節 資 料<br />
• 按 住 toolbox 中 的 comm 再 按 F1 則 可 出 現<br />
help 說 明<br />
TRY IT!
開 發 儀 器 控 制 程 式 步 驟<br />
• 閱 讀 使 用 手 冊<br />
• 了 解 介 面 : 了 解 儀 器 介 面<br />
• 建 立 測 試 專 案 : 寫 一 個 測 試 專 案 程 式 , 專 門 測 試<br />
通 訊 功 能 , 順 便 建 立 簡 易 的 程 式 庫<br />
• 建 立 程 式 庫 : 程 式 庫 最 好 能 獨 立 形 成 一 個 模 組 ,<br />
而 不 需 要 配 合 form 使 用<br />
• 建 立 使 用 者 介 面 : 設 計 表 單 配 合 該 模 組 使 用 , 以<br />
形 成 方 便 的 使 用 者 介 面 , 該 表 單 與 模 組 最 好 能<br />
獨 立 運 作 , 而 不 依 賴 外 部 的 變 數 或 物 件<br />
• 將 使 用 者 介 面 加 入 主 專 案 程 式 : 將 設 計 好 的 表 單<br />
及 模 組 加 入 主 專 案 程 式 中 , 便 可 直 接 使 用
<strong>RS232</strong> 控 制 基 本 動 作<br />
• 設 定 通 訊 規 格<br />
• 開 啟 <strong>RS232</strong> port<br />
• 送 資 料 出 去<br />
• 接 收 資 料 回 來<br />
• 關 閉 <strong>RS232</strong> port
設 定 通 訊 規 格<br />
-- 根 據 手 冊 與 儀 器 設 定 要 同
開 啟 <strong>RS232</strong> port<br />
• Comm1.PortOpen=true<br />
• 使 用 error checkOn error goto<br />
避 免 錯 誤 時 ( 例 如 沒 接 線 時 ) 程 式 一 直 亂 try<br />
• 可 用<br />
if comm1.portOpen=false then<br />
comm1.portOpen=true<br />
endif<br />
確 保 沒 有 重 新 開 啟 已 被 開 啟 的 Port<br />
例 如 mouse 常 使 用 comm1 port
送 指 令 出 去<br />
• Comm1.output=“PMT-ON”<br />
• 送 何 指 令 會 有 何 動 作 要 參 考<br />
使 用 手 冊<br />
早 期 有 時 指 令 是 ASC code 例 如<br />
chr(58)+chr(17)+chr(11)<br />
較 新 的 儀 器 是 用 看 得 懂 得 文 字 如<br />
“PMT-ON” “800V” “GOTO 500nm”<br />
“READ POSITION”<br />
• 有 時 還 會 有 加 一 些 檢 查 碼 要 跟 著 指 令 送<br />
• 基 本 上 手 冊 應 該 有 清 楚 的 說 明<br />
指 令 在 此
讀 資 料 回 來<br />
一 般 設 計 每 一 個 指 令 都 會<br />
傳 回 資 料 , 例 如 重 覆 一 下<br />
所 送 的 命 令 等 或 送 個 ”OK” 等<br />
• 依 據 儀 器 設 計 不 同 , 當 一 個 指 令 送 出 去 之 後 , 有 可 能 有 資 料<br />
回 傳 , 也 有 可 能 沒 有 資 料 回 傳 。 若 有 資 料 , 則 可 以 讀 取 回<br />
來 。 若 沒 資 料 回 傳 而 硬 讀 資 料 , 可 能 會 讀 不 到 資 料 而 卡 住 數<br />
秒 鐘 或 更 久 。check 手 冊<br />
• 讀 資 料 s=comm1.Input<br />
• 檢 查 有 無 資 料 a=comm1.InBufferCount<br />
• 確 定 資 料 都 讀 到<br />
有 時 電 腦 速 度 太 快 , 直 接 讀 comm1.input 會 只 讀 回 部 份 , 因<br />
此 , 一 般 儀 器 在 送 資 料 時 , 會 送 一 些 可 以 作 為 傳 輸 結 束 的 字<br />
元 , 例 如 CHR(13) 甚 或 ”OK”+Chr(13) 等<br />
必 須 依 照 資 料 傳 回 規 格 檢 查 , 以 免 亂 掉<br />
• 例 如 :ACTON Spectra pro500 光 譜 儀 下 ”GOTO<br />
300nm”, 光 譜 儀 便 開 始 移 動 光 柵 , 經 過 數 十 秒 鐘 後 , 到 達<br />
定 位 , 才 回 傳 ”OK””
例 TTM114 控 溫 器<br />
每 次 送 指 令 都 會 回 傳 資 料<br />
因 此 寫 個 副 程 式 來 抓 資 料<br />
Function TTM_resp(ByVal addr)<br />
Dim tim, b<br />
reset_timer tim<br />
Do<br />
b = b + comm.Input<br />
Loop Until (InStr(b, Chr(3)) 0) Or (timer_read(tim) > 3)<br />
If b = "" Then<br />
TTM_buffer = "Timeout"<br />
TTM_resp = "Timeout"<br />
Exit Function<br />
Else<br />
TTM_buffer = b<br />
TTM_resp = b<br />
End If<br />
End Function<br />
這 是 TTM114 的 特 殊 字 元 表 示 資 料 傳 完 了<br />
Reset_Timer var 與 Timer_read(var)<br />
是 hjssub 中 的 副 程 式 , 一 個 是 將 計 時 器 歸 零<br />
一 個 是 傳 回 歸 零 後 計 時 器 走 的 時 間<br />
Var 是 可 變 變 數<br />
TTM_bufer 是 公 用 變 數 暫 存 讀 回 資 料
關 閉 Comm port<br />
• 程 式 結 束 時 , 記 得 關 閉 comm port<br />
以 免 再 開 程 式 時 , 卡 住<br />
• 一 般 在 VB 中 , 當 按 停 止 時 , 會 自 動 關 閉<br />
comm port<br />
• Comm1.PortOpen=false
開 發 儀 器 控 制 程 式 步 驟<br />
• 閱 讀 使 用 手 冊<br />
• 了 解 介 面 : 了 解 儀 器 介 面<br />
• 建 立 測 試 專 案 : 寫 一 個 測 試 專 案 程 式 , 專 門 測 試<br />
通 訊 功 能 , 順 便 建 立 簡 易 的 程 式 庫<br />
• 建 立 程 式 庫 : 程 式 庫 最 好 能 獨 立 形 成 一 個 模 組 ,<br />
而 不 需 要 配 合 form 使 用<br />
• 建 立 使 用 者 介 面 : 設 計 表 單 配 合 該 模 組 使 用 , 以<br />
形 成 方 便 的 使 用 者 介 面 , 該 表 單 與 模 組 最 好 能<br />
獨 立 運 作 , 而 不 依 賴 外 部 的 變 數 或 物 件<br />
• 將 使 用 者 介 面 加 入 主 專 案 程 式 : 將 設 計 好 的 表 單<br />
及 模 組 加 入 主 專 案 程 式 中 , 便 可 直 接 使 用
光 電 半 導 體 製 程 常 用 到<br />
溫 度 控 制 器<br />
實 例<br />
久 德 電 子 TOHO114<br />
www.jetec.com.tw<br />
• 控 溫 器 的 控 制<br />
買 的 時 候 要 指 名 有 無 通 訊 介 面
<strong>RS232</strong>RS485<br />
• 由 於 <strong>RS232</strong> 還 是 PC 現 有 的 介 面 , 因 此 常<br />
使 用 <strong>RS232</strong> 到 RS485 的 轉 接 器 , 以 便 利<br />
用 <strong>RS232</strong> 控 制 RS485 儀 器
開 發 儀 器 控 制 程 式 步 驟<br />
• 閱 讀 使 用 手 冊 (intruction manual and comm.<br />
manual)<br />
• 了 解 介 面 : 了 解 儀 器 介 面 RS485<br />
• 建 立 測 試 專 案 : 寫 一 個 測 試 專 案 程 式 , 專 門 測 試<br />
通 訊 功 能 , 順 便 建 立 簡 易 的 程 式 庫<br />
• 建 立 程 式 庫 : 程 式 庫 最 好 能 獨 立 形 成 一 個 模 組 ,<br />
而 不 需 要 配 合 form 使 用<br />
• 建 立 使 用 者 介 面 : 設 計 表 單 配 合 該 模 組 使 用 , 以<br />
形 成 方 便 的 使 用 者 介 面 , 該 表 單 與 模 組 最 好 能<br />
獨 立 運 作 , 而 不 依 賴 外 部 的 變 數 或 物 件<br />
• 將 使 用 者 介 面 加 入 主 專 案 程 式 : 將 設 計 好 的 表 單<br />
及 模 組 加 入 主 專 案 程 式 中 , 便 可 直 接 使 用
了 解 介 面<br />
送 指 令<br />
要 求 回 傳<br />
PV1( 溫 度 )<br />
接 收 資 料 格 式<br />
收 玩 資 料 再 以<br />
字 串 處 理 抓 出<br />
777 度
建 立 測 試 專 案 來 開 發 程 式 庫<br />
• 為 了 方 便 使 用 , 將 程 式 包 裝 成 自 己 習 慣 的 方 式 程 式<br />
庫<br />
• 一 般 習 慣<br />
init_TTM(comm1)<br />
sub TTM_comman(cmd)<br />
function TTM_resp()<br />
function TTM_Temp_read ()<br />
sub TTM_set_temp (T)<br />
sub TTM_set_p<br />
sub TTM_set_i<br />
sub TTM_set_d<br />
function TTM_read_p<br />
function TTM_read_i<br />
function TTM_read_d<br />
…<br />
close_TTM<br />
直 接 將 comm1 物 件 傳 進 來<br />
好 處 是 程 式 庫 可 以 同 時 控 制 好 幾 台 機 器<br />
壞 處 是 速 度 會 變 慢 一 點
測 試 專 案 程 式
建 立 程 式 庫
建 立 使 用 者 介 面<br />
在 介 面 上 輸 入 溫 度 設 定 , 則 程 式 便 把 指 令 傳 給 儀 器<br />
濺 好 使 用 者 介 面 , 以 後 該 介 面 便 可 以 直 接 加 到 大 的 程 式 去 使 用 !<br />
Me.tag 是 一 個 沒 用 到 的 屬 性<br />
我 用 來 放 unit address<br />
因 為 有 好 幾 台 控 溫 器<br />
最 大 , 最 小 , 預 設 值<br />
更 新 資 料 用<br />
Hjssub 副 程 式 專 門 用 來 叫 使 用 者<br />
輸 入 一 定 範 圍 資 料 用
介 面 建 立 好 後 , 並 適 當 將 文 字 輸 入 框 命 名<br />
以 後 別 的 模 咀 要 設 定 TTM114 溫 度 , 不 需 呼 叫<br />
TTM_set_temp 指 令<br />
而 只 要 使 用 TTM114!setpoint=“100” 即 可<br />
簡 化 TTM 使 用 方 式<br />
進 一 步 地<br />
若 想 把 你 的 介 面<br />
拿 去 賣 錢<br />
可 以 把 程 式 包 裝 成<br />
一 個 控 制 項<br />
如 何 寫 控 制 項<br />
參 考 MSDN 說 明<br />
如 何 建 立 屬 性 、 事 件<br />
並 設 計 成 控 制 項 等<br />
寫 控 制 項 的 demo 說 明 在 此<br />
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon98/html/vbconcreatingactivexcontrol.asp
將 使 用 者 介 面 加 入 主 專 案 程 式<br />
• 把 一 系 列 的 使 用 者 介 面 加 進 到 專 案 程 式 可 形 成 一 個 大 程 式<br />
• 寫 程 式 的 時 候 除 非 有 錯 誤 否 則 盡 量 不 要 改 到 使 用 者 介 面 程 式 , 因<br />
為 可 能 不 只 一 個 專 案 程 式 用 到 該 介 面
成 為 整 合 程 式 設 計 快 手<br />
• 建 立 自 己 的 程 式 庫 及<br />
使 用 者 介 面<br />
• 需 要 時 直 接 組 合 起 來<br />
• 稍 加 修 改 OK!<br />
• 經 驗 累 積 !!
期 末 專 案<br />
• 下 次 交 要 寫 的 期 末 程 式<br />
• 直 接 討 論 程 式 如 何 設 計<br />
• 若 沒 有 直 接 指 定<br />
• Topics<br />
1. 介 紹 如 何 設 計 控 制 元 件<br />
2. 網 頁 字 典 ( 新 聞 ) 程 式<br />
3. 參 考 文 獻 資 料 庫 整 理 程 式<br />
4. 利 用 印 表 機 或 game port 做 控 制 示 範<br />
5.<strong>RS232</strong> 電 源 供 應 器 AAO( 多 孔 矽 )<br />
6.<strong>RS232</strong>->RS485 控 溫 器<br />
奈 米 製 程 成 長 光 電 材 料<br />
7. 如 何 用 電 腦 設 計 便 宜 的 optical chopper<br />
8. 光 導 量 測 系 統<br />
9. 其 他 Idea 討 論