TDT-Protocol on CAN » Historie » Revision 46
Revision 45 (Maximilian Seesslen, 20.01.2023 11:22) → Revision 46/104 (Maximilian Seesslen, 20.01.2023 17:33)
h1. Intro
With the TDT-Protocol sensors can just send their values on the BUS without complex object catalogue.
An monitor-software is able to display values without knowing anything about the sensors or their configuration.
The CANId cinsists of sensors is actually their configurable ID or an function code and the node id. Like CANOpen the function code is 4 Bits and the Node-ID is 7 Bit.
In CAN2.0A there can only be 128 Nodes. global command.
CAN 2.0A: 0..0x7FF
CANOpen: 4 Bit Function code, 7 Bit Node-ID
Node-Id: 0..0x7F
Function-Code Mask: 0x780
There are 14 or 28 Filters on STM32Fs
Some STM32 have an internal 96-bit unique ID.
h2. Function code
|_. Code |_. Decription |_. Examples |
| 0x0 | NMT | |
| 0x1 | Alarms | |
| 0x6 | Write object | Set Date, illumination |
| 0x7 | Read object | Get product codes |
| 0x8 | Send object | Send temperature |
| 0x9 | data blob | |
| 0xC | log | |
h1. IDs, ranges and commands
h2. Node CAN IDs
* 11-Bit-Identifier, (CAN 2.0A); 2048; 0x0 ... 0x7F0; 0x0 ... 0x7F with function code
* 29-Bit-Identifier, (CAN 2.0B); 0x20000000
|_. Range |_. Decription |_. Examples |
| 0x01-0x0F | Network Manager | PC |
| 0x10-0x2F | Active controller | CANDis |
| 0x30-0x4F | Actor | CANSwitch |
| 0x50-0x6F | Sending sensors | Sensemux |
| 0x70-0x7F | Passive Sensors | CANRec |
h2. Object structutre
|_. Size |_. Decription |_. Examples |
| 2 | Object | Plain Sensor value; Set illumination |
| 1 | Data type | Int, Float, Time, Date, Percent, Promil, Multipacket-String |
| 1 | Unit | Hz, °C, Time, Date, PWM, CAN-ID, Name, Description, Room |
| 4 | Value | 32Bit |
h2. Objects
|_. Code |_. Description |
| none | |
| ambientLight | |
| plantLight | |
| multimediaSwitch | |
| mainSwitch | |
| date | |
| time | |
| dummy | |
| plantSensor | |
| plantSensor0 | |
| plantSensor1 | |
| plantSensor2 | |
| plantSensor3 | |
| plantSensor4 | |
| firmwareVersion | |
| firmwareDate | |
| hardwareRevision | |
| hardwareDate | |
| temperatureIntern | |
| temperatureIntern1 | |
| temperatureIntern2 | |
| temperatureIntern3 | |
| temperatureIntern4 | |
| temperatureExtern | |
| temperatureExtern1 | |
| temperatureExtern2 | |
| temperatureExtern3 | |
| temperatureExtern4 | |
| humidity | |
| voc | |
h2. Units
* Date: year 2B, month 1B, day 1B
* Time: hour 1B, minute 1B, second 1B, subsecond 1B
h1. Multipacket-Strings
|_. Address |_. Type |
| 0x0 | Package count |
| 0x1 | Package number |
| 0x2..0x3 | Data |
h1. Actuator introduction
When introduction is requested by system command, each device must send description for each subid.
h1. Example
h2. Example: Turn on the lights
|_.Data |_.Size |_.Description |
|0x300 |0x100 | 29 Bits | Function code: Write Object; All objects. CAN-Id: Global command |
|0x0 | 2 1 Byte | Message-Type: Global command |
|0x0 | 1 Byte | Sub-Id: Set ambient light |
|0x1 | 1 Byte | Data-Type: Permill Integer |
|0x1 | 1 Byte | PWM: PWM permilli |
|1000 | 4 Byte | Value: Full Brightness |
h1. Multipacket-Strings Usecases
There should be the posssibillity * simple actors can filter message to write the complete SPI-Flash even if it takes forever. "Global actuator" messages, at least "system commands"
Not every slave needs to be able to send super big blocks. But every slave should be able to
send e.g. descriptions. * There are 14 or 28 Filters on STM32Fs
|_. Size |_. Type |
| 0x4 | Package number (0: Data contains package count) |
| 0x4 | Data |
h1. Actuator introduction
When introduction is requested by system command, each device must send description for each subid.
h1. ID Assigning
Some STM32 have an internal 96-bit unique ID.
h1. V2
|_. Size |_. Decription |_. Examples |
| 1 | Packet type | Standard TDT packet |
| 1 | Sub-Id; | Futher index; Sub-Sensor or more specifi kind of thing to be set |
| 1 | Data type | Int, Float, Time, Date, Percent, Promil, Multipacket-String |
| 1 | Unit | Hz, °C, Time, Date, PWM, CAN-ID, Name, Description, Room |
| 4 | Value | 32Bit |
h2. Multimessage package
There should be the posssibillity to write the complete SPI-Flash even if it takes forever.
Not every slave needs to be able to send super big blocks. But every slave should be able to
send e.g. descriptions.
* Is order of messages an issue? Multiple Mailboxes.
|_. Size |_. Decription |_. Examples |
| 1 | Packet type | Multimessage package |
| 1 | count | Number of packages |
| 1 | number | 0: value=data length in bytes |
| 4 | Value | 32Bit |
|_. Size |_. Decription |_. Examples |
| 1 | Packet type | Multimessage package 2 |
| 1 | id | Mailbox |
| 1 | number | 0: value=data length in bytes |
| | | 1: value=number of messages |
| | | 2..x: data |
| 4 | Value | 32Bit |
h2. Diagnose
With the TDT-Protocol sensors can just send their values on the BUS without complex object catalogue.
An monitor-software is able to display values without knowing anything about the sensors or their configuration.
The CANId cinsists of sensors is actually their configurable ID or an function code and the node id. Like CANOpen the function code is 4 Bits and the Node-ID is 7 Bit.
In CAN2.0A there can only be 128 Nodes. global command.
CAN 2.0A: 0..0x7FF
CANOpen: 4 Bit Function code, 7 Bit Node-ID
Node-Id: 0..0x7F
Function-Code Mask: 0x780
There are 14 or 28 Filters on STM32Fs
Some STM32 have an internal 96-bit unique ID.
h2. Function code
|_. Code |_. Decription |_. Examples |
| 0x0 | NMT | |
| 0x1 | Alarms | |
| 0x6 | Write object | Set Date, illumination |
| 0x7 | Read object | Get product codes |
| 0x8 | Send object | Send temperature |
| 0x9 | data blob | |
| 0xC | log | |
h1. IDs, ranges and commands
h2. Node CAN IDs
* 11-Bit-Identifier, (CAN 2.0A); 2048; 0x0 ... 0x7F0; 0x0 ... 0x7F with function code
* 29-Bit-Identifier, (CAN 2.0B); 0x20000000
|_. Range |_. Decription |_. Examples |
| 0x01-0x0F | Network Manager | PC |
| 0x10-0x2F | Active controller | CANDis |
| 0x30-0x4F | Actor | CANSwitch |
| 0x50-0x6F | Sending sensors | Sensemux |
| 0x70-0x7F | Passive Sensors | CANRec |
h2. Object structutre
|_. Size |_. Decription |_. Examples |
| 2 | Object | Plain Sensor value; Set illumination |
| 1 | Data type | Int, Float, Time, Date, Percent, Promil, Multipacket-String |
| 1 | Unit | Hz, °C, Time, Date, PWM, CAN-ID, Name, Description, Room |
| 4 | Value | 32Bit |
h2. Objects
|_. Code |_. Description |
| none | |
| ambientLight | |
| plantLight | |
| multimediaSwitch | |
| mainSwitch | |
| date | |
| time | |
| dummy | |
| plantSensor | |
| plantSensor0 | |
| plantSensor1 | |
| plantSensor2 | |
| plantSensor3 | |
| plantSensor4 | |
| firmwareVersion | |
| firmwareDate | |
| hardwareRevision | |
| hardwareDate | |
| temperatureIntern | |
| temperatureIntern1 | |
| temperatureIntern2 | |
| temperatureIntern3 | |
| temperatureIntern4 | |
| temperatureExtern | |
| temperatureExtern1 | |
| temperatureExtern2 | |
| temperatureExtern3 | |
| temperatureExtern4 | |
| humidity | |
| voc | |
h2. Units
* Date: year 2B, month 1B, day 1B
* Time: hour 1B, minute 1B, second 1B, subsecond 1B
h1. Multipacket-Strings
|_. Address |_. Type |
| 0x0 | Package count |
| 0x1 | Package number |
| 0x2..0x3 | Data |
h1. Actuator introduction
When introduction is requested by system command, each device must send description for each subid.
h1. Example
h2. Example: Turn on the lights
|_.Data |_.Size |_.Description |
|0x300 |0x100 | 29 Bits | Function code: Write Object; All objects. CAN-Id: Global command |
|0x0 | 2 1 Byte | Message-Type: Global command |
|0x0 | 1 Byte | Sub-Id: Set ambient light |
|0x1 | 1 Byte | Data-Type: Permill Integer |
|0x1 | 1 Byte | PWM: PWM permilli |
|1000 | 4 Byte | Value: Full Brightness |
h1. Multipacket-Strings Usecases
There should be the posssibillity * simple actors can filter message to write the complete SPI-Flash even if it takes forever. "Global actuator" messages, at least "system commands"
Not every slave needs to be able to send super big blocks. But every slave should be able to
send e.g. descriptions. * There are 14 or 28 Filters on STM32Fs
|_. Size |_. Type |
| 0x4 | Package number (0: Data contains package count) |
| 0x4 | Data |
h1. Actuator introduction
When introduction is requested by system command, each device must send description for each subid.
h1. ID Assigning
Some STM32 have an internal 96-bit unique ID.
h1. V2
|_. Size |_. Decription |_. Examples |
| 1 | Packet type | Standard TDT packet |
| 1 | Sub-Id; | Futher index; Sub-Sensor or more specifi kind of thing to be set |
| 1 | Data type | Int, Float, Time, Date, Percent, Promil, Multipacket-String |
| 1 | Unit | Hz, °C, Time, Date, PWM, CAN-ID, Name, Description, Room |
| 4 | Value | 32Bit |
h2. Multimessage package
There should be the posssibillity to write the complete SPI-Flash even if it takes forever.
Not every slave needs to be able to send super big blocks. But every slave should be able to
send e.g. descriptions.
* Is order of messages an issue? Multiple Mailboxes.
|_. Size |_. Decription |_. Examples |
| 1 | Packet type | Multimessage package |
| 1 | count | Number of packages |
| 1 | number | 0: value=data length in bytes |
| 4 | Value | 32Bit |
|_. Size |_. Decription |_. Examples |
| 1 | Packet type | Multimessage package 2 |
| 1 | id | Mailbox |
| 1 | number | 0: value=data length in bytes |
| | | 1: value=number of messages |
| | | 2..x: data |
| 4 | Value | 32Bit |
h2. Diagnose