2016-08-05 2 views
1

필자는 결국 특정 포트에서 들어오는 정보를 읽거나 저장해야하므로 pyserial을 사용하기 시작했습니다. 다음 코드를 사용하여 나는 단지 사용 된 포트를 인쇄 한 다음 일부 텍스트 ("hello")를 쓰고 읽으려고합니다. 포트가 잘 인쇄되고 있지만 문자열의 출력이 5로 나오고 있습니다. 이것이 어떤 이유일까요?Python/Pyserial : 포트에서 들어오는 정보 읽기

import serial 
import sys 
from time import sleep 

try: 
    ser = serial.Serial('\\.\COM8', 9600,timeout=None, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS) 

except: 
    sys.exit("Error connecting device") 

print ser.portstr 

x = ser.write("hello") 
print x 

ser.close() 

출력 : 또한

>>> 
\.\COM8 
5 
>>> 

, 내가에/수신 정보를 저장 읽기 테스트 할 수 있도록 포트를 통해 들어오는 텍스트 정보의 스트림을 모방하는 나를 위해 간단한 방법이있다?

저는 파이썬 2.7과 '가상 직렬 포트 드라이버 8.0'[Eltima VSPD]을 사용하여이 항목을 테스트하기위한 포트를 에뮬레이션합니다. 발송에 실패로

감사합니다, 스티브

+0

각 파이썬 프로그램을 작성하여이 방법으로 (또는) 당신이 사용하는 Eltima가 VSPD입니다 테스트 할 수 있습니까? –

+0

예. 나는 또한 '가상 직렬 포트 에뮬레이터 - 에뮬레이션 솔루션'을 사용했으며 동일한 결과를 얻었다. – Steve

답변

1

이렇게하면 테스트 할 수 있습니다. 첫째 포트를 관리에서 포트 쌍을 만듭니다

첫 번째 포트 : COM199 두 번째 포트 : COM188

하나를 클릭 콘솔/스크립트에 쌍

를 추가 할 아래 단계 :

>>> import serial 
>>> ser = serial.Serial('COM196', 9600,timeout=None, parity=serial.PARITY_NONE, stopbits=serial.S 
BITS_ONE, bytesize=serial.EIGHTBITS) 
>>> print ser.portstr 
COM196 
>>> x = ser.read(5) # It will be waiting till it receives data 
>>> print x 
hello 

다른 콘솔에서 다음 단계를 수행하십시오.

>>> import serial 
>>> s = serial.Serial('COM188') 
>>> s.write("hello") 
5L 

당신이 포트

+0

고맙습니다. 매우 도움이됩니다. 코드에서 port196을 사용했지만이 포트는 초기에 설정되지 않았습니다 (199 및 188 쌍을 생성했습니다). 이 방법이된다는 뜻입니까? – Steve

0
x = ser.write("hello") 
print x 

당신은이 글을 쓰는. 수신 된 정보가 아닙니다. 아마 당신이 보낸 문자열의 길이를 씁니다. 먼저, 사용자가 보낸 정보에 응답하는 클라이언트 측 스크립트가 있어야합니다.

그리고 이와 같이 사용해야합니다.

...  x = ser.read()   # read one byte 
...  s = ser.read(10)  # read up to ten bytes (timeout) 
...  line = ser.readline() # read a '\n' terminated line 
+0

감사합니다. 들어오는 정보를 에뮬레이트하여 테스트 할 수 있습니까? – Steve

+0

좋아요, 비디오에는 시리얼이 아닌 TCP UDP로 연결하는 방법이 나와 있지만 동일한 논리입니다. 클라이언트 및 서버 스크립트가 모두 실행되어야합니다. https://www.youtube.com/watch?v=XiVVYfgDolU – TuRQuaS3

관련 문제