Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 15, 2015 15:06:40

eleks
Зарегистрирован: 2014-08-14
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

PCAN-USB подключение

С фрагментом

    self.m_Parent = parent                       # Указатель на класс Tk в модуле Tix
    self.m_Parent.wm_title("PCAN-Basic Example") # Установить титул для данного виджета (окна).
    self.m_Parent.resizable(False,False)         # Есть ли необходимость менять ширину и высоту окна?
# Для данного окна привязать функцию имя WM_DELETE_WINDOW к функции self.Form_OnClosing  
        self.m_Parent.protocol("WM_DELETE_WINDOW",self.Form_OnClosing)
вроде бы разобрался. Здесь последовательно настраивается указатель на класс Tk в модуле Tix. Устанавливается титульная надпись для данного виджета (окна). Отключается необходимость изменения размеров окна по ширине и высоте. Привязывается функция к имени WM_DELETE_WINDOW.
Далее опять проблемный фрагмент
 
    self.m_Frame =Frame(self.m_Parent)
    self.m_Frame.grid(row=0, column=0, padx=5, pady=2, sticky="nwes")
Первая строка настраивает указатель на класс Frame в модуле Tkinter. Вторая строка запускает метод grid, который отсутствует в классе Frame. Вернее есть методы grid_bbox, grid_columnconfigure, grid_location, grid_propagate и т.д., но это ведь не одно и тоже?

Отредактировано eleks (Сен. 15, 2015 15:09:51)

Офлайн

#2 Сен. 15, 2015 15:24:21

eleks
Зарегистрирован: 2014-08-14
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

PCAN-USB подключение

>>> Frame.grid
<unbound method Frame.grid_configure>
>>> help(Frame.grid)
Help on method grid_configure in module Tkinter:

grid_configure(self, cnf={}, **kw) unbound Tkinter.Frame method
Position a widget in the parent widget in a grid. Use as options:
column=number - use cell identified with given column (starting with 0)
columnspan=number - this widget will span several columns
in=master - use master to contain this widget
in_=master - see 'in' option description
ipadx=amount - add internal padding in x direction
ipady=amount - add internal padding in y direction
padx=amount - add padding in x direction
pady=amount - add padding in y direction
row=number - use cell identified with given row (starting with 0)
rowspan=number - this widget will span several rows
sticky=NSEW - if cell is larger on which sides will this
widget stick to the cell boundary

Офлайн

#3 Сен. 15, 2015 15:54:12

eleks
Зарегистрирован: 2014-08-14
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

PCAN-USB подключение

Офлайн

#4 Сен. 15, 2015 16:49:47

eleks
Зарегистрирован: 2014-08-14
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

PCAN-USB подключение

Shaman и i.slepov, спасибо! В принципе разобрался.

Офлайн

#5 Сен. 17, 2015 14:28:40

eleks
Зарегистрирован: 2014-08-14
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

PCAN-USB подключение

Возникли некоторые проблемы с данными объявленными внутри класса. Это сообщение CAN

class TPCANMsg (Structure):
    _fields_ = [ ("ID",      c_ulong),          # 11/29-ти битный идентификатор сообщения
                 ("MSGTYPE", TPCANMessageType), # Тип сообщения
                 ("LEN",     c_ubyte),          # Код длины данных сообщения (0..8)
                 ("DATA",    c_ubyte * 8) ]     # Данные сообщения (DATA[0]..DATA[7])
создаю ссылку на класс и заполняю его
CANMsg = TPCANMsg()
#
CANMsg.ID = 0x200
CANMsg.LEN = 0x08
CANMsg.MSGTYPE = PCAN_MESSAGE_STANDARD
for i in range(CANMsg.LEN):
    CANMsg.DATA[i] = int(self.m_DataEdits[i].get(),16)
Пытаюсь его прочитать и получаю следующее
>>> CANMsg
<PCANBasic.TPCANMsg object at 0x0000000002FD6948>
Успешно отправляю данные, успешно получаю ответ
>>> m_obj.Write(PCAN_USBBUS1, CANMsg)
0
>>> m_obj.Read(PCAN_USBBUS1)
(0, <PCANBasic.TPCANMsg object at 0x000000000304F7C8>, <PCANBasic.TPCANTimestamp object at 0x000000000304F348>)
Но вместо конкретных данных получаю только ссылки на объект (кортеж со ссылками). А как добраться к данным?

Отредактировано eleks (Сен. 17, 2015 14:38:41)

Офлайн

#6 Сен. 17, 2015 14:49:26

eleks
Зарегистрирован: 2014-08-14
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

PCAN-USB подключение

Пытаюсь посмотреть непосредственно объект

>>> TPCANMsg
<class 'PCANBasic.TPCANMsg'>
>>> ss = PCANBasic.TPCANMsg

Traceback (most recent call last):
File "<pyshell#96>", line 1, in <module>
ss = PCANBasic.TPCANMsg
AttributeError: class PCANBasic has no attribute 'TPCANMsg'
>>>
???

Офлайн

#7 Сен. 18, 2015 16:50:05

eleks
Зарегистрирован: 2014-08-14
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

PCAN-USB подключение

В качестве некоторого логического завершения темы, привожу простенькую терминальную программу для PCAN-USB адаптера

# -*- coding: cp1251 -*-
######################################################################
# Мой первый терминал на Python
######################################################################
from PCANBasic import *        # Импорт библиотеки PCAN-Basic
import time
#
def ProcessMessage(*args):        
    theMsg = args[0][0]
    itsTimeStamp = args[0][1]    
    newMsg = TPCANMsg()
    newMsg.ID = theMsg.ID
    print "->", 
    print "%X" % newMsg.ID,
    newMsg.DLC = theMsg.LEN
    for i in range(theMsg.LEN):
        newMsg.DATA[i] = theMsg.DATA[i]
        print "%X" % newMsg.DATA[i],
    print
    newMsg.MSGTYPE = theMsg.MSGTYPE
#    newTimestamp = TPCANTimestampFD()
#    newTimestamp.value = (itsTimeStamp.micros + 1000 * itsTimeStamp.millis + 0x100000000 * 1000 * itsTimeStamp.millis_overflow)
#    self.ProcessMessageFD([newMsg, newTimestamp])
#
x = 0
while x == 0:
    print "Выберите желаемую скорость обмена: 1 - 125кбит/сек, 2 - 500кбит/сек"
    x = int(raw_input("-> "))
    if x == 1:
        baudrate = PCAN_BAUD_125K
    elif x == 2:
        baudrate = PCAN_BAUD_500K
    else:
        print "Сделайте допустимый выбор"
        x = 0
######################################################################
m_obj = PCANBasic()
result = m_obj.Initialize(PCAN_USBBUS1, baudrate, PCAN_TYPE_ISA, 0x02A0, 0x11)
if result != PCAN_ERROR_OK: 
    print "Не подключен адаптер!"
else:    
######################################################################
    x = 0
    while x == 0:
##
        print "Введите HEX-строку посылки, через пробел, в формате"
        print "-> CID D0 D1 D2 D3 D4 D5 D6 D7"
        string_input = raw_input("-> ")
        input_list = string_input.split()
        inp_list = []
        inp_list = [ i for i in range(len(input_list))]
        for i in range(len(input_list)):
            inp_list[i] = int(input_list[i],16)
######################################################################
        CANMsg = TPCANMsg()
        CANMsg.ID = inp_list[0]
        CANMsg.LEN = len(input_list) - 1
        CANMsg.MSGTYPE = PCAN_MESSAGE_STANDARD
        for i in range(len(input_list) - 1):
            CANMsg.DATA[i] = inp_list[i + 1]
        result = m_obj.Write(PCAN_USBBUS1, CANMsg)
        if result != PCAN_ERROR_OK: 
            print "Ошибка передачи!"
            continue
######################################################################
        time.sleep(0.1)
        result = m_obj.Read(PCAN_USBBUS1)
        if result[0] != PCAN_ERROR_OK: 
            print "Нет ответа!"
        ProcessMessage(result[1:])
######################################################################
        print "Если продолжить, то 0. Иначе любое другое число"
        x = int(raw_input("-> "))

Отредактировано eleks (Сен. 18, 2015 17:28:47)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version