我有一個Python程式,運行一個連接到teensy板的串行埠。該程式從板上接收三個串列。t, volt, 以及curr,一旦一個方法完成。我有三個串列,我想用這些值來建立。t_list, volt_list, 和curr_list。這個板子連接到一個iorodeo恒電位儀上,每個方法周期只能運行25個周期,所以我需要把它給出的t, volt, 和curr的值傳遞給t_list, volt_list, 和curr_list的x個方法周期,來繞過25個周期的限制。問題是,時間串列t在每個方法周期的0.003秒重新開始,所以我最終在最后的t_list中得到一個重復的時間串列。有沒有一種方法可以把每個新的t,讓python程式計算一個新的串列,從最后的時間開始,以總的時間(秒)結束?
串列t給出一個以秒為單位的時間串列,其長度與curr和volt串列相同。對于下面的腳本,第一個方法回傳一個長度為250的串列t,從0.003秒開始到0.75秒結束。每個方法周期都應該是一樣的。
下面是腳本。
下面是腳本:
# -*- coding: utf-8 -*-
""
創建于2021年9月18日18:34:59 星期六
@作者: dallo
"""
from potentiostat import potentiostat
import sys
import matplotlib.pyplot as plt
from serial import Serial
port = 'COM7'/span>
num_pulse = 25 # 脈沖數(最大 = 25)
lo_pulse = (10, -1.0)
hi_pulse = (20, -0.1)
num_cycles = 3 3
dev = Potentiostat(port)
hw_variant = dev.get_hardware_variant()
dev.set_curr_range('1000uA')
dev.set_sample_rate(300)
step_list = []
curr_list = []
volt_list = []
t_list = []
# 添加脈沖到步驟串列。
for i in range(num_pulse)。
step_list.append(lo_pulse)
step_list.append(hi_pulse)
# Test name and test parameters: 測驗名稱和測驗引數
test_name = 'multiStep'/span>
test_param = {
'quietValue' : 0.0,
'quietTime' : 0,
'step' : step_list,
}
for i in range(num_cycles)。
volt = []
curr = []
dev.set_param(test_name,test_param)
t,volt,curr = dev.run_test(test_name,display='pbar')
curr_list.extend(curr)
volt_list.extend(volt)
t_list.extend(t)
volt_ax = plt.subplot(2,1,1)
plt.plot(t_list,volt_list)
plt.ylabel('potential (V)')
plt.grid('on')
plt.subplot(2,1,2, sharex=volt_ax)
plt.plot(t_list,curr_list)
plt.ylabel('current (uA)')
plt.xlabel('t (sec)')
plt.grid('on')
plt.show()
uj5u.com熱心網友回復:
你可以嘗試通過在你的t_list添加一個具有這種形式的字典來記錄時間:
tmp_dict = {time_of_the_iteration: t}。
這樣代碼就變成了:
....
from datetime import datetime
....
for i in range(num_cycles)。
volt = []
curr = []
dev.set_param(test_name,test_param)
t,volt,curr = dev.run_test(test_name,display='pbar')
curr_list.extend(curr)
volt_list.extend(volt)
actual_time = datetime.now().strftime('%H:%M:%S')
tmp_dict = {actual_time: t}
t_list.extend(tmp_dict)
這樣,你對每個t都有不同的時間。
uj5u.com熱心網友回復:
我能夠想出辦法。我在for回圈中加入了下面的代碼:
for i in range(num_cycles)。
volt = []
curr = []
t = []
dev.set_param(test_name,test_param)
t,volt,curr = dev.run_test(test_name,display='pbar')
curr_list.extend(curr)
volt_list.extend(volt)
if len(t_list) > 0:
last_time = t_list[-1]
new_t_list = [x last_time for x in t]
t_list.extend(new_t_list)
else:
t_list.extend(t)
這從t_list中獲取最后(最新)的時間值,并將其添加到下一個t串列中的每個新的方法周期的新值中。例如,如果第一個t串列是[1,2,3,4,5]和下一個t串列是相同的[1,2,3,4, 5]它從第一個t中獲取最后一個值,并將其添加到第二個t串列的每個元素中,并將這些新元素添加到t_list中,最后給出一個t_list的[1,2,3,4,5,6,7,8,9,10]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/325707.html
標籤:
