2023年1月28日 星期六

C#XML檔案修改

修改xml檔案中的資料, 去符合自動化測試的需求

using System.Xml; 

if (Result == RESULT_PASS)

 {

        if (!System.IO.File.Exists(@"C:\\AtmosicMP\\test.xml"))

       {

               GridData.WriteMessage(this.GridData._TPars.richtextbox, "test.xml file  ", " Fail ", Color.Blue, Color.Red);

               Result = RESULT_FAIL;

        }

        else

        {

               try

              {

                     XmlDocument xmlDoc = new XmlDocument();

                      xmlDoc.Load(@"C:\\AtmosicMP\\test.xml");

                      XmlNodeList xmlNodeList = xmlDoc.GetElementsByTagName("*");

                      foreach (XmlNode xmlNode in xmlNodeList)

                      {

                              XmlElement xmlElement = (XmlElement)xmlNode;//將節點轉換一下型別

                                

                              if (xmlElement.Name == "FlashFwElf")//判斷該子節點是否是要查詢的節點

                              {

                                    xmlElement.InnerText = @FwElf;//設定新值

                                    //break;

                                }

                                else if (xmlElement.Name == "BinFile")//判斷該子節點是否是要查詢的節點

                                {

                                    xmlElement.InnerText = @BinFile;//設定新值

                                    //break;

                                }

                                else if (xmlElement.Name == "Bdaddr_01")//判斷該子節點是否是要查詢的節點

                                {

                                    xmlElement.InnerText = TDatas.AtmosicBDA;//設定新值

                                    break;

                                }//BinFile

                            }

                            xmlDoc.Save(@"C:\\AtmosicMP\\test.xml");//儲存修改的Xml檔案內容

                }

                catch (Exception e)

                {

                        throw new Exception(e.ToString());

                }

         }

 }

2023年1月24日 星期二

網卡的Enable與Disable

如何用C#撰寫程式來停用或啟用指定網路卡
在這篇c# Ixchariot throughput 測試文章中加入一選項:  啟用與停用指定網卡
找到最簡單尋找到網卡名稱的方式:Netsh位置是在 C:\Windows\System32
Netsh 是命令列指令碼處理公用程式,讓您顯示或修改目前執行中電腦的網路設定. Netsh 命令可經由在netsh 提示字元鍵入命令來執行,而且可以在批次檔或指令碼中使用.
例如我NB上無線網卡

所下的指令: netsh wlan show interface
呈現出如下
系統上有 1 個介面:

    名稱                   : Wi-Fi
    描述            : MediaTek Wi-Fi 6 MT7921 Wireless LAN Card
    GUID                   : e406f59a-28aa-42ac-96f7-32243641e670
    實體位址       : 48:e7:da:ac:92:5d
    介面類型         : 主介面
    狀態                  : 連線
    SSID                   : ras_2.4
    BSSID                  : 90:8d:78:66:db:0c
    網路類型               : 基礎結構
    無線電波類型           : 802.11n
    驗證                   : WPA2-Personal
    加密                 : CCMP
    連線模式        : 自動連線
    頻帶                   : 2.4 GHz
    通道                : 8
    接收速率 (Mbps)        : 144.4
    傳輸速率 (Mbps)        : 144.4
    訊號                   : 83%
    設定檔                 : ras_2.4

    主控網路狀態  : 無法使用

再利用網路搜尋到的文章所得到以下函式組合成所需功能
public void NetWorkList()
public ManagementObject NetWork(string networkname)
public bool DisableNetWork(ManagementObject network)
public bool EnableNetWork(ManagementObject network)






2023年1月17日 星期二

新唐nuvoton nuc131與C#量產燒錄測試站

利用新唐的軟體工具

Nu-Link Command Tool是一個通過Nu-Link存取NuMicro®家族微控制器的Win32 console 程式,讓用戶可以清除、燒錄和轉儲數據,並且客制化個人燒錄工具。


