python serial 통신

Python : 2008.01.17 00:38

출처 : 파이선 마을 http://bbs.python.or.kr/viewtopic.php?t=23318
제가 지금 측정장비를 컴퓨터로 통신을 하려고 합니다.
프로그램은 파이썬을 사용하고 있고요.
일단 파이썬에서
>> import serial
>> com1 = serial.Serial(0,9600)
>> com1 ( -> 포트에 대한 정보가 쭉 나옴)
문제는 그 다음입니다.
>> com1.write('TEMP?')
>> com1.read()를 하면
python program이 멈춰버립니다. 아마도 읽을 것이 없어서 그런 듯 합니다.
또한 >> help(serial) 을 하면
serial에 대한 정보가 나오는 데 마지막엔 portNotOpenerror 라는 글이 나오면서
help 함수가 끝이 나더군요
아마도 프로그램상에서 시리얼 포트는 인식을 했는데 명령어가 케이블을 타고
측정장비에 도달하지 못한 것 같습니다. 포트가 안열렸으니...
어떻게 하면 포트가 열리나요?
궁금합니다.



포트객체.open()
이란 명령어지만 구지 저 명령어를 안써도
serial.Serial(포트번호) , 즉 포트번호를 지정해주셨다면 열렸을겁니다.
그리고 먹통이 되는 이유는 read명령어를
치면 포트에서 어떤 데이터를 읽을때까지 대기 하기때문입니다.
read(원하는만큼의데이터값) 요래..써주시면 원하는 만큼만 읽게됩니다.
하지만 원하는 만큼의 값이 안들어올경우 계속 대기 하겠죠.
대기하는것을 막는 방법은 timeout값을 조절하는 것입니다.
http://pyserial.sourceforge.net/ 첫페이지 잘 보시면 답이 나올꺼에요~



혹시 "\n"이 필요한건 아닌지?
코드:
com1.write('TEMP?\n')


또 질문이 있습니다.^^
윗분의 말씀 처럼 timeout 값을 조절하니 read 명령어를 입력해도
python이 멈추지는 않았습니다. 하지만 아무런 데이타가 없다는게
문제인데요.
>com1.write('IDN?') <- 측정장비 이름 물어보는 명령어임.
하면은 측정장비의 display이 창에 'REM'(remote)이라는 글씨가 뜹니다.
컴퓨터와 연결이 됐다는 의미이구요 그리고 나서
>com1.read(10)
' '
>
이렇게 아무런 데이타도 불러들여지지 않았더군요
컴퓨터 설정값하고 장비설정값하고 달라서 그런지...
모르겠네요.^^;;




윈도우에서 pyserial 팩키지 설치시에 따로 필요로 하는 팩키지는 없습니다. 파이썬이 설치된 상태에서 아래 팩키지만 설치하시면 됩니다.
http://downloads.sourceforge.net/pyserial/pyserial-2.2.win32.exe?modtime=1122861377&big_mirror=0
help(serial)에서 포트를 여는 액션은 없을텐데, 일단 출력되는 에러메세지 전체를 볼 수 있으면 하네요. 아래는 제가 직접 수행한 결과입니다. 결과가 다르게 나오시나요?
코드:
>>> import serial
>>> help(serial)
Help on package serial:

NAME
    serial

FILE
    c:\python25\lib\site-packages\serial\__init__.py

DESCRIPTION
    #portable serial port access with python
    #this is a wrapper module for different platform implementations
    #
    # (C)2001-2002 Chris Liechti <cliechti@gmx.net>
    # this is distributed under a free software license, see license.txt

PACKAGE CONTENTS
    buffer
    serialjava
    serialposix
    serialutil
    serialwin32
    sermsdos
    writeblockingtest

DATA
    EIGHTBITS = 8
    FIVEBITS = 5
    MS_CTS_ON = 16
    MS_DSR_ON = 32
    MS_RING_ON = 64
    MS_RLSD_ON = 128
    PARITY_EVEN = 'E'
    PARITY_NAMES = {'E': 'Even', 'N': 'None', 'O': 'Odd'}
    PARITY_NONE = 'N'
    PARITY_ODD = 'O'
    SEVENBITS = 7
    SIXBITS = 6
    STOPBITS_ONE = 1
    STOPBITS_TWO = 2
    VERSION = '1.31'
    XOFF = '\x13'
    XON = '\x11'
    portNotOpenError = SerialException('Port not open',)
    writeTimeoutError = SerialTimeoutException('Write timeout',)


>>>


help(serial)입력했을 때 나오는 데이타들을
저장하려고 컴퓨터에 앉았는데
그냥 우연치 않게 이것저것 해보다가
드디어 해결했습니다. 문제는 '\n'였더군요
아이고 파이썬을 처음해본지라 사소하지만 중요한 실수를 범했네요
그 전에도 \n붙여서 입력했는데 그땐 왜 않됐는지 참.^^
그동안 같이 고민해주셔서 감사합니다^^
야호!!!!

'Python' 카테고리의 다른 글

[Python] Python 설치하기  (0) 2008.01.17
python serial 통신  (0) 2008.01.17
에릭 하게만 시리즈 1 - 수치처리 파이썬의 기초  (0) 2007.08.02
python 연습  (0) 2007.08.02
Posted by Real_G