【问题标题】:send string to serial将字符串发送到串口
【发布时间】:2009-11-10 13:23:21
【问题描述】:

邦焦尔诺, 我正在尝试向串行端口发送一个简单的字符串来命令仪器进行噪声测量。
字符串非常简单:
"M 1" = 仪器开启
“M 2” = 仪器关闭
"M 3" = 开始测量
"M 4" = 停止测量

我找到了这个程序:

import serial

ser = serial.Serial(0)  #Seleziona la porta seriale COM4
ser.baudrate = 9600 #Imposta il baudrate a 9600bps

ser.open() #apre la porta com
ser.close() 
#verifica se la porta e' aperta
if ser.isOpen():
   com_num = ser.portstr
   print ("Porta " + com_num + " aperta")
   #invia il comando alla seriale
   buffer = "M 3"
   ser.write(buffer)     
   #Loop d'attesa caratteri
   num = 0
   while num == 0:
       num = ser.inWaiting()
   #scarica il buffer della seriale
   buffer = ser.read(num)
   print ("Dati ricevuti dalla seriale:")
   print buffer
   ser.close()             #chiude la porta
else:
   print ("Porta seriale gia' in uso o inesistente") 
s = raw_input("digita INVIA per uscire")

使用 Linux
该程序没问题,我对字符串类型只有一些问题。事实上,我不得不插入一个回车,但我不能这样做。
我说这个程序没问题,因为当我第一次连接时仪器从关闭变为打开,在视频中我读到“Porta /dev/ttyS= aperta”的意思是“打开”。但这适用于我发送的任何类型的字符串。实际上,这就像端口的“初始化”,而不是真正的通信。
然后我没有设法以正确的方式发送字符串,可能是回车的问题。

使用 Windows
我无法打开端口,我有一个拒绝访问端口的错误,这是错误:
Traceback (most recent call last):
File "C:/d.py", line 9, in
ser.open() #apre la porta com
File "C:\Programmi\Python26\lib\site-packages\serial\serialwin32.py", line 53, in open raise SerialException("could not open port %s: %s" % (self.portstr, ctypes.WinError())) serial.serialutil.SerialException: could not open port COM1: [Error 5] Accesso negato.

你能帮我吗:
1.管理在windows下运行程序
2. 设法以确切的方式给出带有回车符的字符串???

非常感谢。
斯特凡诺

【问题讨论】:

    标签: string serial-port communication


    【解决方案1】:

    要添加回车,只需将\r 附加到您的字符串,或者可能需要回车/换行\r\n,某些系统使用它来标记行尾。当然,它可能只需要换行。在这种情况下,您只需使用\n

    buffer = "M 3\r"
    

    buffer = "M 3\r\n"
    

    buffer = "M 3\n"
    

    您可能会在解决您的 Windows 问题时找到 pySerial 帮助文档。

    【讨论】:

      【解决方案2】:

      不幸的是,它不起作用。
      在过去,我已经尝试通过 bash 在 linux 中将 \r\n 与命令 echo 一起使用......但没有。
      现在我正在尝试使用 python,但没有再次尝试。当我以这种方式给出字符串时,乐器可能会很有趣:

      buffer = "M 3\r"

      buffer = "M 3\r\n"

      给了我这个答案: @

      就是这样……
      我不知道。
      另一件事:当我尝试使用 bash 语言时,仪器会使用以下命令开始测量:
      echo "M 3 " > /dev/ttyS0
      那是在 3 之后有一个空白。
      显然,其他命令不适用于这个奇怪的空白...

      非常感谢!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-19
        • 2013-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多