2019年3月24日 星期日

Visual Basic 學習記

Visual Basic

 緣起

因為程式仍未完成,所以才是學習記......

綠由在 01 這篇貼文已經說明,不再重覆。沒人回應,只好自己硬起頭皮,從 Visual Basic 基本語法開始學起。好在有 Google 老師在一旁,使得學習能夠變得輕鬆,愉快就說不上。

 自學環境

底下這張照可以說明一切:

01

    • 兩台 Mac mini ,一台使用 Boot Camp 跑 Windows 10 + Visual Basic 2010 寫程式,一台則跑 Mac OS X ,這是日常的使用環境,請 Google 大師時操作起來較容易。
    • iOptron CEM25-P + StarFi 隨便架在一般三腳架上,讓 Windows 10 + Visual Basic 2010 的 Mac mini 可以透 Wi-Fi 以程式控制,方便測試。所以這就是為何 Windows 10 雖然支援雙螢幕,但還需要另一台 Mac mini 跑 Mac OS X,這樣才有網際網路直接查 Google。
    • 兩隻滑鼠都在左邊,這是不得已的使用,右手的肌腱炎常復發,這才練就了左手的操作。
    • Magic Mouse 底下還要墊白色紙,這是因為最近不曉得為何游標常不受控制亂飃或停頓不動,也清過 Sensor ,最後找到方法,底下墊一張白紙就解決了。長期之道,大概還是得買個可清洗的滑鼠墊較佳。
    • 一個 2.5 吋 60G SSD 的外接硬碟,兩台電腦間交換資料。(無法使用區網互通)

 自學Visual Basic

其實自己需要的控制程式很簡單(對已經熟悉 Visual Basic的人來說),先從 ASCOM 官網的這支教學影片:

 

當然首先要有ASCOM Platform 6.4SP1 安裝好,接下來下載 Application Development 並安裝,這樣在 Visual Basic 裡才能控制赤道儀(支援 ASCOM 的才行)

然後照著官網的教學影片跟著做一遍,了解 ASCOM 如何控制赤道儀,以及自己的赤道儀對 ASCOM 的支援度及GOTO 精度如何?

於安裝 ASCOM Platform 6.4SP1 時也會一起的 PlatformDeveloperHelp.chm ,特別抓出來放在桌面隨時查閱:

02

要寫赤道儀的控制程式,這個 Help 檔必須一直呈開啟狀態的

以 iOptron CEM25-P 舉例來說,測試的結果了解到這台不支援 Park 及回到 Home ,好在還能支援 CanSetTracking 及 CanSlewToAltAz 這就足夠滿足想要寫的程式功能,才能繼續寫下去。而 iOptron CEM25-P 畢竟算是一台中低階的赤道儀,GOTO 回原始構圖位置誤差會幾秒內(角度)(也有可能因為在室內測試,赤道儀沒有做過校正才導致這樣的誤差,這些都得等到程式完成,到社區頂樓實地測試時才能知道),這對於用來廣角拍攝銀河不致造成影響。

然後就花了半天的時間設計一個程式介面:

03

以背景的方式放入 VB 的 Form 裡面,準備依此分別以 ButtonBox 的方式加入「選擇」及「連接」赤道儀控制功能,還有輸入拍攝資料的 TextBox 項目。沒想到這是惡夢的開始。由於從沒碰過 Visual Basic ,加上錯估了 Visual Basic 的能力,以為上述的方式可以很簡單就搞定,結果竟然花了不少時間才能解決,值得記錄下來,免得以後又得從頭開始:

  • 不管是 ButtonBox 還是 TextBox,把 BackColor 及 ForeColor 改成 Tranparent 也一樣會蓋住在背景裡的按鈕選項 ,只得把這些按鈕選項重新製作小圖像(得存成 PNG或 Gif 才能保有透明),然後放入各 Box 屬性裡的 Image。

04

  • 安排好各Box 後

05

  • 執行程式後,位置全跑偏了

06

  • 花了不少時間才找到原來 VB 在 AutoScaleMode 預設為 Font 造成各 Box 位置跑偏,將其改成 None 或其他選項才能正常顯示

07

  • 因為程式介面是設計成 600X800 的固定大小及避免切換輸入法干擾,因此把一些Form 的屬性 Disable 掉,如:ImeMode、MaximumSize,BackgroundImageLayout 從 Tile 改成 None。
  • 接下來又碰到了輸入拍攝資料後能夠傳入程式內已宣告好的變數,才能計時控制。一開始設計好 TextBox ,程式執行後,滑鼠游標只要點選輸入位置,程式就自動關閉,Debug 也沒顯示錯誤訊息,真是一個頭兩個大。當然得請出 Google 大神,又是花了不少時間,解決方法意外地很簡單,只是把 TabIndex 從預設值 7 改為 0 就搞定了。(為何預設值為 7 ? TextBox 不就是要讓人輸入資料的嗎?怎麼不預設為 0 。或許也可能不了解 VB 的環璄設定,不過,也沒時間及意願去了解,只要能將程式完成才是第一要務。)

螢幕擷取畫面 (57)

