Die Methode KnxTpUart::readKNXTelegram() ruft immer sendNCDPosConfirm(...) auf wenn ein NCD Telegramm empfangen wurde und zwar unabhängig von der Zieladresse. Das ist nicht sinnvoll und kann einfach behoben werden.
Hier mal eine kurze Fehleranalyse. Arduino mit physikalischer Adresse 1.1.31 und dem folgendem Sketch:
Code:
#include <KnxTpUart.h>
#include <Bounce2.h>
KnxTpUart knx(&Serial1, "1.1.31");
String SEND_GROUP_1 = "3/0/5"; // DG Flur
String LISTEN_GROUP_1 = "3/0/5"; // DG Flur
int LISTEN_GROUP_1_INT = 6149; // t_main*2048 + t_middle*256 + t_sub
bool light_state = false;
#define BUTTON_PIN 9
// Instantiate a Bounce object
Bounce debouncer = Bounce();
void setup() {
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.println("TP-UART Test");
Serial1.begin(19200);
UCSR1C = UCSR1C | B00100000; // Even Parity
knx.uartReset();
knx.addListenGroupAddress(LISTEN_GROUP_1);
// setup the button and Bounce object
pinMode(BUTTON_PIN, INPUT_PULLUP);
debouncer.attach(BUTTON_PIN);
debouncer.interval(20);
}
void loop() {
boolean stateChanged = debouncer.update();
if (stateChanged) {
// the state has changed, send knx event
light_state = !light_state;
bool success = knx.groupWriteBool(SEND_GROUP_1, light_state);
}
}
void serialEvent1() {
// nur zum Testen ...
KnxTpUartSerialEventType eType = knx.serialEvent();
}
Code:
LPDU: B0 FF FF 11 01 61 43 00 7D :L_Data system from 15.15.255 to 1.1.1 hops: 06 T_DATA_CONNECTED_REQ serno:00 A_DeviceDescriptor_Read Type:00 LPDU: B0 11 01 FF FF 60 C2 FD :L_Data system from 1.1.1 to 15.15.255 hops: 06 T_ACK Serno:00
Code:
LPDU: BC 11 1F 11 01 60 C2 FF :L_Data low from 1.1.31 to 1.1.1 hops: 06 T_ACK Serno:00
Code:
bool KnxTpUart::readKNXTelegram() Source: 1.1.1 Target Physical: 15.15.255 Interested (group, physical, broadcast) = 0, 0, 0 [B]<= wir sind nicht interessiert[/B] NCD Telegram 0 received NCD sending positive confirm >>>>>> [B]<= und senden trotzdem eine acknowledge an 15.15.255 weil in KnxTpUart::readKNXTelegram() ein NCD Teleramm unabhängig von der Zieladresse immer bestätigt wird[/B] NCD Waiting for confirmation >>>>>> [B]<= und warten auf eine Antwort von 15.15.255 die wir nicht bekommen[/B]
Jetzt nehmen wir mal einen zweiten Arduino mit dem gleichen Sketch und physikalischer Adresse 1.1.34 dazu.
Der empfängt das NCD acknowledge das von 1.1.31 an 1.1.1 geschickt wurde :
Code:
LPDU: BC 11 1F 11 01 60 C2 FF :L_Data low from 1.1.31 to 1.1.1 hops: 06 T_ACK Serno:00
Code:
LPDU: BC 11 22 11 1F 60 C2 DC :L_Data low from 1.1.34 to 1.1.31 hops: 06 T_ACK Serno:00 LPDU: 9C 11 22 11 1F 60 C2 FC :L_Data (repeated) low from 1.1.34 to 1.1.31 hops: 06 T_ACK Serno:00 LPDU: 9C 11 22 11 1F 60 C2 FC :L_Data (repeated) low from 1.1.34 to 1.1.31 hops: 06 T_ACK Serno:00 LPDU: 9C 11 22 11 1F 60 C2 FC :L_Data (repeated) low from 1.1.34 to 1.1.31 hops: 06 T_ACK Serno:00



Einen Kommentar schreiben: