如何创建一个串行数据字符串,只有当串行端口是高的,当线路变低时结束?

2024-09-28 01:22:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我的工作做一个项目,我需要它来创建一个数据串,只有当com端口很高时,它才会结束字符串,然后分析字符串并寻找关键字来做出决定。在

这里是设置。在

在工作中,我们有一个全自动RAM测试仪,它通过串行线连接到计算机,与RAM测试仪附带的软件进行通信。当测试开始时,RAM被插入RAM测试仪,测试开始,数据开始通过串行线传输。数据,如正在运行的当前测试、RAM模块速度、芯片配置和定时器,直到测试完成(通过或失败)通过串行线路传输。当测试完成后,模块被移除,然后它被放到传送带上,传送带将通过的模块从失败的模块中分类出来,下一个模块被插入测试仪,然后重复这个过程。在测试完成和移除模块,以及插入下一个模块之间,有一个大约3秒的时间窗口,串行线没有数据通过。我希望用这个3秒的窗口结束对我的串行数据字符串的捕获,并让python运行它的评估来做出决定。一旦对字符串进行评估并做出决定,程序将丢弃该字符串并开始从串行端口读取数据,将数据捕获到另一个字符串中,直到串行线路上再次出现3秒钟的停机时间,结束将数据捕获到字符串。它将不得不循环执行这项任务。除了捕获串行数据的字符串(这是我项目的一个重要部分),我已经准备好了这个项目的每个部分。我只需要学习如何利用序列的停机时间来结束字符串。字符串必须根据串行线路上的3秒停机时间结束的原因是,每个模块的串行线路上的数据随着测试的长度而变化,排除了设置要读取并放入字符串中的预设字节数。每个模块的数据量因定时器而异。我会在下面提到关于定时器的数据的描述。模块容量越大,测试时间越长,定时器计数越高,每个模块的串行数据就越高。另外,如果模块失败,测试将立即结束,因此串行线路上的计时器数据也可能非常短。我希望这是有道理的,因为我觉得我不擅长解释事情。在

提前非常感谢您的帮助!在

这是我前面提到的串行线路上的数据样本。在

Åó.þÅþ@.Åþ. ..Waiting for Handler Start ....Åþ....[ Esc. ]Åþe.ÅþE.ÅþE.Åþ...L001: wk_addr [00:00]Åþ....[Cancel]ÅþA'Åþ...L001: wk_data [00:00]Åþ....[Cancel]ÅþA'Åþ...L001: Mats [00:01]Åþ....[Cancel]ÅþA'Åþ...![00:02]Åþ...![00:02]Åþ...![00:03]Åþ...![00:03]Åþ...![00:03]Åþ...![00:04]Åþ...![00:05]Åþ...![00:05]Åþ...![00:06]Åþ...![00:06]Åþ...![00:07]Åþ...![00:07]Åþ...![00:08]Åþ...![00:09]Åþ...![00:09]Åþ...![00:10]Åþ...L001: Mar_X [00:10]Åþ....[Cancel]ÅþA'Åþ...![00:11]Åþ...![00:11]Åþ...![00:12]Åþ...![00:12]Åþ...![00:12]Åþ...![00:13]Åþ...![00:14]Åþ...![00:14]Åþ...![00:15]Åþ...![00:15]Åþ...![00:16]Åþ...![00:16]Åþ...![00:17]Åþ...![00:18]Åþ...![00:18]Åþ...![00:19]Åþ...![00:19]Åþ...![00:20]Åþ...![00:20]Åþ...![00:21]Åþ...L001: Mar_C [00:21]Åþ....[Cancel]ÅþA'Åþ...![00:22]Åþ...![00:22]Åþ...![00:23]Åþ...![00:23]Åþ...![00:24]Åþ...![00:24]Åþ...![00:25]Åþ...![00:25]Åþ...![00:26]Åþ...![00:26]Åþ...![00:27]Åþ...![00:28]Åþ...![00:28]Åþ...![00:29]Åþ...![00:29]Åþ...![00:30]Åþ...![00:31]Åþ...![00:31]Åþ...![00:32]Åþ...![00:32]Åþ...![00:32]Åþ...![00:33]Åþ...![00:34]Åþ...![00:34]Åþ...![00:35]Åþ...![00:35]Åþ...![00:36]Åþ...![00:37]Åþ...![00:37]Åþ...![00:37]Åþ...![00:38]Åþ...![00:39]Åþ...L001: Mar_Y [00:39]Åþ....[Cancel]ÅþA'Åþ...![00:39]Åþ...![00:40]Åþ...![00:40]Åþ...![00:41]Åþ...![00:41]Åþ...![00:42]Åþ...![00:42]Åþ...![00:43]Åþ...![00:43]Åþ...![00:44]Åþ...![00:44]Åþ...![00:45]Åþ...![00:45]Åþ...![00:46]Åþ...![00:46]Åþ...![00:47]Åþ...![00:47]Åþ...![00:48]Åþ...![00:48]Åþ...![00:49]Åþ...![00:49]Åþ...![00:50]Åþ...![00:50]Åþ...![00:51]Åþ...![00:51]Åþ...![00:52]Åþ...![00:52]Åþ...![00:53]Åþe.Åþ}...ÅþE.Åþa¡ÅþD.Åþ"0.Module..: DDR2 256Mx72 2GB 2R(8)@2x400MHZ 1.8V.Åþ"...(Tested at 2x400MHz).Åþ".Addr.(rowxcol.).: 14 x 10.Åþ".Data (rankxbit).: 2 x 72.Åþ".Internal Banks.: 8.Åþ""Burst.: Mode=Sequential, Length=8.Åþ"*AC parameters.: CL=5, AL=0, Trcd=5, Trp=5.Åþ".S/N from SPD.: a128f4f3.Åþ".Test Loop #.: 1.Åþ"..## PASS: Loop 1 ##.Åþ"..Elapsed Time.: 00:00:53.448.Åþa¢Åþc.............H..ÿÿÿÿ"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ...s-(U.?€.....".. Åþ@.ÅþE.Åþ....**PASS - L001 @2x400MHZÅþ...![00:53]Åþ....Transmit Results ...Åþa¡ÅþD.Åþ"0.Module..: DDR2 256Mx72 2GB 2R(8)@2x400MHZ 1.8V.Åþ"...(Tested at 2x400MHz).Åþ".Addr.(rowxcol.).: 14 x 10.Åþ".Data (rankxbit).: 2 x 72.Åþ".Internal Banks.: 8.Åþ""Burst.: Mode=Sequential, Length=8.Åþ"*AC parameters.: CL=5, AL=0, Trcd=5, Trp=5.Åþ".S/N from SPD.: .Åþ".Test Loop #.: 1.Åþ"..## PASS: Loop 1 ##.Åþ"..Elapsed Time.: 00:00:53.448.Åþa¢Åþ@.Åþ. ..

这是测试结束的地方,模块被弹出,另一个模块被插入,数据开始再次通过串行线路传输。在


Tags: 模块数据项目端口字符串loop时间pass
1条回答
网友
1楼 · 发布于 2024-09-28 01:22:57

听起来你想一直从串行端口读取字符,直到有一段时间没有字符间隔,然后处理这些数据。尝试类似(注意,这是未经测试的):

buf = ''
ser.timeout = 1
while True:
    data = ser.read() # read a single character
    buf += data
    if data == '': # emtpy string indicates a read timeout
        processs_data(buf)
        buf = '' # wipe the buffer

相关问题 更多 >

    热门问题