Как правильно оформить цикл?

Irv1n

Новичок
Пользователь
Дек 8, 2020
8
1
3
Суть задачи такова:
Идет управление двумя приборами: калибратор подает напряжение, а мультиметр измеряет
Точки напряжения, которые задает калибратор записаны так: [0.01, 0.05, 0.09, 0.2, 0.5].
Изначально перед подачей этих точек мультиметр переводится на диапазон 0.1V и обнуляется. Мне нужно сделать так что бы когда он достигал точки 0.1V, после этой точки проводил обнуление и подавал точки дальше: 0.2, 0.5 и так до точки 1, и после этого опять делал обнуление и подавал точки выше 1 вольта
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 642
472
83
вопрос то в чем? где цикл?
 

alext

Популярный
Пользователь
Май 10, 2020
288
66
28
Точки напряжения, которые задает калибратор записаны так: [0.01, 0.05, 0.09, 0.2, 0.5].
points = [0.01, 0.05, 0.09, 0.2, 0.5]
Изначально перед подачей этих точек мультиметр переводится на диапазон 0.1V и обнуляется
Хер его знает, что такое "обнуляется".
current_value = 0.01
подавал точки дальше: 0.2, 0.5 и так до точки 1
У тебя "дальше" - это 0.05, 0.09. Точки 1 нет вообще в списке.
после этого опять делал обнуление и подавал точки выше 1 вольта
Что такое обнуление по-прежнему не ясно, и какие точки выше 1 вольта тоже понять невозможно.

Сформулируй задачу по-человечески (желательно по-русски).
 

Irv1n

Новичок
Пользователь
Дек 8, 2020
8
1
3
calc.mult.set_range('DCV', '0.1') # устанавливается диапазон 0.1 на мультиметре (есть еще диапазоны 1, 10, 100, 1000)
calc.mult.set_null() # обнуляется мультиметр
for i in [0.07, 0.1, 0.3, 0.5, 1, 5, 10, 50, 70, 100, 500, 700, 1000]: #точки напряжения которые устанавливаеткалибратор
set_value = (float(i))
calc.cal.device.write("OUT %.7f" % set_value) # подается команда на установку точек
calc.cal.set_oper() # включается калибратор
time.sleep(5)
calc.mult.get_measured_value(i) # измеряются поданные точки на мультиметре

Вопрос в том, что как только достигается значение больше диапазона 0,1 проводится операция обнуления мультиметра ( calc.mult.set_null()), далее измеряются следующие точки до 1 В, как только точка будет больше 1 В опять обнуляется и так на диапазонах 10, 100, 1000 В.
 

alext

Популярный
Пользователь
Май 10, 2020
288
66
28
Вопрос в том, что ...
Не похоже на вопрос. Похоже на задачу.
Python:
ranges = [0.1, 1, 10, 100, 1000]
values = [0.07, 0.1, 0.3, 0.5, 1, 5, 10, 50, 70, 100, 500, 700, 1000]
vr = [[(r, v) for v in [x for x in values if x <= r]] for r in ranges]
for block in vr:
    set_range(block[0][0])
    set_null()
    for limit, value in block:
        write
        set_oper
        ...
 
  • Мне нравится
Реакции: Irv1n

Irv1n

Новичок
Пользователь
Дек 8, 2020
8
1
3
Спасибо за пример, буду пробовать
 

Irv1n

Новичок
Пользователь
Дек 8, 2020
8
1
3
Не похоже на вопрос. Похоже на задачу.
Python:
ranges = [0.1, 1, 10, 100, 1000]
values = [0.07, 0.1, 0.3, 0.5, 1, 5, 10, 50, 70, 100, 500, 700, 1000]
vr = [[(r, v) for v in [x for x in values if x <= r]] for r in ranges]
for block in vr:
    set_range(block[0][0])
    set_null()
    for limit, value in block:
        write
        set_oper
        ...
Все работает, но немного не так:
каждый раз при смене диапазона и обнулении, точки все начинают измеряться заново, а необходимо чтобы продолжились.
Тоесть после точки 0.1 произошла смена диапазона и обнуление и далее шла точка 0.3 и тд
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 642
472
83
Все работает, но немного не так:
каждый раз при смене диапазона и обнулении, точки все начинают измеряться заново, а необходимо чтобы продолжились.
Тоесть после точки 0.1 произошла смена диапазона и обнуление и далее шла точка 0.3 и тд
можно удалять элементы, которые до новой точки...
либо делать новый список с новыми точками...
либо в цикле учитывать позиции элементов, и начинать с той позиции, с которой надо
 
Последнее редактирование:

Irv1n

Новичок
Пользователь
Дек 8, 2020
8
1
3
К сожалению не удается данный код модернизировать((
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 642
472
83
К сожалению не удается данный код модернизировать((
жаль...
 

Irv1n

Новичок
Пользователь
Дек 8, 2020
8
1
3
помучившись получилось заколхозить только так:

Python:
ranges = [0.1, 1, 10, 100, 1000]
values = [0.07, 0.1, 0.3, 0.5, 1, 5, 10, 50, 70, 100, 500, 700, 1000]
vr = []

prev_range = 0
for r in ranges:
    vals = []
    for v in values:
        if prev_range < v <= r:
            vals.append((r, v))
    vr.append(vals)
    prev_range = r

Но блин как то не по феншую, может поможете переделать код предложенный alext ?
Спасибо.
 

Форум IT Специалистов