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
> >
>