本以為一個晚上就能把剩下的計時功能部分完成,沒想到一個假日的夜晚到隔日的凌晨近五點才把上述的問題搞定,接下來應該會比較容易了吧!

2019.03.25

大致將程式完成,進一步發現程式介面需要重修,調小一些,再多個顯示程式有在「動」的訊息視窗,所以程式還得大整形(程式碼也得大調),另程式裡有些小細節也需要再調好。

2019.03.26

    • 剛好晚上天氣還可以,搬了器材到頂樓測試:
    • 設定拍100張,預計在凌晨一時半拍完,只是相機開始拍時,電池只剩40%,能不能順利完成還不知道。
    • 使用Nikon D610 +Sigma 70-200mm@200mm 拍攝
    • 每張曝光30秒,ISO 100,間隔一分鐘。 原先使用自己的聯想小筆電,沒想到會當掉,換成一台HP 舊電電就可以了。這問題恐怕還是得解決,小筆電帶出去才方便。
    • 由於手動按下拍攝程式的啓動鍵,雖說程式設計了倒數計時的功能,還是會有誤差,拍到第二十幾張,誤差已來到四、五秒鐘。 拍到第三十三張時也出現錯誤訊息,讓程式繼續執行。 誤差越來越大,十秒了,仔細看,似乎是程式有點不對,沒有將goto 回初始位置所需的時間計入,需要重新調整。
    • 舊筆電的電池效能太差,開始時100%,拍了四十張後剩60%,而相機的40%還沒變。 再五張就50張,拍完收工。

晚上的測試狀況很多,除了小筆電執行程式會當之外(但收工後,在家裡先以赤道模擬器測試又沒問題),首先就以一開始的極軸校正,使用電子極軸鏡是可以很精準,但今晚螢幕只能看到一顆北極星而已,看不到旁邊的星,無法用來校正,也不能用赤道儀內附的極軸鏡(因為安裝了電子極軸鏡後,遮住了)。因此,追踪的精度會差很多,再加上週邊大樓林立,赤道儀只能做一星校正,GOTO 的精度也無法提升。

總之,要做的調整還很多

2019.03.27

想到了一個可以解決 GOTO 到初始位置,但又可以放入 Timer 迴圈裡計數時不會重覆執行。

辦法是:

    1. 先在程式開頭再多宣告一個判斷變數,初值為 True Dim only_once As Boolean = True
    2. 然後在Timer 迴圈裡加入這段程式:

If only_once = True Then

GOTO 到初始位置

only_once = False '這行是在迴圈裡只跑一次的關鍵

End If

或許會問,GOTO 到初始位置只跑一次,為何不放到迴圈外?這麼簡單的問題,程式 V1 版就是這樣寫的,雖然程式設定的資料雖與相機拍攝程式相同,但昨晚的測試發現,這樣的結果導致程式與相機拍攝程式的同步誤差越來越大,從最初的一兩秒到拍完第 50 張時,誤差已來到 10 秒左右。 改寫後的程式解決了這個問題,就可以縮小程式與相機拍攝程式的同步誤差問題,這是因為也把赤道儀 GOTO 到初始位置的時間包含在間隔時間內,不會再另外增加,才能維持與相機拍攝程式的設定同步。 然後再把整個程式介面縮小一些,各個變數的位置重新再調整,就是 Version 2 了,找時間在測測看。

寫好的程式(已上傳)及詳細的操作解說,可以在 mobile01 這篇帖文裡找到,這裡就不重覆了。

所以程式就到此為止,玩票性質的 Visual Basic 的學習至此結束。

2019.03.30

在多次的練習程式與相機拍攝程或電子快門線的同步儘量減少誤差,由於 BackyardNikon 若設定存在相機記憶卡會當掉,只有傳到電腦才能正常運作,而這個傳到電腦需要花費時間,導致誤差的擴大,只得放棄。

改用電子快門線,也很難抓到較好的結果,只要一改變曝光時間,也需要跟著改變間隔時間的差別,增加外拍的困難度。

就在準備要痛下決心學習 C# 才能控制相機時,隨意把之前下載的 digiCamControl 安裝試試看,沒想到還很容易抓到訣竅,誤差減少很多。

01 02

先在 Mac Mini 的 Boot Camp Windows 10 安裝 2.1.1.0 沒有問題,結果改安裝到聯想小筆電時,啟動到一半就當掉。後來發覺當掉的原因是因為小筆電的 WebCam 造成的。

總算找到了解決的辦法,那就是去下載 2.1.0.0 版,安裝後如下圖,在設定/進階的地方把 WebCam Disable 掉,再安裝 2.1.1.0 ,之後就不再有問題了。

03

再經過多次的練習,發現要做這樣的縮時拍攝,赤道儀需要頻繁地 GOTO ,會導致赤道儀反應不過來讓程式當掉,所以對這支程式的適用性開始有點懷疑了,不曉得這樣的操作會不會把赤道儀操壞呢?!

偶一為之就好,還是專注拍梅西爾天體。

沒有留言:

張貼留言

您可以留下意見,但 Luke 可能無法馬上回覆,尚請見諒。