1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 <2010> 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 | Index | 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 <2010> 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Re: Problem with streamDevice and I/O Intr |
From: | Dirk Zimoch <[email protected]> |
To: | Florian Feldbauer <[email protected]> |
Cc: | [email protected] |
Date: | Thu, 12 Aug 2010 11:27:24 +0200 |
Dear Dirk,
The device is custom hardware. The CAN messages come from a AT90CAN64 microcontroller with a PCA82C250 CAN transceiver.
http://www.atmel.com/dyn/resources/prod_documents/doc7679.pdf
This mircocontroller send one message after another.
They all look like "t6804NODDDDCH\r" where NO is the channelnumber (0-63), DDDD the appropriate 14-bit conversion result from the ADC and CH
an 8-bit checksum. All coded in hexadecimal
The baudrate of the CAN bus is set to 1 Mbaud.
Florian
On Tue, 10 Aug 2010, Dirk Zimoch wrote:
Hi Florian,
Looks like a race condition. I have to look in the driver. I fear there is nothing you can do about it.
How does the communication work? You say you get 64 messages in series. What do they look like? All like "t68043F34AAA1\r" (only difference in $(no))? That is the timing of these messages? Do they all come in one burst? Do you have a link to the device documentation?
Dirk
Florian Feldbauer wrote:Hello all,
I ran into a problem when reading from a serial device using I/O Intr processing with streamDevice. I receive 64 messages in series and have one record for each message. Now and then I get the error message from epics:
timerQueue INTERNAL ERROR (PANDA:FEMC:PROTO192:THMP:680:CHK:00): timerExpired() unexpected ioAction None
Any idea how to fix this problem?
This is the db: record (scalcout, "THMP:$(ID):CHK:$(no)") { field (DTYP, "stream") field (SCAN, "I/O Intr") field (CALC, "((K XOR L) XOR C)==E?(K<<8)+L:LL") field (OUT, "@THMP.proto getMsg($(no)) USBCAN1") field (INPC, "$(no)") field (INLL, "INV CHK") }
This is the protocol: Terminator = CR; getMsg{ in "t6804\${2}%(K)2X%(L)2X%(E)2X"; }
This is an example string, which is sent from the device: t68043F34AAA1\r
Best regards Florian