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 of sensors is actually their configurable ID or an global command.
CAN 2.0A: 0..0x7FF
CANOpen: 4 Bit Function code, 7 Bit Node-ID
Node-Id: 0..0x7F
Function-Code Mask: 0x780
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 |
|
IDs, ranges and commands¶
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 |
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 |
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 |
|
Units¶
- Date: year 2B, month 1B, day 1B
- Time: hour 1B, minute 1B, second 1B, subsecond 1B
Multipacket-Strings¶
| Address |
Type |
| 0x0 |
Package count |
| 0x1 |
Package number |
| 0x2..0x3 |
Data |
Actuator introduction¶
When introduction is requested by system command, each device must send description for each subid.
Example¶
Turn on the lights¶
| Data |
Size |
Description |
| 0x100 |
29 Bits |
CAN-Id: Global command |
| 0x0 |
1 Byte |
Message-Type: Global command |
| 0x0 |
1 Byte |
Sub-Id: Set ambient light |
| 0x1 |
1 Byte |
Data-Type: Integer |
| 0x1 |
1 Byte |
PWM: PWM permilli |
| 1000 |
4 Byte |
Value: Full Brightness |
Usecases¶
- simple actors can filter message to "Global actuator" messages, at least "system commands"
- There are 14 or 28 Filters on STM32Fs
ID Assigning¶
Some STM32 have an internal 96-bit unique ID.
| 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 |
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 |
Diagnose¶