圖一: 新唐的ICE
從而規劃依據NuLink的ID number 去分別對DUT進行燒錄動作!

圖二: ICE接線正面
圖三:ICE背面
利用 Process 來執行其它外部程式, 如uniflash_windows_64dslite.bat

hyper = new Process();
hyper.StartInfo.FileName = "cmd.exe";//D:\ti\uniflash_windows_64
bool processStarted = hyper.Start();

if (hyper != null)
{
     hyper.WaitForExit(2000);
     HyperWindow = FindWindow(null, "C:\\Windows\\System32\\cmd.exe");
     if (HyperWindow == IntPtr.Zero)
     {
           HyperWindow = FindWindow(null, "Administrator: C:\\Windows\\System32\\cmd.exe");
      }
                        
        Thread.Sleep(500);
        if (HyperWindow != IntPtr.Zero)
        {

            SetForegroundWindow(HyperWindow);
            Thread.Sleep(1500);
            SendKeys.SendWait("+");
            SendKeys.SendWait("chcp 437");
            SendKeys.SendWait("{ENTER}");
            SendKeys.SendWait("d:");
            SendKeys.SendWait("{ENTER}");
            SendKeys.SendWait("cd\\ti\\uniflash_windows_64");
            SendKeys.SendWait("{ENTER}");
            SendKeys.SendWait("one_time_setup.bat");
            SendKeys.SendWait("{ENTER}");
            Thread.Sleep(1000);
            SendKeys.SendWait("dslite.bat >test.txt");
            SendKeys.SendWait("{ENTER}");
           
            ShowWindow(HyperWindow, SW_HIDE);

            Result = RESULT_PASS;
           //SetForegroundWindow(HyperWindow);
      }
       else
      {
            Result = RESULT_FAIL;
       }
 }
圖四: DUT代測物







2023年1月15日 星期日

ESP32的深度睡眠與喚醒

在前篇ESP32改裝Lachino自動感應抗菌除臭機中, 在使用電池時在活動模式(Active mode)下運行並不理想, 因為電池的電量很快耗盡. 所以就決定試看看用深度睡眠模式(Deep Sleep mode)的方式來減少運行的功耗, 再利用GPIO外部喚醒方式來運作. 


ESP32有基本的sample範例

 esp_sleep_wakeup_cause_t wakeup_reason;

 wakeup_reason = esp_sleep_get_wakeup_cause();

 esp_sleep_enable_ext0_wakeup(GPIO_NUM_33,1); //1 = High, 0 = Low




注意只有橘色RTC_GPIO可以當作外部觸發的腳位, 因為Deep_sleep_mode 只有RTC memory跟RTC周邊還在工作

我的 PIRPin = 33; 當作外部觸發的腳位

if(motion_off==50000){

    vTaskSuspend(hled);

    Serial.println("esp_deep_sleep_start");

    esp_deep_sleep_start(); 

}

當偵測腳為低準位時計數至50000時就關閉其他功能並開始深度睡眠esp_deep_sleep_start(); 



2023年1月13日 星期五

ESP32與香氛機的邂逅

ESP32 C#圖形化資料收集-改裝Lachino自動感應抗菌除臭機

家中小巧的香氛機因為經常要換電池, 就改裝成用充電的鋰電池再加上ESP32傳輸開關的次數到中控GUI程式上, 用圖形化介面顯示

圖一:人體偵測香氛機整體圖
圖二:人體偵測香氛機架構圖
圖三:人體偵測香氛機實體圖
圖四:人體偵測香氛機改裝圖
myObject["node"] = 7
myObject["function"] = PIR
startHere: Received from 2085230841 msg={"node":7,"function":"PIR","Detect":"false"}
為沒偵測到的訊息
圖五:香氛機+ESP32及更換大容量鋰電池
因為要驅動馬達所以小容量的鋰電池驅動不了, 所以更換一顆大容量的.
myObject["node"] = 7
myObject["function"] = PIR
startHere: Received from 2085230841 msg={"node":7,"function":"PIR","Detect":"true"}
為偵測到的訊息
演示影片











2023年1月12日 星期四

ESP32與DS18B20溫度感測器的C#圖形化資料收集

ESP32+DS18B20溫度感測器的C#圖形化資料收集

利用手上DS18B20的模組經由ESP32wifi Mesh網絡將溫度讀值經由中控台的GUI接收, 再由顯示介面即時顯示出來.

圖一: ESP32+DS18B20模組
#include <Wire.h>
#include <DallasTemperature.h>

const int oneWireBus = 4;
OneWire oneWire(oneWireBus);
DallasTemperature sensors(&oneWire);
// Variables to store temperature values
String temperatureF = "";
String temperatureC = "";
float tempC,oldtemp;

自己的ESP32 Mesh網絡DS18B20為Node5
手握住DS18B20溫度上升
myObject["function"] = DS18B20
startHere: Received from 2085224085 msg={"node":5,"function":"DS18B20","Temperature":23.19}
演示影片




2023年1月11日 星期三

工廠製造生產專有名詞的中英文對照

SMT(Surface Mounted Technology):表面安裝技術

PTH (Pin Through the Hole):通孔安裝

THT (Through Hole Component) :通孔插裝元件

SMB (Surface Mount Printed Circuit Board):表面安裝PCB板

SMC (Surface Mount Component):表面安裝元件

SMD (Surface Mount Device):表面安裝器件

SMA (Surface Mount Assembly):表面安裝組件

Component:元件

Device:器件

Assembly:組件

CTE(coefficient of thermal expansion):熱膨脹係數

In-circuit test:在線測試

Lead configuration:引腳外形

Placement equipment:貼裝設備

Reflow soldering:回流焊接

Repair:修理

Rework:返工

Solderability:可焊性

Soldermask:阻焊

Yield:產出率

Packaging density:裝配密度

Chip:片狀元件

melf:圓柱形元件

PCB(Printed circuit board):印刷電路板

DIP:雙列直插

SIP:單列直插

SOT(Small Outline Transistor):小外形晶體管

SOIC(Small outline IC):小外形集成電路,

SOP(Small outline Package):小外型封裝

PLCC(Plastic Leaded Chip Carrier):塑型有引腳芯片載體

LCCC(Leadless Ceramic Chip Carrier):無引腳陶瓷芯片載體

QFP (Quad Flat Package):多引腳方形扁平封裝

BGA( Ball grid array)球柵列陣

CSP(Chip Scale Package):芯片規模的封裝

Bare Chip:裸芯片Accuracy:精度

ATE(Automated test equipment):自動測試設備

AOI(Automatic optical inspection):自動光學檢查

Circuit tester:電路測試機

CTE(Coefficient of the thermal expansion):溫度膨脹係數

Cold solder joint:冷焊錫點

Component density:元件密度

Copper foil:銅箔

Copper mirror test:銅鏡測試

Cure:烘焙固化

Cycle rate:循環速率

Aerosol:氣溶劑
Angle of attack:迎角
Anisotropic adhesive:各異向性膠
Annular ring:環狀圈
Application specific integrated circuit :ASIC特殊應用集成電路
Array:列陣Artwork:佈線圖
Automated test equipment:ATE自動測試設備
Bond lift-off:焊接升離
Bonding agent:粘合劑
CAD/CAM system:計算機輔助設計與製造系統
Capillary action:毛細管作用
Chip on board :COB板面芯片
Circuit tester:電路測試機Cladding:覆蓋層
Cold cleaning:冷清洗
Cold solder joint:冷焊錫點
Conductive epoxy:導電性環氧樹脂
QFD:品質機能展開
PMT:產品成熟度測試
ORT:持續性壽命測試
FMEA:失效模式與效應分析




2023年1月10日 星期二

產品自動化測試工程人員工作技能-案子開始

新人進公司 最幸福的是有師父可以帶著做案子

所謂師父領進門修行看個人,初入這行有人罩著總是有個依靠

