Найти - Пользователи
Полная версия: python serial
Начало » Python для экспертов » python serial
1 2 3
serrrgggeee
Здравствуйте у меня имеется бесперебойник ippon он присоединен к com порту ttyS0. Я с ним работаю через программу nut так что вопросов по поводу что он работает нет. Хочу с ним поработать через python библботеку serial
#! /usr/bin/env python
# coding: utf-8
 
import serial
 
ser = serial.Serial("/dev/ttyS0")
ser.baudrate = 9600
 
while True :
  line = ser.readline()
  print line
вот есть скрипт, который забирает поток данных из последовательного порта и выводит его на экран. Но в итоге
serrrggggeee@serrrggggeee-Arbyte-Quint-B-M4D3A-H61 ~ $ sudo python port_n.py
короче он молчит, что то я не допанимаю. Но как я понимаю здесь идет работа как с обычным файлом, но тут же если судить логически где то на нижнем уровне должен быть драйвер.
PooH
А что он должен отвечать, если вы его ни о чем не спрашиваете? Вот тут внизу ссылки на архив с описанием протокола общения с UPS.
serrrgggeee
чтото не разобрался раньше на работал с устройствами, Вот допустим
UPS status :
Bit 	            Description                 	
 7  	1 : Utility Fail (Immediate)            	
 6  	1 : Battery Low                         	
 5  	1 : Bypass/Boost or Buck Active                 	
 4  	1 : UPS Failed                          	
 3  	1 : UPS Type is Standby (0 is On_line)  	
 2  	1 : Test in Progress                    	
 1  	1 : Shutdown Active                     	
 0  	1 : Beeper On                             	
это биты для получения статуса, и как теперь я могу использовать их в своем скрипте что бы отправить устройству для получения от него ответа?
PooH
Там же даже пример есть. Вы посылаете на упс строку ‘Q1\n’, в ответ он отдает строку типа ‘(208.4 140.0 208.4 034 59.9 2.05 35.0 00110000\n’. Что означают отдельные части этой строки подробно расписано в документе.

ЗЫ: Возьмите любой терминал, тот же minicom под линухой или Moxa PC Comm terminal Emulator под виндой, и пообщайтесь сами с упсом сначала. Прямо вводите запрос в строчке, типа Q1 , потом Enter и смотрите ответ. Сразу поймете принцип.
serrrgggeee
получается я вот что должен сделать
#! /usr/bin/env python
# coding: utf-8
 
import serial
 
ser = serial.Serial("/dev/ttyS0")
ser.baudrate = 9600
y = ser.write("Q1\n")
 
while True :
  line = ser.readline()
  print line
PooH
если хотите в цикле опрашивать, то типа
import time
import serial
ser = serial.Serial("/dev/ttyS0")
ser.baudrate = 9600
 
while True :
  ser.write("Q1\n")
  line = ser.readline()
 # и тут разбраете на запчасти строку
  print line
 time.sleep(1000)
serrrgggeee
молчит все равно.
PooH
serrrgggeee
молчит все равно.
попробуйте сначала через терминал. проверьте параметры порта

PS: кстати, <cr> это возможно не \n а \r (который с кодом 0x0D), попробуйте его в конце
ser.write("Q1\r")
serrrgggeee
нет с r то же самое.
вот все параметры
serrrggggeee-Arbyte-Quint-B-M4D3A-H61 serrrggggeee # stty  -a < /dev/ttyS0
speed 38400 baud; rows 0; columns 0; line = 0;
intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>;
eol = ^M; eol2 = <undef>; swtch = <undef>; start = <undef>; stop = <undef>;
susp = <undef>; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;
min = 0; time = 0;
-parenb -parodd 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
PooH
В доке по протоколу следующие настройки порта baudrate 2400, 8бит, один стоповый, без контроля четности. Попробуйте выставить для порта.

ЗЫ: даже интересно стало, завтра найду адаптер 232 и сам попробую соединиться.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB