回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我创建了一个用户定义的指令“getSetpoints”,它通过串行方式读取一组数据,并自动将其分割成4位数的片段,这些片段被转储到名为group#的列表中(该#取决于用户想要哪一组数据)。你知道吗</p>
<p>所有这些都非常有效,在运行getSetpoints()函数之后,我只需键入GROUP0、GROUP1、GROUP2等就可以在Python shell中打印这些数据,因此我知道这些数据存储正确。你知道吗</p>
<p>但是,现在我想自动将GROUP0列表中的每个成员加载到其正确命名的变量中(即Lang\u样式是GROUP0[0],CTinv\u符号是GROUP0[1],等等)。为此,我创建了decodeSP(),并在getSetpoints()末尾调用它。你知道吗</p>
<p>唯一的问题是,当我在运行getSetpoints()之后在pythonshell中键入Lang\u样式(或任何其他命名变量)时,它只返回一个0。参见下面的代码。我还包括了pythonshell的输出。你知道吗</p>
<p>我只是不明白GROUP0在用户定义的指令执行之后是如何保存数据的,但是其他变量每次都被设置回零。据我所知是一样的。你知道吗</p>
<pre><code># Define Variables (This is shortened to only show one GROUP...)
GROUP0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Lang_Style = 0
CTinv_Sign = 0
Freq = 0
PT_Ratio = 0
CT_Ratio = 0
DST = 0
System_Volts = 0
Gen_Phase = 0
Op_Mode = 0
Seq_Pref = 0
Re_Commit = 0
Bit_Address = 0
CRLF = bytearray ([0x0D, 0x0A])
RESULTS = [GROUP0, GROUP1, GROUP2, GROUP3, GROUP4, GROUP5]
def getSetpoints(group):
if 0 <= group <= 5:
# Send out the command for Display Setpoint, then group number, then CRLF.
s = serial.Serial('COM1', '9600') # serial port, baud rate
s.write("DP")
s.write(group)
s.write(CRLF)
temp = s.read(len(RESULTS[group])*6) # Each setpoint is 6 characters (space + x + 4 digits).
n = 0
for n in range(len(RESULTS[group])):
# RESULTS[group][n] = int(temp[2+n*6:6+n*6],16) # Use this one if you want Integers
RESULTS[group][n] = temp[2+n*6:6+n*6] # Cut out the space and the x, leaving only the 4 digits.
print RESULTS[group] # Debug Print
s.close()
decodeSP()
return
else:
print 'Invalid Group Number'
return
def decodeSP():
Lang_Style = GROUP0[0]
CTinv_Sign = GROUP0[1]
Freq = GROUP0[2]
PT_Ratio = GROUP0[3]
CT_Ratio = GROUP0[4]
DST = GROUP0[5]
System_Volts = GROUP0[6]
Gen_Phase = GROUP0[7]
Op_Mode = GROUP0[8]
Seq_Pref = GROUP0[9]
Re_Commit = GROUP0[10]
Bit_Address = GROUP0[11]
return
</code></pre>
<p>Python Shell输出:</p>
<pre><code>================================ RESTART ================================
getSetpoints(0)
['0004', '0000', '003C', '0000', '00C8', '0001', '0078', '0101', '0000', '0003', '0001', '0001']
GROUP0
['0004', '0000', '003C', '0000', '00C8', '0001', '0078', '0101', '0000', '0003', '0001', '0001']
Lang_Style
0
</code></pre>