Dies ist die dritte Testautomatisierungsserie, die mit L Chika beginnt.
In Anbetracht der jüngsten Energiesparsituation wird die Beleuchtungsmethode der zu testenden LED von [Statische Beleuchtung](https://www.google.co.jp/search?hl=ja&as_q=Static Lighting) auf [Dynamische Beleuchtung](https: / geändert) /www.google.co.jp/search?hl=ja&as_q=dynamic beleuchtung) wird geändert. Daher werden wir den Prüfstand so modifizieren, dass die Go / No-Go-Beurteilung automatisch durchgeführt werden kann, indem die Beleuchtungsspannung und die Beleuchtungsfrequenz der LED mit einem Oszilloskop gemessen werden.
Die Artikel finden Sie hier.
Wechsel von statischer Beleuchtung zu dynamischer Beleuchtung mit 1000 Hz und einem Tastverhältnis von 50%. Ton (), [noTone ()](https://www.arduino.cc/reference/ En / language / functions / advanced-io / notone /) steuert die Beleuchtung / das Löschen.
ArduinoLedLight.ino(Teil wechseln)
void Led::on(void)
{
//digitalWrite(m_led_pin, HIGH);
tone(m_led_pin, 1000);
}
void Led::off(void)
{
//digitalWrite(m_led_pin, LOW);
noTone(m_led_pin);
}
|Befehl|Streit|Funktion
|-----------+----------------+----
|open_dso |Keiner|-Importiere PyVISA und öffne das Oszilloskop
|dso |VISA-Befehl|・ Senden und Empfangen von Befehlen zum und vom Oszilloskop
・ In den empfangenen Daten enthalten","Ist"-"Ersetzen mit
|eval_dbl_eq|Erwarteter Wert(Doppeltyp[^1])|・変数valがErwarteter Wertの値(Doppeltyp)Gleich
|eval_dbl_gt|Standardwert(Doppeltyp)|・変数valがStandardwert(Doppeltyp)Bewerten, wenn größer als
|eval_dbl_lt|Standardwert(Doppeltyp)|・変数valがStandardwert(Doppeltyp)Bewerten, wenn kleiner
-Bitte installieren Sie PyVISA [^ 2].
test-runner.py
#!/usr/bin/python3
#
# This software includes the work that is distributed in the Apache License 2.0
#
from time import sleep
import serial
import codecs
import csv
import sys
import visa
UNINITIALIZED = 0xdeadbeef
def serial_write(h, string):
if h == UNINITIALIZED:
print("UART Not Initialized.")
return False
else:
string = string + '\n'
string = str.encode(string)
h.write(string)
return True
def open_dso():
rm = visa.ResourceManager()
resources = rm.list_resources()
#print(resources)
for resource in resources:
#print(resource)
try:
dso = rm.open_resource(resource)
except:
print(resource, "Not Found.")
else:
print(resource, "Detected.")
return dso
#Throw an error to caller if none succeed.
return dso
def main():
is_passed = True
val = str(UNINITIALIZED)
dso = UNINITIALIZED
uart = UNINITIALIZED
arg = [""]
with codecs.open('script.csv', 'r', 'utf-8') as file:
script = csv.reader(file, delimiter=',', lineterminator='\r\n', quotechar='"')
with codecs.open('result.csv', 'w', 'utf-8') as file:
result = csv.writer(file, delimiter=',', lineterminator='\r\n', quotechar='"')
for cmd in script:
print(cmd)
if "#" in cmd[0]:
pass
elif cmd[0]=="sleep":
sleep(float(cmd[1]))
cmd.append("OK")
elif cmd[0]=="open_dso":
try:
dso = open_dso()
except:
cmd.append("NG")
is_passed = False
else:
cmd.append("OK")
elif cmd[0]=="dso":
try:
if "?" in cmd[1]:
val = dso.query(cmd[1]).rstrip().replace(",", "-")
cmd.append(val)
else:
dso.write(cmd[1])
cmd.append("OK")
except:
cmd.append("NG")
is_passed = False
elif cmd[0]=="open_uart":
try:
uart = serial.Serial(cmd[1], 115200, timeout=1.0, dsrdtr=1)
cmd.append("OK")
except:
cmd.append("NG")
is_passed = False
elif cmd[0]=="send":
ret = serial_write(uart, cmd[1])
if ret == True:
cmd.append("OK")
else:
cmd.append("NG")
is_passed = False
elif cmd[0]=="rcvd":
try:
val = uart.readline().strip().decode('utf-8')
cmd.append(val)
cmd.append("OK")
except:
cmd.append("NG")
is_passed = False
elif cmd[0]=="eval_str_eq":
if str(val) == str(cmd[1]):
cmd.append("OK")
else:
cmd.append("NG")
is_passed = False
elif cmd[0]=="eval_int_eq":
if int(val) == int(cmd[1]):
cmd.append("OK")
else:
cmd.append("NG")
is_passed = False
elif cmd[0]=="eval_int_gt":
if int(val) > int(cmd[1]):
cmd.append("OK")
else:
cmd.append("NG")
is_passed = False
elif cmd[0]=="eval_int_lt":
if int(val) < int(cmd[1]):
cmd.append("OK")
else:
cmd.append("NG")
is_passed = False
elif cmd[0]=="eval_dbl_eq":
if float(val) == float(cmd[1]):
cmd.append("OK")
else:
cmd.append("NG")
is_passed = False
elif cmd[0]=="eval_dbl_gt":
if float(val) > float(cmd[1]):
cmd.append("OK")
else:
cmd.append("NG")
is_passed = False
elif cmd[0]=="eval_dbl_lt":
if float(val) < float(cmd[1]):
cmd.append("OK")
else:
cmd.append("NG")
is_passed = False
else:
cmd.append("#")
print(cmd)
result.writerow(cmd)
if is_passed == False:
print("FAIL")
sys.exit(1)
if is_passed == True:
print("PASS")
sys.exit(0)
main()
Fügen Sie das folgende Testskript zum Ordner "script-parts" hinzu.
setup_dso.csv
#
# Setup DSO
open_dso,
dso,*IDN?
eval_str_eq,RIGOL TECHNOLOGIES-DS1104Z-XXXXXXXXXXXXXX-00.04.04.SP3
dso_write_timescale_200us.csv
#
# Timebase Scale 200us
dso,:TIMebase:SCALe 0.0002
dso_query_vmax_gt1700-lt1900.csv
#
# 1.80V +/- 0.10V
dso,:MEASure:VMAX? CHANnel1
eval_dbl_gt,1.70
eval_dbl_lt,1.90
dso_query_freq_gt995-lt1005.csv
#
# 1000Hz +/- 5Hz
dso,:MEASure:FREQuency? CHANnel1
eval_dbl_gt,995
eval_dbl_lt,1005
Die folgenden zwei Punkte wurden repariert.
script-generator.bat
REM script generator for LED Light Test Bench
set script_parts_dir=script-parts
set script_file_name=script.csv
REM-Prüfstandsaufbau
copy /b %script_parts_dir%\setup.csv %script_file_name%
Einrichtung des digitalen REM-Oszilloskops
copy /b %script_file_name% + %script_parts_dir%\setup_dso.csv
copy /b %script_file_name% + %script_parts_dir%\dso_write_timescale_200us.csv
Die REM-LED leuchtet nicht(Die LED-Spannung beträgt weniger als 200 mV)
copy /b %script_file_name% + %script_parts_dir%\eval_int_lt0200.csv
Schalten Sie das REM-Relais ein und
copy /b %script_file_name% + %script_parts_dir%\operation_relay_on.csv
REM 1.LED-Beleuchtungsspannung größer als 1700 mV und kleiner als 1900 mV
copy /b %script_file_name% + %script_parts_dir%\dso_query_vmax_gt1700-lt1900.csv
REM 2.Die LED-Beleuchtungsfrequenz ist größer als 995 Hz und kleiner als 1005 Hz
copy /b %script_file_name% + %script_parts_dir%\dso_query_freq_gt995-lt1005.csv
Das REM-Relais ist ausgeschaltet und die LED-Spannung beträgt weniger als 200 mV.
copy /b %script_file_name% + %script_parts_dir%\operation_relay_off.csv
copy /b %script_file_name% + %script_parts_dir%\eval_int_lt0200.csv
result.csv
# setup
# wait for if restart Arduino Uno
sleep,2,OK
#
# Open UART
open_uart,COM3,OK
#
# model and version check
send,i,OK
rcvd,Arduino Test Bench Ver.100,OK
eval_str_eq,Arduino Test Bench Ver.100,OK
#
# relay assigned Pin number check
send,p,OK
rcvd,12,OK
eval_int_eq,12,OK
#
# Setup DSO
open_dso,,OK
dso,*IDN?,RIGOL TECHNOLOGIES-DS1104Z-XXXXXXXXXXXXXX-00.04.04.SP3
eval_str_eq,RIGOL TECHNOLOGIES-DS1104Z-XXXXXXXXXXXXXX-00.04.04.SP3,OK
#
# Timebase Scale 200us
dso,:TIMebase:SCALe 0.0002,OK
#
# eval_int_lt0200
send,v,OK
rcvd,0,OK
eval_int_lt,200,OK
#
# relay ON
send,n,OK
sleep,1,OK
#
# 1.80V +/- 0.10V
dso,:MEASure:VMAX? CHANnel1,1.840000e+00
eval_dbl_gt,1.70,OK
eval_dbl_lt,1.90,OK
#
# 1000Hz +/- 5Hz
dso,:MEASure:FREQuency? CHANnel1,9.999999e+02
eval_dbl_gt,995,OK
eval_dbl_lt,1005,OK
#
# relay OFF
send,f,OK
sleep,1,OK
#
# eval_int_lt0200
send,v,OK
rcvd,0,OK
eval_int_lt,200,OK
Die Go / No-Go-Beurteilung basierend auf dem Messergebnis des Oszilloskops könnte durch Python \ (^ o ^) / automatisiert werden
[^ 1]: Python float ist eine Gleitkommazahl mit doppelter Genauigkeit, aber im Allgemeinen ist float eine einfache Genauigkeit und double eine doppelte Genauigkeit, daher wird es hier als doppelter Typ geschrieben. [^ 2]: Die offizielle Website enthält Installationsanweisungen mit dem Befehl pip. Die Prozedur, die ich in der Miniconda-Umgebung mit dem Befehl conda installiert habe, lautet [hier](https://qiita.com/pbjpkas/items/bd483d4773468e26414c#22-python%E5%AE%9F%E8%A1%8C%E7% 92% B0% E5% A2% 83).
Recommended Posts