제가 찾은 RS-485-USB 변환기를 사용하여 RS-485 RFID 리더에서 직렬 데이터를 읽으려고 합니다.여기그리고 Pyserial을 실행하는 Python 스크립트입니다.
내가 직면한 문제는 읽은 내용을 인쇄할 때 Ubuntu 18.04.6 LTS를 실행하는 Linux의 Python 터미널에 올바른 숫자이지만 잘못된 바이트가 표시된다는 것입니다. 그러나 Windows에서 테스트하면 올바른 바이트가 표시됩니다. 저는 완전히 동일한 코드, 동일한 하드웨어(OS 제외), 동일한 카드 리더 설정을 사용하고 있습니다.
내 Windows 코드:
import serial
import time
ser = serial.Serial('COM6', 19200, timeout = 2, parity = serial.PARITY_EVEN)
time.sleep(2)
while True:
while(ser.in_waiting > 0):
x = (ser.readline().hex())
print(x)
창 출력:
020308fe10807c000bcbae9b9e
내 리눅스 코드:
import serial
import time
ser = serial.Serial('/dev/ttyUSB0', 19200, timeout = 2, parity = serial.PARITY_EVEN)
time.sleep(2)
while True:
while(ser.in_waiting > 0):
x = (ser.readline().hex())
print(x)
리눅스 출력:
0203081e1a001c030b0b1d131e
따라서 두 경우 모두 13바이트(바이트당 2자리)를 얻어 문자열로 변환합니다. 내가 관심을 갖고 100% 알아야 하는 유일한 데이터는 RFID 태그 데이터입니다. 이는 바이트 8에서 바이트 12(Windows 출력의 경우 000bcbae9b)입니다. 그러나 Linux 출력의 데이터는 다릅니다(030b0b1d13).
참고: Windows 16진수 값을 10진수로 변환한 후 숫자가 내 태그와 일치하고 데이터시트에 표시되기 때문에 바이트 8~12(0부터 계산하지 않음)가 내 태그 데이터에 해당한다는 것을 알고 있습니다.
그렇다면 데이터가 왜 다른지 아는 사람이 있나요? 시스템이 데이터를 다르게 보거나 형식을 지정하거나 해석하기 때문일 수 있습니까?
도와주셔서 감사합니다!
stty -F /dev/ttyUSB0 -a의 출력
onecup@inventory03:~$ stty -F /dev/ttyUSB0 -a
speed 19200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; discard = ^O; min = 0; time = 0;
parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff
-iuclc -ixany imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt
-echoctl -echoke -flusho -extproc
더 쉽게 시각적으로 참조할 수 있도록 간격을 두고 정렬된 2바이트 스트림을 다시 표시합니다.
Byte nr: 1 2 3 4 5 6 7 8 9 10 11 12 13
Windows: 02 03 08 fe 10 80 7c 00 0b cb ae 9b 9e
Linux: 02 03 08 1e 1a 00 1c 03 0b 0b 1d 13 1e
추가 참조를 위해 다음은 다양한 RFID 태그에 대한 출력입니다. (바이트 8~12는 여전히 내가 관심을 갖는 유일한 바이트입니다. Windows는 정확하고 Linux는 잘못되었습니다):
Byte nr: 1 2 3 4 5 6 7 8 9 10 11 12 13
Windows: 02 03 08 fe 2e 80 7c 00 0b bb 9a 80 4b
Linux: 02 03 08 1e 16 00 1c 03 0b 17 1a 01 09