【问题标题】:Loading variable from txt从 txt 加载变量
【发布时间】:2016-09-04 14:38:32
【问题描述】:

以下代码有问题:

f=open('config.txt')
lines=f.readlines()
print(lines[1])
print(lines[3])
print(lines[5])
print(lines[7])
print(lines[9])
print(lines[11])

#Import and define
import serial
import time
time.sleep(5)

#Settings
Port = lines[1]
TargetMaxVoltage = float(lines[3])
TargetStartVoltage = float(lines[5])
TargetIntervalVoltage = float(lines[7])
DelayTime = float(lines[9])
LogInterval = float(lines[11])
CV = True

ser = serial.Serial(Port, 9600)
TargetStartVoltageLock = TargetStartVoltage


#Starting Settings
ser.write(b'>Start\r\n')
ser.write(b'>VoSet 0.5\r\n')

time.sleep(1)

ser.write(b'>expMode 1\r\n')
ser.write(b'>runTime 1000000000\r\n')
ser.write(b'>stDly 1000000000\r\n')
ser.write(b'>IoSet 1\r\n')
ser.write(b'>Imax 50\r\n')
ser.write(b'>Imin 1\r\n')
ser.write(b'>FarEfc 1\r\n')
ser.write(b'>MolMax 9999\r\n')

LogTimeInterval = ">logIntv "+str(format(LogInterval, '.4f'))+"\r\n"
ser.write(LogTimeInterval.encode('utf-8'))

time.sleep(5)


#Running Method None CV Screening
while (TargetStartVoltage != TargetMaxVoltage and CV == False):
    DataSend = ">VoSet "+str(format(TargetStartVoltage, '.2f'))+"\r\n"
    print (DataSend)
    ser.write(DataSend.encode('utf-8'))
    TargetStartVoltage += TargetIntervalVoltage
    time.sleep(DelayTime)


#Running Method CV Screening
CVComplete = False
while (TargetStartVoltage <= TargetMaxVoltage and CV == True and CVComplete     != True):
    DataSend = ">VoSet "+str(format(TargetStartVoltage, '.2f'))+"\r\n"
    print (DataSend)
    ser.write(DataSend.encode('utf-8'))
    TargetStartVoltage += TargetIntervalVoltage
    time.sleep(DelayTime)
 else:
    TargetStartVoltage -= 2*TargetIntervalVoltage
    while(TargetStartVoltageLock <= TargetStartVoltage and CV == True and CVComplete != True):
        DataSend = ">VoSet "+str(format(TargetStartVoltage, '.2f'))+"\r\n"
        print (DataSend)
        ser.write(DataSend.encode('utf-8'))
        TargetStartVoltage -= TargetIntervalVoltage
        time.sleep(DelayTime)
    else:
        CVComplete = True

    ser.close()

我收到以下错误消息:

Traceback(最近一次调用最后一次):文件 “C:\Users\Mikkel\Desktop\Python Scripts\CV_and_Screeningv100.py”,行 24,在 ser = serial.Serial(端口,9600)文件“C:\Users\Mikkel\AppData\Local\Programs\Python\Python35\lib\site-packages\serial\serialwin32.py”, 第 31 行,在 init 中 super(Serial, self).init(*args, **kwargs) 文件 "C:\Users\Mikkel\AppData\Local\Programs\Python\Python35\lib\site-packages\serial\ serialutil.py", 第 182 行,在 init self.open() 文件中 "C:\Users\Mikkel\AppData\Local\Programs\Python\Python35\lib\site-packages\serial\serialwin32.py", 第 62 行,在 open raise SerialException("could not open port {!r}: {!r}".format(self.portstr, ctypes.WinError())) serial.serialutil.SerialException:无法打开端口“COM11\n”:
FileNotFoundError(2, '系统找不到指定的文件。', 无,2)

我正在从一个名为 'config.txt' 的 txt 文件中加载数据,它似乎是

Port = lines[1]

ser = serial.Serial(Port,9600)

这就是问题所在。我使用了错误的格式吗?我试图引入“str”、“init”和“float”,但没有任何效果。第[1]行的数据是COM11,即当前端口。

【问题讨论】:

  • 不能直接使用txt 行,python 会自动排序。为每个值添加一些标识字符串。像这样:Port#com11# a={e.split("#")[0]:e.split("#")[1]for e in lines}; 可以调用 a["Port"] 作为 port_name。
  • 并且端口定义显示在Device Manager或者可以手动查找。 Here

标签: python database error-handling serial-port


【解决方案1】:

查看错误日志 有写不能打开COM11\n所以你必须删除换行符(\n)。

例如:Port.strip()

【讨论】:

  • 更改lines = [e.strip() for e in lines]的答案
猜你喜欢
  • 1970-01-01
  • 2018-05-24
  • 1970-01-01
  • 2011-07-22
  • 2012-09-14
  • 2023-03-14
  • 2017-11-20
  • 2020-04-19
  • 2018-03-25
相关资源
最近更新 更多