下面文章來介紹一下從接到案子後開如何去進行產品的測試工作

在系統廠中產品大部分由硬體組成在IC MCU上有軟體部門撰寫韌體FW

所以project 到手上要先了解產品的功能方塊圖逐一地去構思該如何去把測試涵蓋率變大

最好是每個功能部份的零件都有驗到!!

一般 從產品的PCBA就是我們所謂的電路板

板端測試要跟RD討論依據線路圖所需測量的測項盡可能將功能coverage提升包含電壓, 電流及chip線路功能的項目. 

再經由組裝後, 到成品測試.

成品測試一般的測法都是偏向使用者端使用的測試方式去架構測試環境再去編寫測試程式

2023年1月9日 星期一

Test Fixture Design - Shielding BOX控制板

 為了模仿TESCOM的箱子動作進而開發一片控制板.(給做箱子廠商costdown solution)

控制板以8051為主架構!包含6個按鍵輸入和6個磁簧sensor接頭, 6個電磁閥輸出!
Shielding BOX箱子應用
控制板去偵測按鍵動作進而控制治具滑台及電磁閥做箱體動作
有提供BCB的RS232 API給測試程式可做治具自動進出箱體自動開關
控制板還可應用於氣動治具的控制聲音測試系統的箱體控制

2023年1月8日 星期日

物體角度影像判別

在這個程式中, 使用了兩個Webcam影像裝置, 可同時判斷兩個旋轉的物體到定點的角度!

可加入輸入及輸出的訊號來做自動化的應用!




物體旋轉至水平後, 隨即判斷角度以便做後續處理.


2023年1月7日 星期六

Dlink PowerLine的重啟

因為家裡無線AP經常不正常, 所以將塵封已久的 PowerLine產品拿出來將客房(AP)與主臥室跟客廳經由電源線路連通!

PowerLine AV+ 3-Port (DHP-308AV DHP-309AV 電源線橋接器)


Dlink PowerLine的產品都可以互通

只要把接線對接好網路就通了, 方便!!

圖一: 架構圖



2023年1月6日 星期五

ESP32結合MPU6050用Processing做動態演示

網路上很多關於ESP32+Processing的相關文章, 譬如如何架構與撰寫!可以搜尋參考!
所以就利用手上的ESP32結合MPU6050模組用Processing做動態演示
圖一: fritzing線路圖

圖二: ESP32+MPU6050

圖三:Processing執行畫面

演示影片

 





Test Fixture Design - 治具篇

 為什麼需要治具? 產品在PCBA生產過程中若需要傳輸訊號去控制和輸出結果就需要一種附有探針的載具方便去做生產測試-治具

治具製作的好壞會影響到測試的穩定度所以需要事先構思你所要的功能再跟治具加工廠溝通討論才能做出適合生產及穩定的治具! 

一般治具可以分為手動, 氣動及電動 

手動治具 以手動方式將待測物放入治具載板上配合待測物訊號控制板使用測試.  

氣動治具 以氣壓缸帶動軸承下壓針盤. 

電動治具 以電動馬達驅動方式下壓

2023年1月5日 星期四

Android裝置測試系統-螢幕感應度測試

在開發Android裝置系統中, 還沒上 XYZ table 平台 的測試架構
先用測試程式在android 裝置安裝所需工具的APP,



上圖所示是 幾指接觸 而將其軌跡資料log 出來



測試程式會將其資料 接收並且秀出 哪條軌跡資料




ESP32與WS2812的繽紛世界

 利用ESP32連接3LED的WS2812模組顯示RGB三原色和閃爍演示

#include <Adafruit_NeoPixel.h>

#define LED_PIN     15

#define LED_COUNT  3

// NeoPixel brightness, 0 (min) to 255 (max)

#define BRIGHTNESS 70 // Set BRIGHTNESS to about 1/5 (max = 255)

// Declare our NeoPixel strip object:

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRBW + NEO_KHZ800);

