2017年10月25日 星期三

自動化設備PC程式參數檔案架構介紹與改進(四)

     生產中設備,刻不容緩,尤其是在整條產線時,說出口 :『等我改一下』,如果沒馬上改好,就得承受許多的壓力 :


  • 下一站的同事 : 欸~你還要多久才可以過站?要不我先去尿尿?(流線式生產線,某一站停了,工件就無法到下一站)
  • 設備工程師 : 你們港~塊~要量產了!!!!
  • 設備工程師經理 : 不發一語的眼神怒視攻擊~~~
  • 操作設備的阿姨 : 你這樣我很難用,你不能加OOXX#$%功能嗎?
  • (最爽的)上一站的同事 : 你加油~我去尿尿了。(跑去納涼)

     為了盡量減少面對這樣的壓力,並快速地增刪參數(改功能通常都會有參數變動),我寫了一些關於參數檔的通用程式,到目前為止,也應用在許多不同的設備上了。

以下將以範例方式介紹GeneralArgumentDialog相關功能 (下載範例)

1. 解壓縮範例後,打開TestGeneralArgumentDialog方案(base on vs2013 & .Net framework4),會看到如下圖,各類別說明如圖所示:

2. TestGeneralArgumentDialog是主要的測試專案(起始專案),另外一個就是參考的專案,如果要採用此參數檔案架構,可以直接引用此專案(GeneralArgumentDialog)或是build成dll來用。


3. 編譯完成後直接執行程式,可以看到如下圖的範例程式:
     *分頁General Argument Tool Test: 直接存讀檔與ArgumentDialog操作演示

     *分頁Property Grid Sample: 自訂類別的屬性參數演示,以及其他特性測試。

4. 經過泛型化的XML讀寫fun已經被簡化為以下:
       
1
2
3
4
private void btnWriteToXml_Click(object sender , EventArgs e)
{
     ArgumentBase.WriteToXml(Lib.GetUserDir() + @"\DataThree.xml" , dataThree);
}

------------------------------------------------------------------------------------------------------------

  
1
2
3
4
private void btnReadFromXml_Click(object sender , EventArgs e)
{
    dataThree = ArgumentBase.ReadFromXml<DataThree>(Lib.GetUserDir() + @"\DataThree.xml");
}
------------------------------------------------------------------------------------------------------------



5. 透過ArgumentDialog操作/顯示屬性類別實體的操作 (觀察Class Instance即時修改資料)

code:
1
2
3
4
5
6
7
8
private void btnShowDialogSave_Click(object sender , EventArgs e)
{
    DataThree tmp = ArgumentBase.ShowDialog(dataThree , "Data Three" , 5 , dataThreeFilePath);
    if (tmp != null)
    {
        dataThree = tmp;
    }
}
dialog: (此時以dialog打開自訂屬性類別,Apply後Instace會寫入dataThreeFilePath路徑)
------------------------------------------------------------------------------------------------------------


code:
1
2
3
4
5
6
7
8
private void btnShowDialogSaveAs_Click(object sender , EventArgs e)
{
    DataThree tmp = ArgumentBase.ShowDialog(dataThree , "Data Three" , 5 , ref dataThreeFilePath);
    if (tmp != null)
    {
        dataThree = tmp;
    }
}
dialog: (此時增加Saveas與Open按鈕,可以在執行期間選取讀取\寫入檔案)
------------------------------------------------------------------------------------------------------------


code:
1
2
3
4
5
private void btnShowDialogEditor_Click(object sender , EventArgs e)
{
    //即時修改instance-不存檔
    ArgumentBase.Show<DataThree>(dataThree , "Data Three" , 5);
}
dialog: (此時dialog即時修改instance,不需要按apply)
------------------------------------------------------------------------------------------------------------


code:
1
2
3
4
5
private void btnShowDialogViewer_Click(object sender , EventArgs e)
{
    //純顯示
    ArgumentBase.Viewer<DataThree>(dataThree , "Data Three" , 5);
}
dialog: (此時dialog只顯示數值,無法做任何修改)

........
......
....
.
恩.....
經過三小時才編好上述文章,這樣太了,我決定偷懶用錄影的!!!
     影片1: (範例程式)
    會用到的功能大多寫在按鈕上了,特性用法也標在屬性類別上了,就不在文章贅述了。

     影片2: (新增參數的方式)
     只要在參數類別中直接新增屬性,在GeneralArgumentDialog就會自動新增,同時也有檔案讀寫功能,是不是相當方便呢!?


結語:
本系列文章就到此結束了,看了一下紀錄,居然寫了一年多,好吧,就是偷懶的結果。不過也為了這次寫blog,把原有的程式碼做了整理,才發現有許多不合理處,現在也才知道,自己會寫是一回事,要寫成文章教學,又是另一回事。

沒有留言: