LINUX.ORG.RU

Помогите с pyserial для венды, будь она неладна.

 , ,


0

2

Есть вот такое решение для датчиков посетителей. Это для Linux, и всё корректно пашет. Требуется такое же замутить для винды на том же python. Толковых примеров считывания сигналов под вендой не нашёл. Накопал только, что это делается через win32api и WaitCommEvent. Но что там и как - материалов нет. Поможите, если кто решал подобное.

#!/usr/bin/python
#coding=utf-8
import os,sys,datetime
from serial import Serial
from fcntl import  ioctl
from termios import (TIOCMIWAIT,TIOCM_RNG,TIOCM_CTS)
ser = Serial('/dev/ttyUSB0')
wait_signals = (TIOCM_RNG | TIOCM_CTS)
ins=0
out=0
status=""
x=0
os.system('clear')
while True:
    ioctl(ser.fd, TIOCMIWAIT, wait_signals)
    if ser.getRI() == True and ser.getCTS() == False:
        x=x+1
        status=status+"in"
    if ser.getRI() == False and ser.getCTS() == True:
        x=x+1
        status=status+"out"
    if x == x*2/2:
        if status == "inout":
            ins=ins+1
            status=""
            f=open("posetiteli.csv", "a+")
            print >>f,datetime.datetime.now().strftime("%d-%m-%Y %H:%M:%S"),'Вошло:',1,'Вышло:',0
            f.close()
            os.system('clear')
            print datetime.datetime.now().strftime("%d-%m-%Y %H:%M:%S"),'Вошло:',ins,'Вышло:',out
        if status == "outin":
            out=out+1print >>f,datetime.datetime.now().strftime("%d-%m-%Y %H:%M:%S"),'Вошло:',0,'Вышло:',1
            f.close()
            os.system('clear')
            print datetime.datetime.now().strftime("%d-%m-%Y %H:%M:%S"),'Вошло:',ins,'Вышло:',out
            status=""
            f=open("posetiteli.csv", "a+")



Последнее исправление: dened (всего исправлений: 1)

На винфак.

Deleted
()
Ответ на: комментарий от anonymous

Serial('/dev/ttyUSB0')
Что-то мне подсказывает, что дело в этом.

ага в винде СОМ 1-0 номера, я вот думаю винда не ладная или ТС, еще не все модули могут работать с виндой и лиуксом, некотрые модули работают в х32, а некоторые и в х32 и х64

anonymous
()

Так а в чем проблема ? Установи pyserial для винды. У меня скрипт работал и там и там без изменений

Если юзаешь USB to Serial конвертеры то рекомендую проверить наличие последнего виндового драйвера, старые версии могут работать значительно хуже

alx777 ★★
()

ser = Serial('/dev/ttyUSB0')

Как это понимать??? А где энумерация, или получение номера порта из командной строки?

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от Siado

Вот и иди на винфак

Но ведь он же написал «будь она неладна» - это его реабилитирует :)

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от alx777

Проблема в том, что модуль termios отсутсвует в виндовой реализации питона, а в спасительном вроде-бы cygwin-е в этом модуле нет функции TIOCMIWAIT. В этом вся и проблема, аналог TIOCMIWAIT есть в win32api и называется WaitCommEvent, но толковых примеров отлова сигналов этим оператором я не нашёл. Плюс там ещё какие-то невменяемые handle для устройств и файлов, это вобще ад какой-то. Я бы и рад всё на Linux делать, но мне не дадут губить инфраструктуру находящуюся в работе.

dened
() автор топика
Ответ на: комментарий от dened

А заменить для начала процессинг сигналов поллингом ?

>>> s0 = serial.Serial('/dev/ttyUSB0', 9600)
>>> print s0.ri, s0.cts
False False
>>> while (not s0.ri) and (not s0.cts):
...     time.sleep(0.01)
alx777 ★★
()
Ответ на: комментарий от Radjah

Замена «/dev/ttyUSB0» на что-то типа «COM9» не канает?

Плохой совет, на винде конструктор принимает целые числа а не строки

pftBest ★★★★
()
Ответ на: комментарий от outsider

Здесь должна была быть конструкция, которая крашит интерпретатор в венде.

anonymous
()
Ответ на: комментарий от justAmoment

Машинки слабенькие, чтобы там ещё и виртуалка крутилась, да и крутится на них ещё куча всего, плюс кладовщик работает постоянно.

dened
() автор топика
Ответ на: комментарий от dened

Ты же не в доту в виртуалке играть собрался, а работать с компортом. Зачем там какие-то дикие мощности? Может твой скрипт и без граф. оболочки умеет, так ещё лучше. В крайнем случае, xfce хватит всем.

justAmoment ★★★★★
()
Ответ на: комментарий от alx777

Он не будет успевать отлавливать.

dened
() автор топика
Ответ на: комментарий от outsider

Давно писал, костыль какой-то вроде. Уже не помню что подпирает.

dened
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.