PCAN Basic

jjin·2024년 3월 26일
0

PCANBasic.py 기본 사용 예

https://forum.peak-system.com/viewtopic.php?t=2817#p8343

에러 해결 포럼

https://forum.peak-system.com/viewforum.php?f=41

https://kaizen8501.tistory.com/266

PCAN Basic API 문서

https://python-can.readthedocs.io/en/stable/interfaces/pcan.html

Pyside6 참고

https://sc.sogang.ac.kr/bbs/bbsview.do?pkid=69555&bbsid=3857&wslID=mecha&searchField=&searchValue=¤tPage=1

PyQt 참고

https://kwonkyo.tistory.com/tag/PyQt#gsc.tab=0

PCANBasicExample_pxs3.pyw 마지막 쪽
def tmrRead_Tick(self):
self.ReadMessages()

def ReadMessages(self):
while (self.m_CanRead and not(stsResult & PCAN_ERROR_QRCVEMPTY)

받는 부분

def displayMessages(self):

PCANBasicExample.m_LastMsgsList[]
원소: MessageStatus 객체

class MessageStatus(
    canMsg: TPCANMsgFD = TPCANMsgFD(),
    canTimestamp: TPCANTimestampFD = TPCANTimestampFD(),
    listIndex: int = -1
)

        self.__m_Msg = canMsg
        self.__m_TimeStamp = canTimestamp
        self.__m_OldTimeStamp = canTimestamp
        self.__m_iIndex = listIndex
        self.__m_iCount = 1
        self.__m_bShowPeriod = True
        self.__m_bWasChanged = False
        self.__m_bWasInserted = True


msgStsCurrentMsg = MessageStatus(newMsg,timeStamp,len(self.m_LastMsgsList))


class TPCANMsgFD (Structure): # PCANBasic.py
    """
    Represents a PCAN message
    """
    _fields_ = [ ("ID",      c_uint),           # 11/29-bit message identifier
                 ("MSGTYPE", TPCANMessageType), # Type of the message (c_ubyte)
                 ("DLC",     c_ubyte),          # Data Length Code of the message (0..15)
                 ("DATA",    c_ubyte * 64) ]    # Data of the message (DATA[0]..DATA[63])


```python

def DisplayMessages(self):

def GetMsgString(self, msgStatus):
.DataString으로 DATA property를 받아올 수 있음.


MessageObject.__m_Msg.DATA 를 파싱해야 함.

lstMessages[]에 완성된 string을 보관함.

display 업데이트 부분

class PCANBasicExample:

보내는 부분

 

CAN Parser

ID 후반부 N = 랙 번호. 1~16
ID 전반부 type = 100 300 400번대 분기

100번대는 N번째 랙 DATA[0]번째 적용 필터(상태 정보/고장 정보/랙 정보/HV 제어 정보) 및 저장 위치 달라짐

300번대는 N번째 랙 DATA[0]번째 셀전압 정보 (저장 위치만 달라짐)
400번대는 N번째 랙 DATA[0]번째 셀온도 정보

def extract_type()

def extract_rack_num()

rack 별 field

MVVM 패턴

Model

class CounterModel:
    def __init__(self):
        self.count = 0  # Initialize the counter to 0

    def increment(self):
        self.count += 1  # Increment the counter

ViewModel

class CounterViewModel(QObject):
	countChanged = pyqtSignal(int) # Signal to update in the view
    
    def __init__(self, model):
    	super().__init__()
        self._model = model
    
    def increment(self):
    	self._model.increment() # Call increment of the model
        self.countChanged.emit(self._model.count) # Emit the updated count

View

class CounterView(QWidget):
	def __init__(self, viewModel):
    	super().__init__()
        self._viewModel = viewModel
        self._viewModel.countChanged.connect(self.updateLabel)
        self.initUI()

ViewModel

c
profile
진짜

0개의 댓글

관련 채용 정보