22.07.2014 Views

RS232 介面程式控制

RS232 介面程式控制

RS232 介面程式控制

SHOW MORE
SHOW LESS

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 討 論

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!