myObject["node"] = 8
myObject["function"] = WS2812
startHere: Received from 2085146597 msg={"node":8,"function":"WS2812","mode":"single","led0":"red","led1":"green","led2":"blue"}

圖一:接線圖
利用ESP32中控系統GUI傳送node8 的 mode1 與mode2的指令
mode1:
RGB燈色
mode2:
RGB燈閃爍
演示影片








2023年1月4日 星期三

Touch panel 單指測試運動

Touch panel 單指測試運動
實際將電容式touch 面板 應用在測試機上

1.可針對電容式面板模組做點擊、劃線之測試
2.系統不受限於IC型號,皆可上線測試(I2C介面) (HID介面)
3.可搭配輸送帶做全自動化生產。 
4.可擴充-雙指多點構造

 

圖形化線路圖的好工具-fritzing

在fritzing裡面本身就有很多零件可以用
若沒有的parts也可以在網路上搜尋
圖一: 執行畫面


圖二:ESP32+MPU6050線路


2023年1月3日 星期二

RF 測試系統 - 藍牙篇

 RF測試系統中包含藍牙跟WiFi的測試. BT與WiFi還可以個別選擇測試儀器,這點是跟一般的產測程式最大的不同點! 藍芽測試部分 程式一開始會有login的畫面這個功能可以區分測試參數設定人員及Operator操作員的權限

 

待測物Chipset選擇 在測試程式的參數設定畫面可以依照BT chipset or Model name去選擇.測試程式會依照不同的Chipset去做控制待測物進入Test Mode讓儀器去做測試! 

 測試儀器選擇 在測試儀器的選擇項裡現在包含藍芽綜合測試儀Anritsu MT8852B跟Lite Point IQ可以選擇

  

測試項目選擇 測試項目包含standard跟EDR 項目可以單選或複選! 藍牙Standard測項為 Output Power Power Control Initial Carrier Carrier Drift Single-Slot Sensitivity Multi-Slots Sensitivity Modulation Index Max Input Power EDR function測項為 EDR Relative Tx Power EDR Carrier and Modulation EDR Diff Phase EDR Sensitivity EDR BER Floor Sensitivity EDR Max Input Power

  

在正式測試之前要先對測試環境做RF cable loss的校正, 這樣整個RF路徑Power才會正確. 

2023年1月2日 星期一

聲音 Test System - 測試程式介紹

 為了以最便宜的設備達到量測聲音裝置的構想!所以就用PC上的音效卡為發聲源與收音源(最好是用外接的音效卡, 規格較好) 程式開發是用Borland C++ Builder作介面控制與音源輸出和接收進而發展出一套低成本的聲音測試系統! 

聲音測試系統 程式一開始會有login的畫面這個功能可以區分測試參數設定人員Operator操作員的權限

  

測試音效卡選擇 在測試程式的parameters的畫面上會list出PC上的所有的音效裝置, 由使用者去選擇所要用的音效裝置! 

 

Golden Sample校正 測試程式可以依golden sample校正選項讓設定人員去做校正

 

測試項目

 
在測試聲音的路徑上分為sending direction and receiving direction兩路. 在測試程式中的測項規劃可以自由選擇測試與否
 
Sending SLR reflects the signal loudness in sending direction, i.e. from the artificial mouth through the phone to the transmission line. 此項測試在驗證DUT(Device Under Test) MIC收音路徑的聲音是否合乎規格. 在MIC測試中包含Frequency Response(Left), THD(Left), Frequency Response(Right) and THD(R).(測試頻點如下圖200~4KHz)
  
Receiving RLR reflects the signal loudness in receiving direction, i.e. from the transmission line through the phone to the artificial ear. 此項測試在驗證DUT(Device Under Test) Speaker放音路徑的聲音是否合乎規格. 在Speaker測試中包含Frequency Response(Left), THD(Left), Frequency Response(Right) and THD(R).(測試頻點如下圖200~8KHz)
 
測試畫面