问题描述
我正在尝试读取传真机传输的传真页,我使用嵌入式调制解调器(mt9234smi)接收传真页,并通过串行端口将此调制解调器与pi3连接,并通过pi3上的python脚本读取数字数据并保存在文件中作为二进制数据, 传真机和调制解调器之间的速率(PSTN 模拟信号) 14.4 k 调制解调器 (DCE) 和 raspBerry pi3(主机或 DTE)之间的芽率 38400 k
当通过调制解调器(2 类传真 AT 命令)将页面从 pi3 发送到远程传真机时,它可能工作, 但是当从调制解调器接收数据并将文件保存为二进制数据时,我注意到数据量太大并且我注意到大量重复字节(文件的大小必须接近 1.5 k,但我收到近 5 k) 请注意,我正在使用硬件流控制 (CTS) 并在发送脚本时充分使用它。
下面是从modem开始接收数据后从modem串口接收到的数据重复字节的示例:
b'\x00\x14\xd9\xa8\x00\xa6\xcd@\x056j\x00)\xb3P\x01M\x9a\x80\n' b'\xd4\x00Sf\xa0\x02\x9b5\x00\x14\xd9\xa8\x00\xa6\xcd@\x056j\x00)\xb3P\x01M\x9a\x80\n'
b'\xd4\x00Sf\xa0\x02\x9b5\x00\x14\xd9\xa8\x00\xa6\xcd@\x056j\x00)\xb3P\x01M\x9a\x80\n'
b'\xd4\x00Sf\xa0\x02\x9b5\x00\x14\xd9\xa8\x00\xa6\xcd@\x056j\x00)\xb3P\x01M\x9a\x80\n'
b'\xd4\x00Sf\xa0\x02\x9b5\x00\x14\xd9\xa8\x00\xa6\xcd@\x056j\x00)\xb3P\x01M\x9a\x80\n'
b'\xd4\x00Sf\xa0\x02\x9b5\x00\x14\xd9\xa8\x00\xa6\xcd@\x056j\x00)\xb3P\x01M\x9a\x80\n'
b'\xd4\x00Sf\xa0\x02\x9b5\x00\x14\xd9\xa8\x00\xa6\xcd@\x056j\x00)\xb3P\x01M\x9a\x80\n'
b'\xd4\x00Sf\xa0\x02\x9b5\x00\x14\xd9\xa8\x00\xa6\xcd@\x056j\x00)\xb3P\x01M\x9a\x80\n'
b'\xd4\x00Sf\xa0\x02\x9b5\x00\x14\xd9\xa8\x00\xa6\xcd@\x056j\x00)\xb3P\x01M\x9a\x80\n'
b'\xd4\x00Sf\xa0\x02\x9b5\x00\x14\xd9\xa8\x00\xa6\xcd@\x056j\x00)\xb3P\x01M\x9a\x80\n'
b'\xd4\x00Sf\xa0\x02\x9b5\x00\x14\xd9\xa8\x00\xa6\xcd@\x056j\x00)\xb3P\x01M\x9a\x80\n'
b'\xd4\x00Sf\xa0\x02\x9b5\x00\x14\xd9\xa8\x00\xa6\xcd@\x056j\x00)\xb3P\x01M\x9a\x80\n'
b'\xd4\x00Sf\xa0\x02\x9b5\x00\x14\xd9\xa8\x00\xa6\xcd@\x056j\x00)\xb3P\x01M\x9a\x80\n'
b'\xd4\x00Sf\xa0\x02\x9b5\x00\x14\xd9\xa8\x00\xa6\xcd@\x056j\x00)\xb3P\x01M\x9a\x80\n'
b'\xd4\x00Sf\xa0\x02\x9b5\x00\x14\xd9\xa8\x00\xa6\xcd@\x056j\x00)\xb3P\x01M\x9a\x80\n'
你知道这个字节是什么意思吗? 我还有一个问题,在从调制解调器接收数据期间,什么时间可以从串口缓冲区捕获字节? 我注意到我的软件从串口调制解调器读取了重复的字节,因为速度存在差异。
在我的接收脚本下面(注意我必须用单个替换成对并用字符替换成对,并通过 reveive 结束流数据) DLE =x10,SUB =x1a,ETX = x03 。
byte=port.read(1)
num_byte+=1
while True :
if byte== b'\x10':
x = port.read(1)
if x== b'\x03':
b.write(b'\x10x\03')
print('end of file')
num_byte+=2
b.close()
break
if x == b'\x10':
b.write(b'\x10')
byte = port.read(1)
dle_dle+=1
print(byte)
num_byte+=1
continue
if x== b'\x1a':
b.write(b'\x10\x10')
sub+=1
num_byte+=2
print(byte)
byte = port.read(1)
continue
if byte==b'\n':
x=port.read(1)
if x== b'l':
b.write(b'\n')
byte = port.read(1)
line+=1
continue
else:
b.write(byte)
b.write(x)
byte = port.read(1)
continue
else:
b.write(byte)
byte = port.read(1)
num_byte+=1
b.close()
如果我的接收循环是错误的还是正确的,任何人都可以知道我吗,我注意到我从串行端口收到了太多的重复数据。 谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)