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