Il s'agit de la troisième série d'automatisation de tests à commencer par L Chika.
Compte tenu de la situation récente d'économie d'énergie, la méthode d'éclairage de la LED à tester est passée de [Éclairage statique](https://www.google.co.jp/search?hl=ja&as_q= Éclairage statique) à [Éclairage dynamique](https: / /www.google.co.jp/search?hl=ja&as_q=dynamic lighting) sera modifié. Par conséquent, nous modifierons le banc de test afin que le jugement Go / No-Go puisse être effectué automatiquement en mesurant la tension d'éclairage et la fréquence d'éclairage de la LED avec un oscilloscope.
S'il vous plaît voir ici pour les articles jusqu'à présent.
Passez d'un éclairage statique à un éclairage dynamique avec 1000 Hz et un rapport cyclique de 50%. tone (), [noTone ()](https://www.arduino.cc/reference/ En / language / functions / advanced-io / notone /) contrôle l'éclairage / l'extinction.
ArduinoLedLight.ino(Changer de pièce)
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);
}
--Ajoutez la commande suivante.
|commander|argument|une fonction
|-----------+----------------+----
|open_dso |Aucun|-Importer PyVISA et ouvrir l'oscilloscope
|dso |Commande VISA|・ Envoyer et recevoir des commandes vers et depuis l'oscilloscope
・ Inclus dans les données reçues","Est"-"Remplacer par
|eval_dbl_eq|Valeur attendue(type double[^1])|・変数valがValeur attendueの値(type double)Égal à
|eval_dbl_gt|Valeur standard(type double)|・変数valがValeur standard(type double)Évaluer si supérieur à
|eval_dbl_lt|Valeur standard(type double)|・変数valがValeur standard(type double)Évaluer si plus petit
-Veuillez installer 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()
Ajoutez le script de test suivant au dossier script-parts.
--La commande VISA est un exemple d'oscilloscope RIGOL. --Veuillez faire correspondre la chaîne de caractères du modèle de setup_dso.csv à votre modèle.
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
Les deux points suivants ont été réparés.
script-generator.bat
REM script generator for LED Light Test Bench
set script_parts_dir=script-parts
set script_file_name=script.csv
Configuration du banc d'essai REM
copy /b %script_parts_dir%\setup.csv %script_file_name%
Configuration de l'oscilloscope numérique REM
copy /b %script_file_name% + %script_parts_dir%\setup_dso.csv
copy /b %script_file_name% + %script_parts_dir%\dso_write_timescale_200us.csv
La LED REM n'est pas allumée(La tension de la LED est inférieure à 200 mV)
copy /b %script_file_name% + %script_parts_dir%\eval_int_lt0200.csv
Allumez le relais REM et
copy /b %script_file_name% + %script_parts_dir%\operation_relay_on.csv
REM 1.La tension d'éclairage LED est supérieure à 1700 mV et inférieure à 1900 mV
copy /b %script_file_name% + %script_parts_dir%\dso_query_vmax_gt1700-lt1900.csv
REM 2.La fréquence d'éclairage LED est supérieure à 995 Hz et inférieure à 1005 Hz
copy /b %script_file_name% + %script_parts_dir%\dso_query_freq_gt995-lt1005.csv
Le relais REM est désactivé et la tension de la LED est inférieure à 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
Le jugement Go / No-Go basé sur le résultat de la mesure de l'oscilloscope peut être automatisé par Python \ (^ o ^) /
[^ 1]: Python float est un nombre à virgule flottante double précision, mais en général, float est simple précision et double est double précision, il est donc écrit en double type ici. [^ 2]: Le site officiel fournit des instructions d'installation à l'aide de la commande pip. De plus, la procédure que j'ai installée dans l'environnement Miniconda avec la commande conda est [ici](https://qiita.com/pbjpkas/items/bd483d4773468e26414c#22-python%E5%AE%9F%E8%A1%8C%E7% 92% B0% E5% A2% 83).
Recommended Posts