逢 甲 大 學 自 動 控 制 工 程 學 系 專 題 製 作 專 題 論 文 精 密 雙 軸 平 台 之 微 動 控 制 設 計 The Design of Micromovement Control of the Precision X-Y Stage 指 導 教 授 : 張 興 政 學 生 : 鄭 慶 朗 中 華 民 國 九 十 三 年 六 月
逢 甲 大 學 自 動 控 制 工 程 學 系 專 題 製 作 專 題 論 文 精 密 雙 軸 平 台 之 微 動 控 制 設 計 The Design of Micromovement Control of the Precision X-Y Stage 學 生 : 鄭 慶 朗 經 專 題 口 試 合 格 特 此 證 明 考 試 日 期 : 中 華 民 國 九 十 三 年 五 月 六 日
感 謝 首 先 我 要 感 謝 我 的 指 導 教 授 張 興 政 博 士, 在 我 大 學 的 最 後 階 段 給 我 這 一 次 專 題 研 究 的 機 會 使 我 除 了 在 大 學 四 年 所 學 得 的 理 論 基 礎 之 外 能 再 藉 著 專 題 研 究 的 機 會 加 以 驗 證 學 習 並 且 培 養 我 們 發 現 問 題 進 而 學 習 如 何 解 決 問 題 的 能 力 另 外 我 也 要 感 謝 微 感 測 與 機 電 系 統 研 究 室 的 學 長 姊 們, 在 我 遇 到 困 難 時, 能 不 厭 其 煩 的 給 予 指 教 並 鼓 勵 如 果 沒 有 你 們, 本 專 題 一 定 無 法 順 利 完 成 最 後 我 要 感 謝 所 有 關 心 我 的 朋 友 同 學, 使 我 的 專 題 研 究 能 順 利 完 成 i
摘 要 本 文 主 要 是 以 Visual Basic 為 軟 體 架 構, 進 而 設 計 出 方 便 操 作 者 控 制 微 步 進 馬 達 控 制 器 的 人 機 介 面 控 制 程 式 主 要 可 分 成 三 種 操 作 方 法 :1. 隨 機 座 標 點 的 選 取 : 在 設 定 範 圍 後, 藉 由 隨 機 變 數 選 取 座 標 點 的 位 置, 直 接 下 達 指 令 控 制 步 進 馬 達 動 作 2. 滑 鼠 選 擇 操 作 點 : 藉 由 控 制 視 窗 讀 取 座 標 點, 並 且 由 滑 鼠 左 鍵 下 達 控 制 的 命 令, 可 做 即 時 的 控 制 步 進 馬 達 的 動 作 3. 規 則 座 標 點 的 選 取 另 外 再 將 控 制 器 的 一 些 有 用 的 指 令 製 成 功 能 表, 可 以 讓 操 作 者 在 控 制 微 步 進 馬 達 控 制 器 時, 能 更 簡 單 化 ii
Abstract The main purpose of this study is to design a human-machine interface for users to control the micro stepping motor controller easily. The software of this system is developed using Visual Basic. There are three methods to select operation points. First, selecting operation points control stage move by random variable. Second, using mouse selects operation points for controlling. Third, setting regular operation points control stage. Finally, the function menu is built that consists of useful commands for users to control the micro stepping motor controller easily. iii
目 錄 感 謝.i 摘 要........ii Abstract.... iii 目 錄... vi 圖 目 錄..... vii 表 目 錄..... viii 第 一 章 緒 論.. 1 1.1 研 究 動 機.....1 1.2 研 究 流 程.....2 第 二 章 操 作 原 理......5 2.1 步 進 馬 達 基 本 原 理..........5 2.1.1 步 進 馬 達 的 特 點.......5 2.1.2 步 進 馬 達 的 特 性....... 6 2.2 微 步 進 馬 達 驅 動 控 制 器......8 2.2.1 控 制 器 規 格 簡 介.....8 2.2.2 速 度 的 定 義.........9 2.2.3 原 始 的 控 制 程 式.......9 iv
2.2.4 原 始 的 程 式 碼.11 2.2.5 控 制 器 命 令 表.....15 2.2.5.1 設 定 命 令....15 2.2.5.2 運 動 命 令....16 2.2.5.3 讀 取 命 令....17 2.2.5.4 立 即 命 令....17 第 三 章 軟 體 設 計....18 3.1 Visual Basic 簡 介...18 3.1.1 物 件 導 向 觀 念. 18 3.1.2 圖 形 化 的 使 用 者 介 面.....19 3.2 控 制 程 式 的 設 計.... 19 3.2.1 隨 機 座 標 點 的 選 擇.........19 3.2.2 滑 鼠 操 作 座 標 點 的 選 取..... 21 3.2.3 規 則 量 測 點 的 選 取. 23 3.3 功 能 表 的 建 立........24 3.4 通 訊 物 件........25 3.5 通 訊 步 驟........26 3.5.1 RS-232 的 認 識....27 v
3.5.2 通 訊 協 定........27 3.6 程 式 碼....28 3.6.1 隨 機 座 標 點 的 選 擇..... 28 3.6.2 滑 鼠 操 作 點 的 選 擇.........42 3.6.3 規 則 量 測 點 的 選 擇..... 44 第 四 章 系 統 整 合 與 測 試.... 53 4.1 程 式 碼....53 4.1.1 新 增 物 件.......53 4.1.2 將 座 標 及 資 料 送 入 試 算 表.... 54 4.1.3 繪 圖 分 析.... 55 4.2 統 計 分 析 圖....56 第 五 章 結 論. 58 5.1 研 究 成 果.....58 5.2 未 來 研 究.....59 vi
圖 目 錄 圖 1.1 研 究 流 程 圖.....4 圖 2.1 高 速 運 轉 的 操 作 方 法.....6 圖 2.2 原 始 的 控 制 程 式... 10 圖 3.1 隨 機 座 標 點 的 選 擇... 20 圖 3.2 滑 鼠 操 作 座 標 點 的 選 取...21 圖 3.3 滑 鼠 操 作 座 標 點 的 程 式 邏 輯 流 程 圖...22 圖 3.4 規 則 量 測 點 動 作 示 意 圖.......23 圖 3.5 功 能 表 示 意 圖.......24 圖 3.6 MSComm 控 制 項...... 25 圖 3.7 MSComm 屬 性 設 定......26 圖 4.1 Excel 紀 錄 座 標 圖..... 56 圖 4.2 模 擬 9 點 分 析 參 數 設 定 圖.......57 圖 4.3 模 擬 9 點 分 析 折 線 圖...57 圖 5.1 搭 配 光 感 測 器 做 分 析...59 vii
表 目 錄 表 2.1 微 步 進 馬 達 控 制 器 功 能 表.... 8 表 2.2 控 制 器 設 定 命 令...15 表 2.3 控 制 器 運 動 命 令...16 表 2.4 控 制 器 讀 取 命 令...17 表 2.5 控 制 器 立 即 命 令... 17 viii
第 一 章 緒 論 1.1 研 究 動 機 隨 著 工 業 自 動 化 的 發 展, 使 在 步 進 馬 達 的 技 術 成 長 增 加 快 速 在 日 常 生 活 中 也 與 步 進 馬 達 脫 離 不 了 關 係, 舉 凡 個 人 電 腦 的 週 邊 硬 體 設 備, 都 需 要 用 到 步 進 馬 達 像 是 軟 式 磁 碟 機 硬 式 磁 碟 機 的 磁 頭 定 位, 印 表 機 的 送 紙 色 帶 的 帶 動 等 等 步 進 馬 達 都 扮 演 著 一 個 不 可 或 缺 的 角 色 在 本 專 題 中 所 使 用 的 微 步 進 馬 達 驅 動 控 制 器 是 由 坦 聯 公 司 所 製 造 的 隨 著 科 技 日 星 月 異 的 發 展, 控 制 器 的 功 能 也 越 來 越 多, 相 對 的, 控 制 器 的 指 令 也 會 越 來 越 多, 在 此 專 題 報 告 中 即 在 設 計 出 更 方 便 使 用 者 操 作 的 控 制 程 式, 並 可 用 來 做 資 料 的 擷 取 和 分 析, 利 用 微 步 進 馬 達 驅 動 控 制 器 的 精 密 定 位 的 特 性, 若 能 加 上 一 精 密 的 溫 度 感 測 器, 即 可 對 待 測 物 體 做 精 確 的 溫 度 分 析 在 微 步 進 馬 達 驅 動 控 制 器 的 控 制 程 式 設 計 時, 除 了 需 整 合 控 制 器 繁 複 的 控 制 指 令, 並 且 須 使 操 作 者 方 便 操 作 的 人 機 介 面, 使 操 作 者 在 控 制 馬 達 的 運 作 上 能 更 上 手 另 外 對 於 自 動 控 制 步 進 馬 達 的 移 動 方 向 並 且 即 時 取 得 移 動 點 的 座 標 位 置 的 紀 錄, 也 因 此 整 合 VB 和 EXCEL 對 於 未 來 加 上 感 測 器 所 量 得 的 資 料 所 做 的 紀 錄, 會 更 方 便 未 來 的 資 料 分 析 統 計 1
1.2 研 究 流 程 本 專 題 研 究 流 程 如 圖 1.1 所 示, 從 開 始 資 料 的 收 集 一 直 到 最 後 的 訊 號 量 測 分 析 與 實 驗 教 材 的 編 寫 是 缺 一 不 可 的 而 整 個 研 究 流 程 上 主 要 又 可 包 含 以 下 幾 個 部 分 : (1) 控 制 器 的 操 作 與 指 令 的 測 試 : 測 試 控 制 碼 的 指 令, 做 基 本 的 控 制, 並 且 確 認 完 整 的 指 令 碼, 避 免 未 來 在 與 控 制 器 作 通 訊 時, 即 使 已 經 正 確 的 連 結, 卻 因 指 令 碼 的 錯 誤, 而 無 法 正 確 的 控 制 微 步 進 馬 達 控 制 器 (2) 軟 體 架 構 的 選 擇 (VB) 與 學 習 : 原 始 的 程 式 碼 有 使 用 幾 種 不 同 的 程 式 語 言 如 BC DOS QB 及 VB 等 不 同 的 軟 體 架 構 經 過 考 慮 並 聽 從 學 長 的 建 議 後, 選 擇 較 容 易 學 習 及 設 計 的 Visual Basic 作 為 軟 體 架 構, 並 經 過 自 我 學 習, 而 開 始 設 計 微 步 進 馬 達 的 控 制 程 式 (3) 控 制 器 的 控 制 方 法 : 在 實 際 操 作 微 步 進 馬 達 控 制 器 後, 針 對 一 些 可 以 加 入 並 改 善 的 地 方 作 為 程 式 設 計 的 重 點 也 因 此 設 計 出 不 同 的 三 種 控 制 方 法 :1. 隨 機 座 標 點 的 程 式 設 計 2. 滑 鼠 操 作 座 標 點 的 選 取 3. 規 則 量 測 點 的 選 取 2
(4) 三 種 控 制 方 法 整 合 成 多 表 單 格 式 : 將 隨 機 座 標 點 的 選 擇 製 成 主 表 單, 其 他 的 兩 種 操 作 方 法 製 成 第 二 及 第 三 表 單, 使 在 操 作 時 能 隨 意 切 換 不 同 的 操 作 視 窗, 而 使 用 不 同 的 控 制 方 法 (5) 將 所 設 計 的 程 式 與 控 制 器 的 連 結 : 在 程 式 設 計 完 成 之 後, 為 了 能 正 確 的 傳 送 出 指 令, 就 必 須 在 Visual Basic 的 通 訊 物 件 MSComm 上 設 定 好 屬 性, 設 定 控 制 器 與 程 式 間 的 通 訊 協 定, 才 能 正 確 的 傳 送 指 令 (6) 與 Excel 做 連 結 : 由 於 Visual Basic 的 物 件 並 沒 有 與 office 連 結 的 物 件, 所 以 必 須 在 程 式 上 新 增 一 個 物 件, 並 作 好 資 料 與 試 算 表 (Excel) 的 連 結 (7) 模 擬 資 料 的 擷 取 及 資 料 分 析 : 利 用 VB 的 隨 機 變 數 物 件 模 擬 資 料 的 接 收, 已 確 定 資 料 能 正 確 的 傳 送 至 試 算 表 (Excel), 並 再 設 計 一 個 繪 圖 分 析 按 鈕 來 做 即 時 的 圖 形 分 析, 在 偵 錯 測 試 無 誤 後, 最 後 並 製 成 執 行 檔 以 利 未 來 操 作 的 方 便 3
微 步 進 馬 驅 動 控 制 控 制 器 的 操 作 與 指 令 的 測 試 軟 體 架 構 的 選 擇 (VB) 與 學 習 控 制 器 的 控 制 方 法 隨 機 座 標 點 的 程 式 設 計 滑 鼠 操 作 座 標 點 的 選 取 規 則 量 測 點 的 選 取 三 種 控 制 方 法 整 合 成 多 表 單 格 式 將 所 設 計 的 程 式 與 控 制 器 的 連 結 否 是 與 Excel 做 連 結 模 擬 資 料 的 擷 取 及 資 料 分 析 將 程 式 製 成 執 行 檔 並 偵 錯 否 是 論 文 寫 作 並 發 表 圖 1.1 研 究 流 程 圖 4
第 二 章 操 作 原 理 步 進 馬 達 特 性 之 一 是 旋 轉 的 角 度 和 輸 入 的 脈 波 數 成 正 比 因 此 可 以 利 用 一 些 控 制 的 方 法 使 之 達 成 高 精 確 角 度 及 高 精 密 定 位 的 要 求 步 進 的 大 小 是 由 轉 子 和 定 子 的 數 目 所 決 定 的, 而 且 沒 有 累 積 誤 差 (cumulative error)- 不 管 選 取 多 少 步 數, 這 角 度 的 誤 差 是 不 會 增 加 的 在 步 進 碼 達 的 控 制 系 統 大 都 屬 於 開 迴 路 控 制, 就 是 控 制 器 送 給 馬 達 一 定 的 步 進 數 目 之 命 令, 同 時 假 設 馬 達 到 達 正 確 的 位 置 2.1 步 進 馬 達 基 本 原 理 2.1.1 步 進 馬 達 的 特 點 步 進 馬 達 的 特 點 : (1) 旋 轉 角 度 和 輸 入 的 脈 波 數 成 正 比, 因 此 用 開 迴 路 控 制 即 可 達 成 高 精 確 角 度 及 高 精 密 定 位 的 要 求 (2) 啟 動 停 止 鄭 反 轉 的 應 答 性 良 好, 控 制 容 易 (3) 每 一 步 級 的 角 度 誤 差 小, 而 且 沒 有 累 積 誤 差 (4) 在 可 控 制 的 範 圍 內, 轉 速 和 脈 波 的 頻 率 成 正 比, 所 以 變 速 的 範 圍 相 當 廣 (5) 靜 止 時, 步 進 馬 達 有 很 高 的 保 持 轉 矩 ( holding torque), 可 保 持 在 停 止 位 置, 不 需 使 用 煞 車 器 即 不 會 自 由 轉 動 (6) 在 超 低 速 有 很 高 的 轉 矩 5
(7) 可 靠 性 高, 不 需 保 養, 整 個 系 統 的 價 格 低 廉 步 進 馬 達 的 用 途 : (1) 軟 式 磁 碟 機 : 磁 頭 定 位 (2) 硬 式 磁 碟 機 : 磁 頭 定 位 (3) 印 表 機 : 紙 張 傳 送 印 字 頭 驅 動 色 帶 驅 動 (4) 傳 真 機 : 紙 張 傳 送 (5) 影 印 機 : 紙 張 傳 送 鏡 頭 驅 動 XY table 2.1.2 步 進 馬 達 的 特 性 步 進 馬 達 的 分 類 : (1)VR 型 步 進 馬 達 : 可 變 磁 阻 型 (variable reluctance type) 步 進 馬 達, 轉 子 以 軟 鐵 加 工 而 成, 步 級 角 通 常 為 15 (2)PM 型 步 進 馬 達 : 永 久 磁 鐵 型 (permanent magnet type) 步 進 馬 達, 轉 子 是 用 永 久 磁 鐵 製 成, 步 級 角 有 18 15 11.25 7.5 等 (3) HB 型 步 進 馬 達 : 複 合 型 (hybrid type) 步 進 馬 達, 轉 子 是 在 永 久 磁 鐵 上 包 以 多 齒 的 軟 鐵 製 成, 步 級 角 可 小 於 1.8 步 進 馬 達 的 特 性 : (1) 速 度 - 轉 矩 特 性 曲 線 (speed-torque curve): 脈 波 頻 率 時 間 緩 慢 啟 動 定 速 運 轉 緩 慢 停 止 圖 2.1 高 速 運 轉 的 操 作 方 法 6
(2) 激 磁 最 大 靜 止 轉 矩 (holding torque): 2 相 步 進 馬 達 採 用 2 相 激 磁, 或 5 相 步 進 馬 達 採 用 5 相 激 磁, 各 項 都 通 過 額 定 電 流 而 令 轉 子 靜 止 不 動 所 產 生 的 最 大 轉 矩, 稱 為 激 磁 最 大 靜 止 轉 矩 (3) 無 激 磁 保 持 轉 矩 (detent torque): PM 型 步 進 馬 達 及 HB 型 步 進 馬 達 的 轉 子 都 使 用 永 久 磁 鐵, 所 以 在 各 相 線 圈 都 沒 有 通 過 電 流 時, 還 能 產 生 將 轉 子 保 持 在 現 有 位 置 的 轉 矩, 稱 為 無 激 磁 保 持 轉 矩 (4) 引 入 轉 矩 (pull-in torque): 這 是 步 進 馬 達 能 夠 與 輸 入 的 脈 波 信 號 同 步 啟 動 停 止 的 最 大 轉 矩 負 荷 大 於 引 入 轉 矩 時, 步 進 馬 達 無 法 瞬 時 啟 動, 必 須 先 做 低 速 啟 動, 然 後 才 逐 漸 提 高 轉 速 (5) 托 出 轉 矩 (pull-out torque): 步 進 馬 達 以 某 固 定 的 脈 波 頻 率 運 轉, 輸 出 軸 的 負 荷 逐 漸 加 重, 直 到 失 步 前 的 轉 矩 當 超 過 托 出 轉 矩 的 負 荷 加 於 步 進 馬 達 時, 步 進 馬 達 將 產 生 失 步 的 現 象 而 停 止 轉 動 (6) 自 啟 動 領 域 (start stop region): 指 步 進 馬 達 在 無 負 荷 時, 能 夠 與 輸 入 的 脈 波 信 號 同 步 而 瞬 時 啟 動 停 止 正 反 轉 的 可 能 領 域 當 加 上 負 荷 時, 自 啟 動 領 域 會 向 左 側 縮 小 (7) 運 轉 領 域 (slew range): 這 是 步 進 馬 達 的 高 速 領 域 步 進 馬 達 欲 在 此 領 域 運 轉, 則 輸 入 的 脈 波 信 號 頻 率 必 須 做 緩 慢 上 升 緩 慢 下 降 之 操 作, 如 圖 2.1 所 示 7
2.2 微 步 進 馬 達 驅 動 控 制 器 2.2.1 控 制 器 規 格 簡 介 驅 動 電 流 :1.5A / Phase 驅 動 電 壓 :30V / DC 使 用 電 流 :AC 100V + / - 10% 50 / 60 HZ 基 本 步 :(1.8 度 ) 做 1 / 8 細 分 速 度 : 從 25PPS~8000PPS RS232 傳 輸 規 格 : 9600 鮑 率 1 起 始 位 元 8 資 料 位 元 1 停 止 位 元 無 同 位 元 檢 查 XON/XOFF 交 換 控 制 功 能 表 : 電 腦 傳 輸 軸 數 加 減 速 控 制 手 動 進 給 基 本 動 作 程 式 語 言 表 2.1 微 步 進 馬 達 控 制 器 功 能 表 RS232 2,3 軸 定 速, 等 速, 加 速 JOG 模 式, 手 動 操 作 (Windows) X,Y,Z 軸 移 動, 同 步 移 動, 原 點 Limit 功 能 Basic C Turbo 高 階 語 言 一 馬 達 解 析 :1600 步 / 圈 ( 另 提 供 解 析 50000 步 細 分 割 ) 8
二 移 動 台 應 用 : 配 合 滾 珠 螺 桿 (1) 4 mm / 圈 (2) 2 mm / 圈 解 析 可 達 (1) 2.5μm / 步 (2) 1.25μm / 步 三 旋 轉 台 應 用 : 配 合 齒 輪 比 (1) 1 : 45 解 析 可 達 (1) 0.005 度 / 步 2.2.2 速 度 的 定 義 本 控 制 器 的 預 設 值 為 初 速 =1000PPS(pulse per second) 高 速 =4000PPS 加 減 速 步 數 =800 步 進 馬 達 旋 轉 時, 若 旋 轉 速 度 並 無 嚴 格 要 求 時, 可 在 馬 達 之 可 啟 動 的 範 圍 內 以 定 速 運 動 最 簡 單, 但 若 要 提 升 速 度, 便 要 在 可 加 速 特 性 內 加 速, 以 期 在 最 少 步 數 內 達 到 預 定 的 轉 述 加 速 之 方 法 惟 梯 形 式 或 三 角 形 加 速, 當 總 步 數 大 於 2 倍 之 加 減 數 步 數, 則 為 梯 形 加 速, 其 餘 減 速 之 方 法 與 加 速 同 初 速 之 範 圍 視 不 同 之 馬 達 而 有 所 不 同, 一 般 為 500~2500PPS 間 為 自 啟 動 頻 率 步 進 馬 達 在 低 速 時 有 共 振 區, 再 設 定 時 最 好 能 避 開 高 速 之 設 定 視 機 構 之 架 構 及 負 載 有 關, 最 高 速 為 8000PPS, 若 有 失 步 即 無 法 帶 動 之 現 象, 則 要 降 低 其 值, 以 不 失 步 為 原 則 加 速 步 數 愈 大 則 加 速 愈 為 平 穩, 愈 小 則 加 速 時 間 愈 短 Ex: :SI1000,5000,200 ----- 初 速 1000PPS, 高 速 5000PPS, 加 速 步 數 為 200 步 :SI3000,8000,1000---- 初 速 3000PPS, 高 速 8000PPS, 加 速 步 數 為 1000 步 2.2.3 原 始 的 控 制 程 式 A:RS232 預 設 的 通 訊 埠 位 置 在 程 式 執 行 時, 即 會 進 行 通 訊 埠 檢 查, 如 果 通 訊 埠 已 被 使 用, 則 會 出 現 對 話 視 窗, 請 求 更 換 通 訊 埠 9
B:X Y Z 軸 的 增 量 位 移, 將 移 動 的 步 數 輸 入 後, 再 選 擇 所 要 移 動 的 軸 及 正 負 方 向 Command 列 : 指 令 輸 入 列 Display 列 : 可 以 顯 示 目 前 的 座 標 位 置, 並 將 最 新 的 座 標 位 置 至 於 最 下 方 SET 0: 可 以 選 擇 任 意 點 座 標, 並 將 此 點 座 標 設 定 為 原 點 STOP: 緊 急 停 止 EXIT: 結 束 程 式 圖 2.2 原 始 的 控 制 程 式 10
2.2.4 原 始 的 程 式 碼 Private Sub Command1_Click() MSComm1.Output = ",:U" & Text1.Text & vbcr Private Sub Command10_Click() MSComm1.Output = "a" & vbcr Private Sub Command11_Click() MSComm1.Output = ",:SP0,0,0" & vbcr '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' 使 用 命 令 按 鈕 控 制 項 ' 結 束 系 統 的 動 作 ' 將 通 訊 埠 予 以 關 閉 ' 使 用 End 敘 述 結 束 系 統 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub Command2_Click() MSComm1.PortOpen = False End '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' 使 用 命 令 按 鈕 控 制 項 ' 命 令 字 串 的 傳 送 程 序 ' 使 用 output 的 屬 性 將 字 串 傳 送 出 去 ' 特 別 注 意 傳 送 字 串 後 面 所 加 的 vbcr 常 數, 必 須 有 此 一 結 束 字 元 11
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub Command3_Click() MSComm1.Output = Text3.Text & vbcr Private Sub Command4_Click() MSComm1.Output = ",:U-" & Text1.Text & vbcr Private Sub Command5_Click() MSComm1.Output = ",:V" & Text1.Text & vbcr Private Sub Command6_Click() MSComm1.Output = ",:V-" & Text1.Text & vbcr Private Sub Command7_Click() MSComm1.Output = ",:W" & Text1.Text & vbcr Private Sub Command8_Click() MSComm1.Output = ",:W-" & Text1.Text & vbcr Private Sub Command9_Click() MSComm1.Output = "b" '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' 先 設 定 通 訊 埠 號 碼 2 ' 進 行 通 訊 埠 的 檢 查, 若 通 訊 埠 已 被 使 用, 則 更 換 之 ' 開 啟 通 訊 埠 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 12
Private Sub Form_Load() MSComm1.CommPort = 2 On Error Resume Next ' 若 錯 誤 發 生, 跳 至 下 一 個 敘 述 optcom(1).value = True If MSComm1.PortOpen Then MsgBox " 串 列 埠 2 已 被 其 他 設 備 所 使 用, 請 選 擇 Com1", vbexclamation + vbokonly, " 系 統 訊 息 " Exit Sub Else MSComm1.PortOpen = True End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' 通 訊 物 件 的 OnComm 通 訊 事 件 'RThreshold 屬 性 已 被 我 們 設 定 成 1, 因 此 只 要 有 字 元 進 入 就 會 引 發 接 收 事 件 ' 在 接 收 的 副 程 式 中, 首 先 延 遲 100 毫 秒, 接 著 就 是 將 資 料 進 來 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent ' 事 件 Case comevcd ' CD 線 的 狀 態 發 生 變 化. Case comevcts ' CTS 線 的 狀 態 發 生 變 化. Case comevdsr ' DSR 線 的 狀 態 發 生 變 化. Case comevring ' Ring Indicator 變 化. Case comevreceive ' 收 到 RThreshold # of TimeDelay 100 ' 延 遲 100 毫 秒 13
Text2.Text = Text2.Text & MSComm1.Input ' 將 資 料 收 進 來, 指 定 給 文 字 框 Text2.SelStart = Len(Text2.Text) 文 字 框 的 顯 示 放 在 最 未 端, 以 看 到 最 新 的 資 料 Case comevsend ' 傳 輸 暫 存 區 有 Sthreshold 個 字 元 End Select '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' 使 用 Option 控 制 項 ' 讓 使 用 者 可 以 選 擇 不 一 樣 的 通 訊 埠 ' 若 通 訊 埠 可 以 使 用, 則 逕 行 開 啟 ; 若 不 可 使 用, 亦 通 知 使 用 者 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub optcom_click(index As Integer) On Error Resume Next MSComm1.PortOpen = False MSComm1.CommPort = Index + 1 If MSComm1.PortOpen Then MsgBox " 所 選 的 串 列 埠 已 被 其 他 設 備 所 使 用!", vbexclamation + vbokonly, " 系 統 訊 息 " Exit Sub Else MSComm1.PortOpen = True End If 14
2.2.5 控 制 器 命 令 表 2.2.5.1 設 定 命 令 設 定 命 令 SI< 初 速 >,< 高 速 >,< 步 數 >, SE0 SE1 SE2 SE3 SX<X 軸 位 置 >, SY<Y 軸 位 置 >, SZ<Y 軸 位 置 >, SP<X 軸 位 置 >,<Y 軸 位 置 >, <Y 軸 位 置 >, 表 2.2 控 制 器 設 定 命 令 說 明 梯 形 加 減 速 設 定 ( 單 位 :PPS) < 初 速 >:50~2000 < 高 速 >:50~6000 < 步 數 >:10~4000 RS232 傳 輸 回 應 設 定 SE0: 傳 輸 回 應 OFF SE1: 傳 輸 回 應 ON SE2: 命 令 完 成 回 應 OFF SE3: 命 令 完 成 回 應 ON 單 軸 或 三 軸 位 置 設 定 位 置 範 圍 :-8388608 ~ 8388607 範 例 1: 設 定 X 軸 目 前 位 置 為 0 :SX0, 範 例 2: 設 定 三 軸 目 前 位 置 為 (100,200,300) :SP100,200,300, 2.2.5.2 運 動 命 令 運 動 命 令 X<X 軸 位 置 >, Y<Y 軸 位 置 >, Z<Z 軸 位 置 >, 表 2.3 控 制 器 運 動 命 令 說 明 絕 對 位 置 運 動 命 令 位 置 範 圍 :-8388608 ~ 8388607 範 例 1: 設 定 X 軸 運 動 至 1000 位 置 :X1000, 15
P<X 軸 位 置 >,<Y 軸 位 置 >,<Z 軸 位 置 >, 範 例 2: 設 定 三 軸 運 動 至 (100,200,300) 位 置 :P100,200,300, U<X 軸 位 置 增 量 >, V<Y 軸 位 置 增 量 >, W<Z 軸 位 置 增 量 >, F<X 軸 位 置 增 量 >,<Y 軸 位 置 增 量 >,<Z 軸 位 置 增 量 >, 相 對 位 置 運 動 命 令 位 置 範 圍 :-8388608 ~ 8388607 範 例 1: X 軸 目 前 位 置 為 1000 設 定 X 軸 增 量 運 動 至 2000 位 置 :U1000, 範 例 2: 三 軸 目 前 位 置 為 (100,200,300) 設 定 三 軸 增 量 運 動 至 (200,100,400) 位 置 :F100,-100,100, 2.2.5.3 讀 取 命 令 讀 取 命 令 RX RY RZ RP 表 2.4 控 制 器 讀 取 命 令 說 明 讀 取 單 軸 或 三 軸 位 置 值 2.2.5.4 立 即 命 令 立 即 命 令 r b a 表 2.5 控 制 器 立 即 命 令 說 明 立 即 讀 取 控 制 器 狀 態 回 傳. 為 busy > 及 L 為 ready 運 動 立 即 停 止 命 令 運 動 位 置 立 即 回 應 16
第 三 章 軟 體 設 計 3.1 Visual Basic 簡 介 Visual Basic 是 Basic 的 延 伸,Basic 的 全 名 為 (Beginners/All-purpose Symbolic Instruction Code), 是 一 個 初 學 者 很 容 易 學 習 的 語 言, 通 常 程 式 設 計 師 會 以 Basic 來 作 為 入 門, 而 自 從 視 窗 軟 體 風 行 後, 就 會 導 入 了 以 圖 形 為 介 面 的 Basic, 稱 之 為 Visual Basic Visual Basic 對 於 開 發 而 言 是 很 有 效 的 工 具, 並 且 脫 離 了 初 學 者 語 言 的 潛 在 印 象, 因 為 Visual Basic 可 以 快 速 的 建 立 各 種 複 雜 的 功 能, 並 節 省 程 式 設 計 師 所 需 消 耗 的 時 間, 可 讓 程 式 設 計 人 員 將 時 間 用 在 功 能 的 開 發 上, 而 不 是 重 複 的 無 聊 的 設 計 作 業, 所 以 Visual Basic 也 視 之 為 快 速 的 應 用 程 式 發 展 工 具 所 謂 Visual 主 要 是 指 GUI(Graphic User Interface) 的 介 面, 也 就 是 圖 形 使 用 者 介 面, 此 程 式 語 言 具 有 圖 形 元 件 的 預 設 物 件, 例 如 : 指 令 按 鈕 文 字 方 塊 等 等 設 計 者 只 要 將 控 制 項 拖 曳 到 表 單 上, 就 可 顯 示 物 件 的 外 觀, 並 調 整 其 外 觀 的 設 定, 然 後 利 用 物 件 的 介 面 再 加 入 程 式 碼, 就 可 以 讓 使 用 者 利 用 此 程 式 語 言 來 進 行 開 發, 是 非 常 輕 鬆 和 愉 快 的 設 計 環 境 3.1.1 物 件 導 向 觀 念 何 謂 物 件 導 向? 為 了 測 試 設 計 出 的 電 源 供 應 電 路 是 否 適 用 於 系 統 電 路, 必 須 先 進 行 測 試 其 輸 出 功 率 的 能 力, 也 就 是 測 試 電 路 的 定 電 壓 效 果 是 否 良 好, 首 先 我 們 先 量 測 系 統 電 路 所 需 消 耗 的 電 流 量, 測 試 出 感 測 器 系 統 只 要 電 源 電 路 能 提 供 0.15mA 以 上 的 電 流 輸 出, 系 統 即 可 正 常 運 作, 因 此 我 們 在 電 源 電 路 的 輸 17
出 埠 外 接 功 率 可 變 電 阻 當 作 負 載, 測 試 輸 出 電 流 ( 輸 出 功 率 ) 的 能 力, 表 3.1 為 實 驗 結 果, 可 看 出 電 源 電 路 在 輸 出 電 流 0.2mA 以 下 皆 能 維 持 定 電 壓 且 誤 差 低 於 5%, 因 此 我 們 可 以 確 定 此 電 源 供 應 電 路 確 實 能 當 做 酒 精 感 測 模 組 的 電 源 供 應 3.1.2 圖 形 化 的 使 用 者 介 面 -GUI(Graphic User Interface) Windows 視 窗 系 統 問 世 後, 個 人 電 腦 的 銷 售 量 每 年 持 續 大 幅 度 的 成 長, 主 要 的 原 因 是 使 用 個 人 電 腦 不 在 是 那 麼 樣 的 困 惑, 親 切 易 懂 的 圖 形 介 面, 讓 使 用 者 排 除 了 使 用 電 腦 的 恐 懼 感, 從 此 電 腦 的 使 用 不 在 是 電 腦 專 業 人 士 的 特 權 Windows 視 窗 系 統 推 出 之 後,Microsoft 公 司 為 了 鞏 固 視 窗 系 統 在 作 業 系 統 市 場 的 佔 有 率, 隨 後 積 極 推 出 許 多 視 窗 軟 體 的 開 發 工 具, 如 Visual C++ Visual Basic 等 等 ( 這 一 系 列 視 窗 軟 體 開 發 工 具, 微 軟 公 司 稱 之 為 Visual Studio) 這 些 後 來 推 出 的 Visual XXX 與 原 先 就 存 在 的 XXX 最 大 的 不 同 是 :Visual XXX 可 以 快 速 的 設 計 出 操 作 容 易 具 親 和 力 的 圖 形 化 使 用 介 面 (GUI-Graphic User Interface) 3.2 控 制 程 式 的 設 計 3.2.1 隨 機 座 標 點 的 選 擇 在 執 行 程 式 後, 必 須 先 在 A 區 設 定 所 使 用 的 通 訊 埠, 由 於 個 人 電 腦 中 的 第 一 通 訊 埠 可 能 會 常 被 使 用, 所 以 預 設 的 通 訊 埠 微 第 二 通 訊 埠 在 設 定 參 數 前 需 先 18
開 啟 Excel 試 算 表 (B 區 ), 以 免 程 式 執 行 時 出 現 錯 誤 最 後 在 進 行 參 數 的 設 定 (C 區 ), 設 定 完 成 後 在 開 啟 開 始 量 測 即 會 出 現 一 新 視 窗, 即 時 出 現 該 點 的 座 標 點 圖 3.1 隨 機 座 標 點 的 選 擇 19
3.2.2 滑 鼠 操 作 座 標 點 的 選 取 在 滑 鼠 操 作 模 式 下, 主 要 是 由 觸 動 滑 鼠 移 動 事 件 開 始, 會 在 圖 中 所 示 的 A 區 顯 示 目 前 滑 鼠 座 標 值 :X=,Y= 在 選 定 座 標 點 後, 會 出 現 ToolTip Text 在 圖 中 即 為 B 區, 會 出 現 已 選 定 的 座 標 點, 按 滑 鼠 左 鍵 之 後, 亦 會 出 現 一 對 話 視 窗, 做 最 後 的 確 認 動 作 (C 區 ), 選 擇 確 定 之 後 控 制 器 即 會 移 動 到 所 選 擇 的 座 標 點 圖 3.2 滑 鼠 操 作 座 標 點 的 選 取 20
M ousem ove 事 件 的 驅 動 在 視 窗 的 C a p tio n 顯 示 目 前 的 座 標 值 選 定 座 標 值 後, 按 滑 鼠 左 鍵 以 觸 動 選 擇 事 件 確 定 是 否 選 擇 該 座 標 值 否 是 微 步 進 馬 達 控 制 器 移 動 至 該 座 標 值 繼 續 選 擇 下 一 點 座 標 是 否 結 束 返 回 主 視 窗 圖 3.3 滑 鼠 操 作 座 標 點 的 程 式 邏 輯 流 程 圖 21
3.2.3 規 則 量 測 點 的 選 取 (1) 首 先 決 定 待 測 物 的 長 度 (L) 寬 度 (W) 來 決 定 X-Y 平 面 的 區 域 大 小, 避 免 量 測 時 超 出 待 測 物 的 範 圍, 而 得 到 錯 誤 的 數 值 (2) 需 以 右 上 角 為 起 始 點, 所 以 必 須 謹 慎 決 定 起 點, 避 免 待 測 物 太 大 時, 超 過 X- Y table 的 範 圍 (3) 決 定 X 軸 及 Y 軸 的 量 測 點 數 及 量 測 距 離 : 配 合 已 經 知 道 的 長 度 及 寬 度, 設 定 X 及 Y 軸 的 所 需 要 的 點 數 及 單 位 長 度 (4)X 方 向 的 點 數 :m,x 方 向 的 單 位 長 度 :j,y 方 向 的 點 數 :n,y 方 向 的 單 位 長 度 :i 此 處 需 特 別 注 意 的 是 在 設 定 點 數 及 單 位 長 度 時, 需 讓 m j < W; 同 樣 的 需 讓 n i < L (5) 最 後 再 設 定 點 與 點 之 間 的 量 測 時 間, 避 免 還 未 讀 取 到 值 就 移 動 到 下 一 點 X 方 向 有 m 點 ( 起 始 點 ) i Y 方 向 有 n 點 j 圖 3.4 規 則 量 測 點 動 作 示 意 圖 22
3.3 功 能 表 的 建 立 為 了 方 便 使 用 者 的 操 作 且 免 於 記 一 些 較 繁 複 的 指 令, 所 以 在 設 計 程 式 時 另 外 在 建 立 了 功 能 表 列, 特 別 將 一 些 常 用 到 指 令 如 : 設 定 命 令 運 動 命 令 讀 取 命 令 等, 都 建 立 在 功 能 表 列, 在 操 作 微 步 進 馬 達 控 制 器 時, 可 以 在 功 能 表 列 找 尋 自 己 所 需 要 的 指 令 在 使 用 功 能 表 時, 找 到 自 己 所 需 要 的 指 令 後, 按 滑 鼠 左 鍵 即 可 在 指 令 輸 入 列 複 製 相 同 的 指 令, 再 將 所 需 要 移 動 的 步 數, 在 移 動 的 軸 方 向 修 改 填 入 即 可 圖 3.5 功 能 表 示 意 圖 23
3.4 通 訊 物 件 圖 3.6 MSComm 控 制 項 MSComm 控 制 項 :Visual Basic 的 串 列 通 訊 物 件 (MSComm 物 件 ) 乃 市 將 RS- 232 的 低 階 動 作 予 以 封 裝, 使 用 者 以 高 階 的 Basic 語 法 即 可 與 外 界 通 訊, 並 不 需 要 了 解 其 他 有 關 的 低 階 動 作 MSComm 屬 性 : 由 於 MSComm 控 制 項 的 屬 性 眾 多, 以 下 將 就 重 要 屬 性 簡 單 說 明 如 下 : Commport: 設 定 或 傳 回 通 訊 連 接 埠 的 代 號 程 式 必 須 指 定 所 要 使 用 的 串 列 埠 號 碼,Windows 系 統 會 使 用 所 設 定 的 通 訊 埠 與 外 界 作 通 訊 Settings: 設 定 初 始 化 參 數 以 字 串 的 型 式 設 定 或 傳 回 連 線 速 度 同 位 檢 查 資 料 位 元 停 止 位 元 等 四 個 參 數 9600,N,8,1 其 意 為 所 使 用 的 通 訊 埠 是 以 9600Bit 的 速 度 做 傳 輸, 不 做 同 位 元 檢 查, 每 次 的 資 料 是 8 個 Bit, 停 止 位 元 是 1 個 Bit RThreshold: 設 定 或 傳 回 引 發 接 收 事 件 的 位 元 組 數, 當 接 收 暫 存 區 達 到 所 設 定 的 位 元 組 數 時, 將 會 引 發 接 收 事 件 SThreshold: 若 設 定 Sthreshold 屬 性 為 0, 則 數 據 傳 輸 事 件 不 會 產 生 傳 送 事 件 24
若 設 定 Sthreshold 屬 性 為 1, 將 在 傳 輸 暫 存 區 完 全 空 時 才 產 生 傳 送 事 件 例 : MSComm1.Sthreshold=20, 當 傳 送 暫 存 區 字 元 少 於 20 個 字 元 時 才 引 發 傳 送 事 件 圖 3.7 MSComm 屬 性 設 定 3.5 通 訊 步 驟 在 設 計 好 自 己 的 程 式 後, 必 須 再 做 好 Visual Basic 的 MSComm 控 制 項 屬 性 設 定, 才 能 正 確 的 傳 送 出 指 令 通 常 都 以 下 面 步 驟 來 使 用 Visual Basic 的 MSComm 控 制 項 作 通 訊 控 制 : 25
1. 加 入 通 訊 物 件 也 就 是 MSComm 物 件 2. 設 定 通 訊 埠 號 碼 即 CommPort 屬 性 3. 設 定 通 訊 協 定 即 HandShaking 屬 性 4. 設 定 傳 輸 速 度 等 參 數 即 Settings 屬 性 5. 設 定 其 他 參 數 若 必 要 時 再 加 上 其 他 的 屬 性 設 定 6. 開 啟 通 訊 埠 即 PortOpen 屬 性 設 成 True 7. 送 出 字 串 或 讀 入 字 串 使 用 Input 及 Output 屬 性 使 用 完 MSComm 通 訊 物 件 後, 將 通 訊 埠 關 閉 即 PortOpen 屬 性 設 成 False 3.5.1 RS-232 的 認 識 隨 著 個 人 電 腦 及 週 邊 機 器 價 格 的 降 低, 很 多 自 動 控 制 系 統 已 開 始 和 個 人 電 腦 PC 連 線 作 監 控 由 於 利 用 RS-232 作 雙 向 資 料 通 訊 時, 只 需 3 條 接 線 即 可, 甚 為 簡 潔, 所 以 RS-232 串 列 通 訊 埠 已 經 成 為 個 人 電 腦 的 標 準 配 備 而 在 目 前 的 個 人 電 腦 都 附 有 兩 個 RS-232 串 列 埠 供 我 們 使 用, 分 別 稱 為 COM1 和 COM2, 可 供 連 接 數 據 機 (Modem) 或 滑 鼠 (Mouse) 或 任 何 具 有 串 列 埠 的 裝 置 3.5.2 通 訊 協 定 由 於 串 列 埠 的 發 射 端 是 把 一 個 位 元 組 (Byte) 的 資 料 拆 成 一 個 一 個 的 位 元 (Bit) 發 射, 接 收 端 再 把 所 收 到 的 位 元 組 合 起 來 而 還 原 為 位 元 組, 為 了 解 所 傳 送 資 料 的 意 義, 所 以 連 線 的 雙 方 必 須 遵 守 相 同 的 通 訊 規 則, 這 個 規 26
則 就 稱 為 通 訊 協 定 由 於 歐 美 的 儀 器 的 通 訊 協 定 常 使 用 9600,n,8,1 所 以 Visual Basic 的 預 設 值 為 9600,n,8,1 日 本 的 的 設 備 常 採 用 9600,e,7,2, 台 灣 的 產 品 則 兩 種 通 訊 協 定 都 有 廠 商 在 採 用, 所 以 連 線 時 要 先 閱 讀 所 購 設 備 之 使 用 手 冊, 才 能 把 Visual Basic 的 通 訊 協 定 設 定 好 9600,n,8,1 是 表 示 傳 輸 速 率 為 每 秒 9600 個 位 元, 沒 有 同 位 位 元, 資 料 長 度 為 8 位 元, 有 1 個 停 止 位 元 3.6 程 式 碼 3.6.1 隨 機 座 標 點 的 選 擇 Private Sub b111_click() Text9.Text = ":SZ100<Z 軸 位 置 >" Private Sub b1b_click() Text9.Text = ":SX<X 軸 位 置 >" Private Sub b2b_click() Text9.Text = ":SY<Y 軸 位 置 >" Private Sub b411_click() 27
Text9.Text = ":SP<X 軸 位 置 >,<Y 軸 位 置 >,<Z 軸 位 置 >" Private Sub c2a2_click() Text9.Text = ":Y<Y 軸 位 置 >" Private Sub c3a_click() Text9.Text = ":X<X 軸 位 置 >" Private Sub c3a2_click() Text9.Text = ":Z<Z 軸 位 置 >" Private Sub c4a2_click() Text9.Text = ":P<X 軸 位 置 >,<Y 軸 位 置 >,<Z 軸 位 置 >" Private Sub Command1_Click() Text1 = " 起 始 點 為 " & "(" & Text2.Text & "," & Text3.Text & ")" & vbcrlf & " 量 測 點 數 為 " & Text4.Text & " 點 " & vbcrlf & " 量 測 時 間 為 " & Text5.Text & " 秒 " Text6.SetFocus Private Sub Command10_Click() 28
Private Sub Command11_Click() Form2.Show (0) Private Sub Command12_Click() Form3.Show Private Sub Command13_Click() Text1.Text = " " Text2.Text = " " Text3.Text = " " Text4.Text = " " Text5.Text = " " Text6.Text = " " Text7.Text = " " Text9.Text = " " Form2.Cls Form3.Picture1.Cls 29
List1.Clear Private Sub Command14_Click() MSComm1.Output = "b" Private Sub Command15_Click() Form4.Show (0) Private Sub Command16_Click() Form5.Show (0) Private Sub Command17_Click() Form6.Show (0) Private Sub Command18_Click() Set mychart = myexcel.charts.add Set myrange = myworksheet.usedrange i = myrange.rows.count 30
j = myrange.columns.count mychart.setsourcedata Source:=myworksheet.UsedRange myexcel.visible = True Private Sub Command19_Click() Set myexcel = CreateObject("excel.application") myexcel.visible = True Set myworkbook = myexcel.workbooks.add Set myworksheet = myworkbook.worksheets("sheet1") Set myrange = myworksheet.range("a1") myrange.cells(1, 2).FormulaR1C1 = "X 軸 座 標 " myrange.cells(1, 3).FormulaR1C1 = "Y 軸 座 標 " myrange.cells(1, 4).FormulaR1C1 = "Z 軸 座 標 " myrange.cells(1, 5).FormulaR1C1 = " 溫 度 " Private Sub Command2_Click() MSComm1.Output = ",:P" & Text3.Text & "," & Text2.Text & ",0" & vbcr Text1 = " 起 始 點 為 " & "(" & Text3.Text & "," & Text2.Text & ")" Text4.SetFocus 31
Private Sub Command20_Click() With myexcel.range("a1:e5").select.calculate.charts.add End With Private Sub Command3_Click() Text1 = " 起 始 點 為 " & "(" & Text2.Text & "," & Text3.Text & ")" & vbcrlf & " 量 測 點 數 為 " & Text4.Text & " 點 " Text5.SetFocus Private Sub Command4_Click() Form2.Show X = Text3.Text Y = Text2.Text lp = Text4.Text rx = Text6.Text ry = Text7.Text 32
t = Text5.Text For z = 1 To lp dx = Fix(2 * rx * Rnd + 2 * Rnd - rx - 1) dy = Fix(2 * ry * Rnd + 2 * Rnd - ry - 1) poin = poin & " 第 " & z & " 個 量 測 點 " & "(" & X + dx & "," & Y + dy & ")" & vbcrlf Text1 = " 起 始 點 為 " & "(" & Text3.Text & "," & Text2.Text & ")" & vbcrlf & " 量 測 點 數 為 " & Text4.Text & " 點 " & vbcrlf & " 量 測 時 間 為 " & Text5.Text & " 秒 " & vbcrlf & "X 軸 的 量 測 範 圍 為 " & Text6.Text & vbcrlf & "Y 軸 的 量 測 範 圍 為 " & Text7.Text & vbcrlf & poin g = 99 * Rnd + 1 Form2.PSet (X + dx, Y + dy) Form2.Print " " & "(" & X + dx & "," & Y + dy & ")" & " 第 " & z & " 點 " MSComm1.Output = ",:P" & X + dx & "," & Y + dy & ",0" & vbcr delayms t * 1000 i = 0 i = myrange.rows.count + 1 Set myrange = myexcel.activecell myrange.cells(i, 1).FormulaR1C1 = " 第 " & z & " 點 " myrange.cells(i, 2).FormulaR1C1 = X + dx myrange.cells(i, 3).FormulaR1C1 = Y + dy 33
myrange.cells(i, 4).FormulaR1C1 = dx + dy myrange.cells(i, 5).FormulaR1C1 = Fix(g) i = myrange.rows.count + 1 myrange(i, 1).Select Next z Private Sub Command5_Click() Text1 = " 起 始 點 為 " & "(" & Text2.Text & "," & Text3.Text & ")" & vbcrlf & " 量 測 點 數 為 " & Text4.Text & " 點 " & vbcrlf & " 量 測 時 間 為 " & Text5.Text & " 秒 " & vbcrlf & "X 軸 的 量 測 範 圍 為 " & Text6.Text & vbcrlf & "Y 軸 的 量 測 範 圍 為 " & Text7.Text dx = Text6.Text dy = Text7.Text Command4.SetFocus Private Sub Command6_Click() MSComm1.Output = ",:SP0,0,0" & vbcr 34
Private Sub Command7_Click() MSComm1.Output = "a" & vbcr Private Sub Command8_Click() MSComm1.PortOpen = False End Private Sub Command9_Click() MSComm1.Output = Text9.Text & vbcr Private Sub d13_click() Text9.Text = ":RX" Private Sub d23_click() Text9.Text = ":RY" Private Sub d33_click() Text9.Text = ":RZ" 35
Private Sub d43_click() Text9.Text = ":RP" Private Sub Form_Activate() Text3.SetFocus Load Form2 Form2.Scale (-5000, 5000)-(5000, -5000) Form2.Line (0, 5000)-(0, -5000), QBColor(15) Form2.Line (-5000, 0)-(5000, 0), QBColor(15) Form4.Scale (-1000, 1000)-(1000, -1000) Load Form4 Load Form5 Private Sub Form_Load() Load Form3 Randomize MSComm1.CommPort = 2 On Error Resume Next 36
optcom(1).value = True If MSComm1.PortOpen Then MsgBox " 串 列 埠 2 已 被 其 他 設 備 所 使 用, 請 選 擇 Com1", vbexclamation + vbokonly, " 系 統 訊 息 " Exit Sub Else MSComm1.PortOpen = True End If Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent ' 事 件 Case comevcd Case comevcts Case comevdsr Case comevring Case comevreceive delayms 100 Text9.Text = Text9.Text & MSComm1.Input Text9.SelStart = Len(Text9.Text) 37
Case comevsend End Select Private Sub optcom_click(index As Integer) On Error Resume Next MSComm1.PortOpen = False MSComm1.CommPort = Index + 1 If MSComm1.PortOpen Then MsgBox " 所 選 的 串 列 埠 已 被 其 他 設 備 所 使 用!", vbexclamation + vbokonly, " 系 統 訊 息 " Exit Sub Else MSComm1.PortOpen = True End If Private Sub Text11_Change() Private Sub Text2_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then 38
Command2.SetFocus End If Private Sub Text3_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then delayms 500 Text2.SetFocus End If Private Sub Text4_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Command3.SetFocus End If Private Sub Text5_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Command1.SetFocus End If 39
Private Sub Text6_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text7.SetFocus End If Private Sub Text7_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Command5.SetFocus End If 3.6.2 滑 鼠 操 作 點 的 選 擇 Dim X1 Dim X2 Private Sub aa_click() Form1.Show Private Sub b_click() 40
Form1.MSComm1.Output = "b" Private Sub Form_Activate() Load Form1 Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim n As Integer Load Form3 Form3.Picture1.Scale (-5000, 5000)-(5000, -5000) If Button = 2 Then Form3.PopupMenu a End If X1 = Fix(X) Y1 = Fix(Y) Form3.Caption = " 目 前 滑 鼠 座 標 值 : X= " & X1 & ",Y= " & Y1 Form3.Picture1.ToolTipText = "(" & X1 & "," & Y1 & ")" m = " 確 定 選 擇 " & "(" & X1 & "," & Y1 & ")" & " 為 量 測 點 嗎?" If Button = 1 Then return_value = MsgBox(m, 32 + 1, " 確 認 ") 41
End If If return_value = 1 Then z = Form1.List3.ListCount Form1.List3.AddItem " 第 " & z + 1 & " 點 " & " 為 " & "(" & X1 & "," & Y1 & ")" Form3.Picture1.PSet (X1, Y1) Form3.Picture1.Print " " & " 第 " & z + 1 & " 點 為 " & "(" & X1 & "," & Y1 & ")" Form1.MSComm1.Output = ",:P" & X1 & "," & Y1 & ",0" & vbcr End If 3.6.3 規 則 量 測 點 的 選 擇 Private Sub b_click() Form1.Show Private Sub c_click() Text1 = "" Text2 = "" Text3 = "" Text4 = "" 42
Text5 = "" Text6 = "" Text7 = "" Form4.Cls Form5.List1.Clear Private Sub Command1_Click() Form4.Show (0) l = Form5.List1.ListCount X = Text1.Text Y = Text2.Text m = Text3.Text n = Text4.Text P = Text5.Text q = Text6.Text t = Text7.Text b = m Mod 2 If b = 0 Then a = Text3.Text / 2 43
For k = 0 To a - 1 z = X - k * 2 * P u = Y - (n - 1) * q For i = 0 To n - 1 delayms t * 1000 Form4.PSet (z, Y - i * q) Form4.Print " " & "(" & z & "," & Y - i * q & ")" Form1.MSComm1.Output = ",:P" & z & "," & Y - i * q & ",0" & vbcr Form5.List1.AddItem " 第 " & (i + 1) + 2 * k * Text4.Text & " 點 " & "(" & z & "," & Y - i * q & ")" Next i For j = 0 To n - 1 delayms t * 1000 Form4.PSet (z - P, u + j * q) Form4.Print " " & "(" & z - P & "," & u + j * q & ")" Form1.MSComm1.Output = ",:P" & z - P & "," & u + j * q & ",0" & vbcr Form5.List1.AddItem " 第 " & (1 + j) + (2 * k + 1) * Text4.Text & " 點 " & "(" & z - P & "," & u + j * q & ")" Next j 44
Next k Else a = Fix(Text3.Text / 2) For k = 0 To a - 1 z = X - k * 2 * P u = Y - (n - 1) * q For i = 0 To n - 1 delayms t * 1000 Form4.PSet (z, Y - i * q) Form4.Print " " & "(" & z & "," & Y - i * q & ")" Form1.MSComm1.Output = ",:P" & z & "," & Y - i * q & ",0" & vbcr Form5.List1.AddItem " 第 " & (i + 1) + 2 * k * Text4.Text & " 點 " & "(" & z & "," & Y - i * q & ")" Next i For j = 0 To n - 1 delayms t * 1000 Form4.PSet (z - P, u + j * q) Form4.Print " " & "(" & z - P & "," & u + j * q & ")" Form1.MSComm1.Output = ",:P" & z - P & "," & u + j * q & ",0" & vbcr 45
Form5.List1.AddItem " 第 " & (1 + j) + (2 * k + 1) * Text4.Text & " 點 " & "(" & z - P & "," & u + j * q & ")" Next j Next k For s = 0 To n - 1 l = X - (Text3.Text - 1) * P delayms t * 1000 Form4.PSet (l, Y - s * q) Form4.Print " " & "(" & l & "," & Y - s * q & ")" Form1.MSComm1.Output = ",:P" & l & "," & Y - s * q & ",0" & vbcr Form5.List1.AddItem " 第 " & (Text3.Text - 1) * Text4.Text + (s + 1) & " 點 " & "(" & l & "," & Y - s * q & ")" Next s End If Private Sub Form_Activate() Load Form4 Form4.Scale (-1000, 1000)-(1000, -1000) Text1.SetFocus 46
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then Form5.PopupMenu zz End If Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then delayms 500 Text2.SetFocus End If Private Sub Text2_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then delayms 500 Text3.SetFocus End If Private Sub Text3_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then 47
delayms 500 Text4.SetFocus End If Private Sub Text4_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then delayms 500 Text5.SetFocus End If Private Sub Text5_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then delayms 500 Text6.SetFocus End If Private Sub Text6_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then delayms 500 48
Text7.SetFocus End If Private Sub Text7_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then delayms 500 Command1.SetFocus End If 49
第 四 章 系 統 整 合 與 測 試 因 為 本 專 題 目 前 已 針 對 控 制 器 座 標 點 的 選 擇 提 供 了 三 種 不 同 的 方 法, 未 來 若 加 上 感 測 器 做 資 料 擷 取 後, 亦 需 要 一 統 計 程 式 來 輔 助 資 料 的 統 計 與 分 析 在 本 章 中 就 將 Visual Basic 與 常 用 的 Excel 試 算 表 做 整 合, 能 將 各 軸 座 標 點 的 資 訊 未 來 所 擷 取 的 訊 號 資 料, 能 同 步 的 送 到 Excel 試 算 表 中 做 分 析 與 統 計 4.1 程 式 碼 4.1.1 新 增 物 件 Private Sub Command19_Click() Set myexcel = CreateObject("excel.application") ' 讓 Excel 在 前 景 工 作 myexcel.visible = True ' 新 增 一 新 活 頁 簿 Set myworkbook = myexcel.workbooks.add ' 將 myworksheet 物 件 變 數 設 定 為 "sheet1" 工 作 表 Set myworksheet = myworkbook.worksheets("sheet1") ' 指 定 myrange 為 Worksheet 的 Range 物 件 Set myrange = myworksheet.range("a1") ' 在 儲 存 格 (1,1)(1,2)(1,3) 中 分 別 填 入 " X 軸 座 標 "," Y 軸 座 標 ", '" Z 軸 座 標 " 和 " 溫 度 " myrange.cells(1, 2).FormulaR1C1 = "X 軸 座 標 " myrange.cells(1, 3).FormulaR1C1 = "Y 軸 座 標 " myrange.cells(1, 4).FormulaR1C1 = "Z 軸 座 標 " 50
myrange.cells(1, 5).FormulaR1C1 = " 溫 度 " 4.1.2 將 座 標 及 資 料 送 入 試 算 表 Private Sub Command4_Click() Form2.Show X = Text3.Text Y = Text2.Text lp = Text4.Text rx = Text6.Text ry = Text7.Text t = Text5.Text For z = 1 To lp dx = Fix(2 * rx * Rnd + 2 * Rnd - rx - 1) dy = Fix(2 * ry * Rnd + 2 * Rnd - ry - 1) poin = poin & " 第 " & z & " 個 量 測 點 " & "(" & X + dx & "," & Y + dy & ")" & vbcrlf Text1 = " 起 始 點 為 " & "(" & Text3.Text & "," & Text2.Text & ")" & vbcrlf & " 量 測 點 數 為 " & Text4.Text & " 點 " & vbcrlf & " 量 測 時 間 為 " & Text5.Text & " 秒 " & vbcrlf & "X 軸 的 量 測 範 圍 為 " & Text6.Text & vbcrlf & "Y 軸 的 量 測 範 圍 為 " & Text7.Text & vbcrlf & poin g = 99 * Rnd + 1 Form2.PSet (X + dx, Y + dy) Form2.Print " " & "(" & X + dx & "," & Y + dy & ")" & " 第 " & z & " 點 " MSComm1.Output = ",:P" & X + dx & "," & Y + dy & ",0" & vbcr delayms t * 1000 i = 0 ' 將 Range 物 件 範 圍 的 列 總 數 加 1 51
i = myrange.rows.count + 1 ' 設 定 myange 為 目 前 作 用 中 的 儲 存 格 Set myrange = myexcel.activecell ' 將 輸 入 的 資 料 分 別 存 入 儲 存 格 中 myrange.cells(i, 1).FormulaR1C1 = " 第 " & z & " 點 " myrange.cells(i, 2).FormulaR1C1 = X + dx myrange.cells(i, 3).FormulaR1C1 = Y + dy myrange.cells(i, 4).FormulaR1C1 = dx + dy myrange.cells(i, 5).FormulaR1C1 = Fix(g) ' 將 Range 物 件 範 圍 的 列 總 數 加 1 i = myrange.rows.count + 1 ' 將 下 一 列 的 儲 存 格 選 起 來 myrange(i, 1).Select Next z 4.1.3 繪 圖 分 析 Private Sub Command20_Click() With myexcel.range("a1:e5").select.calculate.charts.add ' 加 入 圖 表 End With 52
4.2 統 計 分 析 圖 因 為 本 專 題 尚 未 加 上 資 料 擷 取 的 感 測 器, 因 此 在 Excel 的 試 算 表 內 的 Z 軸 數 據 及 溫 度 數 據, 是 以 程 式 中 的 隨 機 變 數 而 產 生 的 模 擬 數 據 而 微 步 進 馬 達 驅 動 控 制 器 的 XY 座 標 都 能 即 時 的 傳 送 到 試 算 表 中 圖 4.1 Excel 紀 錄 座 標 圖 模 擬 分 析 : 參 數 設 定 : 1. 起 始 點 (x,y) = (0,0) 2. 量 測 點 數 =9 點 3. X,Y 軸 的 量 測 範 圍 =11.25mm 4. 量 測 時 間 =3 秒 53
圖 4.2 模 擬 9 點 分 析 參 數 設 定 圖 圖 4.3 模 擬 9 點 分 析 折 線 圖 54
第 五 章 結 論 5.1 研 究 成 果 本 專 題 主 要 在 設 計 一 個 方 便 使 用 者 操 作 微 步 進 馬 達 驅 動 控 制 器 的 人 機 介 面 的 視 窗 程 式, 並 且 將 Visual Basic 結 合 Excel 以 便 未 來 資 料 擷 取 後 的 資 料 分 析 在 本 專 題 中 主 要 完 成 下 列 的 結 果 : (1) 隨 機 座 標 點 的 選 取 : 在 待 分 析 的 大 區 域 內, 分 成 部 分 的 微 小 矩 形 區 帶, 並 設 定 欲 分 析 的 座 標 點 數 與 座 標 點 與 座 標 點 的 間 隔 時 間 待 分 析 區 域 的 範 圍 等 參 數 設 定 (2) 直 接 由 滑 鼠 操 作 控 制 器 : 藉 由 滑 鼠 移 動 直 接 讀 取 座 標 點, 可 即 時 控 制 微 步 進 馬 達 控 制 器 的 運 動 方 向, 而 免 於 輸 入 繁 雜 的 指 令, 並 且 藉 由 視 窗 的 座 標 點 顯 示 可 以 知 道 目 前 微 步 進 馬 達 控 制 器 的 所 在 位 置 (3) 規 則 座 標 點 的 選 取 : 如 果 搭 配 溫 度 感 測 器, 可 用 於 分 析 均 勻 受 熱 的 區 域, 藉 著 控 制 器 所 選 擇 的 規 則 點, 使 溫 度 感 測 器 紀 錄 每 個 相 等 距 離 的 座 標 點 溫 度, 可 以 找 出 受 熱 不 均 勻 的 區 域, 在 加 以 改 善 (4) 功 能 表 的 建 立 : 除 了 方 便 熟 練 的 使 用 者 可 以 參 考 控 制 碼 的 指 令 外, 對 於 第 一 次 操 作 微 步 進 馬 達 控 制 器 的 使 用 者, 可 以 藉 著 功 能 表 的 利 用, 簡 易 的 操 作 微 步 進 馬 達 控 制 器, 而 不 需 記 憶 一 些 較 繁 雜 的 指 令 (5) 與 試 算 表 (Excel) 的 結 合 : 在 未 來 加 上 感 測 器 做 資 料 擷 取 後, 可 將 座 標 的 點 資 訊 以 及 所 擷 取 到 的 資 料 做 紀 錄, 並 且 可 即 時 看 到 所 得 到 的 資 料, 在 完 成 資 料 之 後, 可 藉 由 操 作 視 窗 的 分 析 按 鍵, 即 可 獲 得 各 點 的 座 標 對 溫 度 的 分 析 圖 55
5.2 未 來 研 究 針 對 本 專 題, 可 提 出 下 列 幾 點 未 來 研 究 與 改 進 的 地 方 : (1) 加 上 感 測 器 後 的 資 料 擷 取 : 在 本 專 題 中 已 經 可 以 提 供 三 種 不 同 的 控 制 器 路 線, 在 未 來 如 果 加 上 感 測 器 後, 在 控 制 器 與 感 測 器 間 的 資 料 傳 輸 就 需 要 在 加 以 研 究 (2) 在 視 窗 軟 體 的 監 控 視 窗 : 由 於 座 標 點 的 顯 示, 在 本 程 式 中 顯 示 圖 的 座 標 單 位 已 經 預 設 好 一 格 式, 由 於 微 步 進 馬 達 的 精 密 微 小 距 離, 使 的 視 窗 所 顯 示 的 範 圍 很 有 限, 並 不 能 包 含 所 有 的 範 圍, 未 來 在 程 式 設 計 上 可 以 在 改 進 成 具 有 放 大 縮 小 的 方 式, 即 可 以 顯 示 所 有 的 範 圍 (3) 資 料 分 析 圖 改 進 : 除 了 利 用 試 算 表 (Excel) 做 分 析 圖 之 外, 可 以 利 用 Visual Basic 另 外 在 設 計 一 程 式, 將 X 座 標 Y 座 標 所 擷 取 到 的 資 料 記 錄 成 三 軸 的 立 體 座 標 圖, 可 以 有 利 於 資 料 擷 取 後 的 比 較 與 統 計 (4) 搭 配 光 感 測 器 做 分 析 : 可 以 利 用 規 則 座 標 點 的 選 取 方 式, 將 直 角 座 標 點 的 點 數 設 定 成 兩 點, 如 圖 所 示, 在 設 定 水 平 方 向 的 點 數, 另 外 在 設 計 一 個 視 窗 程 式, 搭 配 光 感 測 器 的 訊 號 做 點 紀 錄, 可 以 利 用 微 步 進 馬 達 的 精 密 微 小 距 離, 做 圖 形 辨 別 或 長 度 寬 度 的 量 測 圖 5.1 搭 配 光 感 測 器 做 分 析 56
參 考 文 獻 [1] 董 炳 信,Visual Basic 6.0 範 例 導 引 快 樂 入 門 與 實 力 養 成, 儒 林 圖 書,2003 年 [2] 孫 清 華, 感 測 器 應 用 電 路 的 設 計 與 製 作, 全 華 科 技, 台 北, 民 83 年 [3] 蔡 朝 洋, 單 晶 片 微 電 腦 8051/8951 原 理 與 應 用, 全 華 圖 書, 民 91 年 [4] 范 逸 之 陳 立 元,Visual Basic 與 RS-232 串 列 通 訊 控 制 最 新 版, 文 魁 資 訊, 民 90 年 [5] 陳 文 冰,Visual Basic 6.0 程 式 設 計, 松 崗 圖 書,1999 年 [6] 陳 撤 工 作 室,Visual Basic 程 式 設 計 入 門 6.0, 文 魁 資 訊,1999 年 [7] 蕭 富 貴,Visual Basic 6 學 習 範 本, 台 科 大 圖 書,2002 年 [8] 陳 天 青 廖 信 德, 機 電 整 合, 高 利 圖 書, 民 89 年 [9] 李 仲 文 譯, 微 步 進 技 術 的 新 面 貌, 機 械 月 刊 第 19 卷 第 11 期 [10] 坦 聯 公 司, 微 步 進 馬 達 驅 動 控 制 器 說 明 書 57