You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cg...@apache.org on 2023/01/28 18:23:28 UTC
[plc4x] 01/01: Fix issue-602, completely kills the tasks associated with the S7 driver.
This is an automated email from the ASF dual-hosted git repository.
cgarcia pushed a commit to branch issue-602
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit adab583988e9ad73d9d8c8f0f96f4334bfd8c0cd
Author: César García <ce...@ceos.com.ve>
AuthorDate: Sat Jan 28 14:22:43 2023 -0400
Fix issue-602, completely kills the tasks associated with the S7 driver.
---
.../java/knxnetip/readwrite/KnxDatapoint.java | 33 +++
.../java/knxnetip/readwrite/KnxDatapointType.java | 261 +++++++++++----------
.../java/knxnetip/readwrite/KnxManufacturer.java | 4 +-
.../s7/readwrite/protocol/S7ProtocolLogic.java | 69 +++++-
.../spi/transaction/RequestTransactionManager.java | 23 +-
5 files changed, 257 insertions(+), 133 deletions(-)
diff --git a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxDatapoint.java b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxDatapoint.java
index 9db44c3974..89e8f23e7b 100644
--- a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxDatapoint.java
+++ b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxDatapoint.java
@@ -3912,6 +3912,23 @@ public class KnxDatapoint {
// Simple Field (value)
Float value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readFloat("", 32);
+ return new PlcREAL(value);
+ } else if (EvaluationHelper.equals(
+ datapointType, KnxDatapointType.DPT_Value_ApparentPower)) { // REAL
+
+ // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+ {
+ short reserved = /*TODO: migrate me*/ /*TODO: migrate me*/
+ readBuffer.readUnsignedShort("", 8);
+ if (reserved != (short) 0x00) {
+ LOGGER.info(
+ "Expected constant value " + 0x00 + " but got " + reserved + " for reserved field.");
+ }
+ }
+
+ // Simple Field (value)
+ Float value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readFloat("", 32);
+
return new PlcREAL(value);
} else if (EvaluationHelper.equals(
datapointType, KnxDatapointType.DPT_Volume_Flux_Meter)) { // REAL
@@ -10455,6 +10472,16 @@ public class KnxDatapoint {
float value = (float) _value.getFloat();
/*TODO: migrate me*/
/*TODO: migrate me*/ writeBuffer.writeFloat("", 32, (value));
+ } else if (EvaluationHelper.equals(
+ datapointType, KnxDatapointType.DPT_Value_ApparentPower)) { // REAL
+ // Reserved Field
+ /*TODO: migrate me*/
+ /*TODO: migrate me*/ writeBuffer.writeUnsignedShort(
+ "", 8, ((Number) (short) 0x00).shortValue());
+ // Simple Field (value)
+ float value = (float) _value.getFloat();
+ /*TODO: migrate me*/
+ /*TODO: migrate me*/ writeBuffer.writeFloat("", 32, (value));
} else if (EvaluationHelper.equals(
datapointType, KnxDatapointType.DPT_Volume_Flux_Meter)) { // REAL
// Reserved Field
@@ -14655,6 +14682,12 @@ public class KnxDatapoint {
sizeInBits += 8;
// Simple Field (value)
sizeInBits += 32;
+ } else if (EvaluationHelper.equals(
+ datapointType, KnxDatapointType.DPT_Value_ApparentPower)) { // REAL
+ // Reserved Field
+ sizeInBits += 8;
+ // Simple Field (value)
+ sizeInBits += 32;
} else if (EvaluationHelper.equals(
datapointType, KnxDatapointType.DPT_Volume_Flux_Meter)) { // REAL
// Reserved Field
diff --git a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxDatapointType.java b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxDatapointType.java
index 7ca4fbd052..ac33240d5f 100644
--- a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxDatapointType.java
+++ b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxDatapointType.java
@@ -765,391 +765,396 @@ public enum KnxDatapointType {
(long) 219L, (int) 78, (String) "weight (N)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
DPT_Value_Work(
(long) 220L, (int) 79, (String) "work (J)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
- DPT_Volume_Flux_Meter(
+ DPT_Value_ApparentPower(
(long) 221L,
+ (int) 80,
+ (String) "apparent power (VA)",
+ KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+ DPT_Volume_Flux_Meter(
+ (long) 222L,
(int) 1200,
(String) "volume flux for meters (m³/h)",
KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
DPT_Volume_Flux_ls(
- (long) 222L,
+ (long) 223L,
(int) 1201,
(String) "volume flux for meters (1/ls)",
KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
DPT_Access_Data(
- (long) 223L, (int) 0, (String) "entrance access", KnxDatapointMainType.DPT_ENTRANCE_ACCESS),
+ (long) 224L, (int) 0, (String) "entrance access", KnxDatapointMainType.DPT_ENTRANCE_ACCESS),
DPT_String_ASCII(
- (long) 224L,
+ (long) 225L,
(int) 0,
(String) "Character String (ASCII)",
KnxDatapointMainType.DPT_CHARACTER_STRING),
DPT_String_8859_1(
- (long) 225L,
+ (long) 226L,
(int) 1,
(String) "Character String (ISO 8859-1)",
KnxDatapointMainType.DPT_CHARACTER_STRING),
DPT_SceneNumber(
- (long) 226L, (int) 1, (String) "scene number", KnxDatapointMainType.DPT_SCENE_NUMBER),
+ (long) 227L, (int) 1, (String) "scene number", KnxDatapointMainType.DPT_SCENE_NUMBER),
DPT_SceneControl(
- (long) 227L, (int) 1, (String) "scene control", KnxDatapointMainType.DPT_SCENE_CONTROL),
- DPT_DateTime((long) 228L, (int) 1, (String) "date time", KnxDatapointMainType.DPT_DATE_TIME),
- DPT_SCLOMode((long) 229L, (int) 1, (String) "SCLO mode", KnxDatapointMainType.DPT_1_BYTE),
- DPT_BuildingMode((long) 230L, (int) 2, (String) "building mode", KnxDatapointMainType.DPT_1_BYTE),
- DPT_OccMode((long) 231L, (int) 3, (String) "occupied", KnxDatapointMainType.DPT_1_BYTE),
- DPT_Priority((long) 232L, (int) 4, (String) "priority", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 228L, (int) 1, (String) "scene control", KnxDatapointMainType.DPT_SCENE_CONTROL),
+ DPT_DateTime((long) 229L, (int) 1, (String) "date time", KnxDatapointMainType.DPT_DATE_TIME),
+ DPT_SCLOMode((long) 230L, (int) 1, (String) "SCLO mode", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_BuildingMode((long) 231L, (int) 2, (String) "building mode", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_OccMode((long) 232L, (int) 3, (String) "occupied", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_Priority((long) 233L, (int) 4, (String) "priority", KnxDatapointMainType.DPT_1_BYTE),
DPT_LightApplicationMode(
- (long) 233L, (int) 5, (String) "light application mode", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 234L, (int) 5, (String) "light application mode", KnxDatapointMainType.DPT_1_BYTE),
DPT_ApplicationArea(
- (long) 234L, (int) 6, (String) "light application area", KnxDatapointMainType.DPT_1_BYTE),
- DPT_AlarmClassType((long) 235L, (int) 7, (String) "alarm class", KnxDatapointMainType.DPT_1_BYTE),
- DPT_PSUMode((long) 236L, (int) 8, (String) "PSU mode", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 235L, (int) 6, (String) "light application area", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_AlarmClassType((long) 236L, (int) 7, (String) "alarm class", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_PSUMode((long) 237L, (int) 8, (String) "PSU mode", KnxDatapointMainType.DPT_1_BYTE),
DPT_ErrorClass_System(
- (long) 237L, (int) 11, (String) "system error class", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 238L, (int) 11, (String) "system error class", KnxDatapointMainType.DPT_1_BYTE),
DPT_ErrorClass_HVAC(
- (long) 238L, (int) 12, (String) "HVAC error class", KnxDatapointMainType.DPT_1_BYTE),
- DPT_Time_Delay((long) 239L, (int) 13, (String) "time delay", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 239L, (int) 12, (String) "HVAC error class", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_Time_Delay((long) 240L, (int) 13, (String) "time delay", KnxDatapointMainType.DPT_1_BYTE),
DPT_Beaufort_Wind_Force_Scale(
- (long) 240L, (int) 14, (String) "wind force scale (0..12)", KnxDatapointMainType.DPT_1_BYTE),
- DPT_SensorSelect((long) 241L, (int) 17, (String) "sensor mode", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 241L, (int) 14, (String) "wind force scale (0..12)", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_SensorSelect((long) 242L, (int) 17, (String) "sensor mode", KnxDatapointMainType.DPT_1_BYTE),
DPT_ActuatorConnectType(
- (long) 242L, (int) 20, (String) "actuator connect type", KnxDatapointMainType.DPT_1_BYTE),
- DPT_Cloud_Cover((long) 243L, (int) 21, (String) "cloud cover", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 243L, (int) 20, (String) "actuator connect type", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_Cloud_Cover((long) 244L, (int) 21, (String) "cloud cover", KnxDatapointMainType.DPT_1_BYTE),
DPT_PowerReturnMode(
- (long) 244L, (int) 22, (String) "power return mode", KnxDatapointMainType.DPT_1_BYTE),
- DPT_FuelType((long) 245L, (int) 100, (String) "fuel type", KnxDatapointMainType.DPT_1_BYTE),
- DPT_BurnerType((long) 246L, (int) 101, (String) "burner type", KnxDatapointMainType.DPT_1_BYTE),
- DPT_HVACMode((long) 247L, (int) 102, (String) "HVAC mode", KnxDatapointMainType.DPT_1_BYTE),
- DPT_DHWMode((long) 248L, (int) 103, (String) "DHW mode", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 245L, (int) 22, (String) "power return mode", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_FuelType((long) 246L, (int) 100, (String) "fuel type", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_BurnerType((long) 247L, (int) 101, (String) "burner type", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_HVACMode((long) 248L, (int) 102, (String) "HVAC mode", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_DHWMode((long) 249L, (int) 103, (String) "DHW mode", KnxDatapointMainType.DPT_1_BYTE),
DPT_LoadPriority(
- (long) 249L, (int) 104, (String) "load priority", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 250L, (int) 104, (String) "load priority", KnxDatapointMainType.DPT_1_BYTE),
DPT_HVACContrMode(
- (long) 250L, (int) 105, (String) "HVAC control mode", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 251L, (int) 105, (String) "HVAC control mode", KnxDatapointMainType.DPT_1_BYTE),
DPT_HVACEmergMode(
- (long) 251L, (int) 106, (String) "HVAC emergency mode", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 252L, (int) 106, (String) "HVAC emergency mode", KnxDatapointMainType.DPT_1_BYTE),
DPT_ChangeoverMode(
- (long) 252L, (int) 107, (String) "changeover mode", KnxDatapointMainType.DPT_1_BYTE),
- DPT_ValveMode((long) 253L, (int) 108, (String) "valve mode", KnxDatapointMainType.DPT_1_BYTE),
- DPT_DamperMode((long) 254L, (int) 109, (String) "damper mode", KnxDatapointMainType.DPT_1_BYTE),
- DPT_HeaterMode((long) 255L, (int) 110, (String) "heater mode", KnxDatapointMainType.DPT_1_BYTE),
- DPT_FanMode((long) 256L, (int) 111, (String) "fan mode", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 253L, (int) 107, (String) "changeover mode", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_ValveMode((long) 254L, (int) 108, (String) "valve mode", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_DamperMode((long) 255L, (int) 109, (String) "damper mode", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_HeaterMode((long) 256L, (int) 110, (String) "heater mode", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_FanMode((long) 257L, (int) 111, (String) "fan mode", KnxDatapointMainType.DPT_1_BYTE),
DPT_MasterSlaveMode(
- (long) 257L, (int) 112, (String) "master/slave mode", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 258L, (int) 112, (String) "master/slave mode", KnxDatapointMainType.DPT_1_BYTE),
DPT_StatusRoomSetp(
- (long) 258L, (int) 113, (String) "status room setpoint", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 259L, (int) 113, (String) "status room setpoint", KnxDatapointMainType.DPT_1_BYTE),
DPT_Metering_DeviceType(
- (long) 259L, (int) 114, (String) "metering device type", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 260L, (int) 114, (String) "metering device type", KnxDatapointMainType.DPT_1_BYTE),
DPT_HumDehumMode(
- (long) 260L, (int) 115, (String) "hum dehum mode", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 261L, (int) 115, (String) "hum dehum mode", KnxDatapointMainType.DPT_1_BYTE),
DPT_EnableHCStage(
- (long) 261L, (int) 116, (String) "enable H/C stage", KnxDatapointMainType.DPT_1_BYTE),
- DPT_ADAType((long) 262L, (int) 120, (String) "ADA type", KnxDatapointMainType.DPT_1_BYTE),
- DPT_BackupMode((long) 263L, (int) 121, (String) "backup mode", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 262L, (int) 116, (String) "enable H/C stage", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_ADAType((long) 263L, (int) 120, (String) "ADA type", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_BackupMode((long) 264L, (int) 121, (String) "backup mode", KnxDatapointMainType.DPT_1_BYTE),
DPT_StartSynchronization(
- (long) 264L,
+ (long) 265L,
(int) 122,
(String) "start syncronization type",
KnxDatapointMainType.DPT_1_BYTE),
DPT_Behaviour_Lock_Unlock(
- (long) 265L, (int) 600, (String) "behavior lock/unlock", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 266L, (int) 600, (String) "behavior lock/unlock", KnxDatapointMainType.DPT_1_BYTE),
DPT_Behaviour_Bus_Power_Up_Down(
- (long) 266L,
+ (long) 267L,
(int) 601,
(String) "behavior bus power up/down",
KnxDatapointMainType.DPT_1_BYTE),
DPT_DALI_Fade_Time(
- (long) 267L, (int) 602, (String) "dali fade time", KnxDatapointMainType.DPT_1_BYTE),
- DPT_BlinkingMode((long) 268L, (int) 603, (String) "blink mode", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 268L, (int) 602, (String) "dali fade time", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_BlinkingMode((long) 269L, (int) 603, (String) "blink mode", KnxDatapointMainType.DPT_1_BYTE),
DPT_LightControlMode(
- (long) 269L, (int) 604, (String) "light control mode", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 270L, (int) 604, (String) "light control mode", KnxDatapointMainType.DPT_1_BYTE),
DPT_SwitchPBModel(
- (long) 270L, (int) 605, (String) "PB switch mode", KnxDatapointMainType.DPT_1_BYTE),
- DPT_PBAction((long) 271L, (int) 606, (String) "PB action mode", KnxDatapointMainType.DPT_1_BYTE),
- DPT_DimmPBModel((long) 272L, (int) 607, (String) "PB dimm mode", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 271L, (int) 605, (String) "PB switch mode", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_PBAction((long) 272L, (int) 606, (String) "PB action mode", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_DimmPBModel((long) 273L, (int) 607, (String) "PB dimm mode", KnxDatapointMainType.DPT_1_BYTE),
DPT_SwitchOnMode(
- (long) 273L, (int) 608, (String) "switch on mode", KnxDatapointMainType.DPT_1_BYTE),
- DPT_LoadTypeSet((long) 274L, (int) 609, (String) "load type", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 274L, (int) 608, (String) "switch on mode", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_LoadTypeSet((long) 275L, (int) 609, (String) "load type", KnxDatapointMainType.DPT_1_BYTE),
DPT_LoadTypeDetected(
- (long) 275L, (int) 610, (String) "load type detection", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 276L, (int) 610, (String) "load type detection", KnxDatapointMainType.DPT_1_BYTE),
DPT_Converter_Test_Control(
- (long) 276L, (int) 611, (String) "converter test control", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 277L, (int) 611, (String) "converter test control", KnxDatapointMainType.DPT_1_BYTE),
DPT_SABExcept_Behaviour(
- (long) 277L, (int) 801, (String) "SAB except behavior", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 278L, (int) 801, (String) "SAB except behavior", KnxDatapointMainType.DPT_1_BYTE),
DPT_SABBehaviour_Lock_Unlock(
- (long) 278L,
+ (long) 279L,
(int) 802,
(String) "SAB behavior on lock/unlock",
KnxDatapointMainType.DPT_1_BYTE),
- DPT_SSSBMode((long) 279L, (int) 803, (String) "SSSB mode", KnxDatapointMainType.DPT_1_BYTE),
+ DPT_SSSBMode((long) 280L, (int) 803, (String) "SSSB mode", KnxDatapointMainType.DPT_1_BYTE),
DPT_BlindsControlMode(
- (long) 280L, (int) 804, (String) "blinds control mode", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 281L, (int) 804, (String) "blinds control mode", KnxDatapointMainType.DPT_1_BYTE),
DPT_CommMode(
- (long) 281L, (int) 1000, (String) "communication mode", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 282L, (int) 1000, (String) "communication mode", KnxDatapointMainType.DPT_1_BYTE),
DPT_AddInfoTypes(
- (long) 282L,
+ (long) 283L,
(int) 1001,
(String) "additional information type",
KnxDatapointMainType.DPT_1_BYTE),
DPT_RF_ModeSelect(
- (long) 283L, (int) 1002, (String) "RF mode selection", KnxDatapointMainType.DPT_1_BYTE),
+ (long) 284L, (int) 1002, (String) "RF mode selection", KnxDatapointMainType.DPT_1_BYTE),
DPT_RF_FilterSelect(
- (long) 284L,
+ (long) 285L,
(int) 1003,
(String) "RF filter mode selection",
KnxDatapointMainType.DPT_1_BYTE),
DPT_StatusGen(
- (long) 285L, (int) 1, (String) "general status", KnxDatapointMainType.DPT_8_BIT_SET),
+ (long) 286L, (int) 1, (String) "general status", KnxDatapointMainType.DPT_8_BIT_SET),
DPT_Device_Control(
- (long) 286L, (int) 2, (String) "device control", KnxDatapointMainType.DPT_8_BIT_SET),
+ (long) 287L, (int) 2, (String) "device control", KnxDatapointMainType.DPT_8_BIT_SET),
DPT_ForceSign(
- (long) 287L, (int) 100, (String) "forcing signal", KnxDatapointMainType.DPT_8_BIT_SET),
+ (long) 288L, (int) 100, (String) "forcing signal", KnxDatapointMainType.DPT_8_BIT_SET),
DPT_ForceSignCool(
- (long) 288L, (int) 101, (String) "forcing signal cool", KnxDatapointMainType.DPT_8_BIT_SET),
+ (long) 289L, (int) 101, (String) "forcing signal cool", KnxDatapointMainType.DPT_8_BIT_SET),
DPT_StatusRHC(
- (long) 289L,
+ (long) 290L,
(int) 102,
(String) "room heating controller status",
KnxDatapointMainType.DPT_8_BIT_SET),
DPT_StatusSDHWC(
- (long) 290L,
+ (long) 291L,
(int) 103,
(String) "solar DHW controller status",
KnxDatapointMainType.DPT_8_BIT_SET),
DPT_FuelTypeSet(
- (long) 291L, (int) 104, (String) "fuel type set", KnxDatapointMainType.DPT_8_BIT_SET),
+ (long) 292L, (int) 104, (String) "fuel type set", KnxDatapointMainType.DPT_8_BIT_SET),
DPT_StatusRCC(
- (long) 292L,
+ (long) 293L,
(int) 105,
(String) "room cooling controller status",
KnxDatapointMainType.DPT_8_BIT_SET),
DPT_StatusAHU(
- (long) 293L,
+ (long) 294L,
(int) 106,
(String) "ventilation controller status",
KnxDatapointMainType.DPT_8_BIT_SET),
DPT_CombinedStatus_RTSM(
- (long) 294L, (int) 107, (String) "combined status RTSM", KnxDatapointMainType.DPT_8_BIT_SET),
+ (long) 295L, (int) 107, (String) "combined status RTSM", KnxDatapointMainType.DPT_8_BIT_SET),
DPT_LightActuatorErrorInfo(
- (long) 295L,
+ (long) 296L,
(int) 601,
(String) "lighting actuator error information",
KnxDatapointMainType.DPT_8_BIT_SET),
DPT_RF_ModeInfo(
- (long) 296L,
+ (long) 297L,
(int) 1000,
(String) "RF communication mode info",
KnxDatapointMainType.DPT_8_BIT_SET),
DPT_RF_FilterInfo(
- (long) 297L,
+ (long) 298L,
(int) 1001,
(String) "cEMI server supported RF filtering modes",
KnxDatapointMainType.DPT_8_BIT_SET),
DPT_Channel_Activation_8(
- (long) 298L,
+ (long) 299L,
(int) 1010,
(String) "channel activation for 8 channels",
KnxDatapointMainType.DPT_8_BIT_SET),
DPT_StatusDHWC(
- (long) 299L,
+ (long) 300L,
(int) 100,
(String) "DHW controller status",
KnxDatapointMainType.DPT_16_BIT_SET),
DPT_StatusRHCC(
- (long) 300L, (int) 101, (String) "RHCC status", KnxDatapointMainType.DPT_16_BIT_SET),
+ (long) 301L, (int) 101, (String) "RHCC status", KnxDatapointMainType.DPT_16_BIT_SET),
DPT_CombinedStatus_HVA(
- (long) 301L, (int) 102, (String) "combined status HVA", KnxDatapointMainType.DPT_16_BIT_SET),
+ (long) 302L, (int) 102, (String) "combined status HVA", KnxDatapointMainType.DPT_16_BIT_SET),
DPT_CombinedStatus_RTC(
- (long) 302L, (int) 103, (String) "combined status RTC", KnxDatapointMainType.DPT_16_BIT_SET),
- DPT_Media((long) 303L, (int) 1000, (String) "media", KnxDatapointMainType.DPT_16_BIT_SET),
+ (long) 303L, (int) 103, (String) "combined status RTC", KnxDatapointMainType.DPT_16_BIT_SET),
+ DPT_Media((long) 304L, (int) 1000, (String) "media", KnxDatapointMainType.DPT_16_BIT_SET),
DPT_Channel_Activation_16(
- (long) 304L,
+ (long) 305L,
(int) 1010,
(String) "channel activation for 16 channels",
KnxDatapointMainType.DPT_16_BIT_SET),
DPT_OnOffAction(
- (long) 305L, (int) 1, (String) "on/off action", KnxDatapointMainType.DPT_2_BIT_SET),
+ (long) 306L, (int) 1, (String) "on/off action", KnxDatapointMainType.DPT_2_BIT_SET),
DPT_Alarm_Reaction(
- (long) 306L, (int) 2, (String) "alarm reaction", KnxDatapointMainType.DPT_2_BIT_SET),
+ (long) 307L, (int) 2, (String) "alarm reaction", KnxDatapointMainType.DPT_2_BIT_SET),
DPT_UpDown_Action(
- (long) 307L, (int) 3, (String) "up/down action", KnxDatapointMainType.DPT_2_BIT_SET),
+ (long) 308L, (int) 3, (String) "up/down action", KnxDatapointMainType.DPT_2_BIT_SET),
DPT_HVAC_PB_Action(
- (long) 308L,
+ (long) 309L,
(int) 102,
(String) "HVAC push button action",
KnxDatapointMainType.DPT_2_BIT_SET),
DPT_DoubleNibble(
- (long) 309L,
+ (long) 310L,
(int) 1000,
(String) "busy/nak repetitions",
KnxDatapointMainType.DPT_2_NIBBLE_SET),
DPT_SceneInfo(
- (long) 310L, (int) 1, (String) "scene information", KnxDatapointMainType.DPT_8_BIT_SET_2),
+ (long) 311L, (int) 1, (String) "scene information", KnxDatapointMainType.DPT_8_BIT_SET_2),
DPT_CombinedInfoOnOff(
- (long) 311L,
+ (long) 312L,
(int) 1,
(String) "bit-combined info on/off",
KnxDatapointMainType.DPT_32_BIT_SET),
DPT_ActiveEnergy_V64(
- (long) 312L,
+ (long) 313L,
(int) 10,
(String) "active energy (Wh)",
KnxDatapointMainType.DPT_ELECTRICAL_ENERGY),
DPT_ApparantEnergy_V64(
- (long) 313L,
+ (long) 314L,
(int) 11,
(String) "apparant energy (VAh)",
KnxDatapointMainType.DPT_ELECTRICAL_ENERGY),
DPT_ReactiveEnergy_V64(
- (long) 314L,
+ (long) 315L,
(int) 12,
(String) "reactive energy (VARh)",
KnxDatapointMainType.DPT_ELECTRICAL_ENERGY),
DPT_Channel_Activation_24(
- (long) 315L,
+ (long) 316L,
(int) 1010,
(String) "activation state 0..23",
KnxDatapointMainType.DPT_24_TIMES_CHANNEL_ACTIVATION),
DPT_HVACModeNext(
- (long) 316L,
+ (long) 317L,
(int) 100,
(String) "time delay & HVAC mode",
KnxDatapointMainType.DPT_16_BIT_UNSIGNED_VALUE_AND_8_BIT_ENUM),
DPT_DHWModeNext(
- (long) 317L,
+ (long) 318L,
(int) 102,
(String) "time delay & DHW mode",
KnxDatapointMainType.DPT_16_BIT_UNSIGNED_VALUE_AND_8_BIT_ENUM),
DPT_OccModeNext(
- (long) 318L,
+ (long) 319L,
(int) 104,
(String) "time delay & occupancy mode",
KnxDatapointMainType.DPT_16_BIT_UNSIGNED_VALUE_AND_8_BIT_ENUM),
DPT_BuildingModeNext(
- (long) 319L,
+ (long) 320L,
(int) 105,
(String) "time delay & building mode",
KnxDatapointMainType.DPT_16_BIT_UNSIGNED_VALUE_AND_8_BIT_ENUM),
DPT_StatusLightingActuator(
- (long) 320L,
+ (long) 321L,
(int) 600,
(String) "Status Lighting Actuator",
KnxDatapointMainType.DPT_8_BIT_UNSIGNED_VALUE_AND_8_BIT_ENUM),
DPT_Version(
- (long) 321L,
+ (long) 322L,
(int) 1,
(String) "DPT version",
KnxDatapointMainType.DPT_DATAPOINT_TYPE_VERSION),
- DPT_AlarmInfo((long) 322L, (int) 1, (String) "alarm info", KnxDatapointMainType.DPT_ALARM_INFO),
+ DPT_AlarmInfo((long) 323L, (int) 1, (String) "alarm info", KnxDatapointMainType.DPT_ALARM_INFO),
DPT_TempRoomSetpSetF16_3(
- (long) 323L,
+ (long) 324L,
(int) 100,
(String) "room temperature setpoint",
KnxDatapointMainType.DPT_3X_2_BYTE_FLOAT_VALUE),
DPT_TempRoomSetpSetShiftF16_3(
- (long) 324L,
+ (long) 325L,
(int) 101,
(String) "room temperature setpoint shift",
KnxDatapointMainType.DPT_3X_2_BYTE_FLOAT_VALUE),
DPT_Scaling_Speed(
- (long) 325L, (int) 1, (String) "scaling speed", KnxDatapointMainType.DPT_SCALING_SPEED),
+ (long) 326L, (int) 1, (String) "scaling speed", KnxDatapointMainType.DPT_SCALING_SPEED),
DPT_Scaling_Step_Time(
- (long) 326L, (int) 2, (String) "scaling step time", KnxDatapointMainType.DPT_SCALING_SPEED),
+ (long) 327L, (int) 2, (String) "scaling step time", KnxDatapointMainType.DPT_SCALING_SPEED),
DPT_MeteringValue(
- (long) 327L,
+ (long) 328L,
(int) 1,
(String) "metering value (value,encoding,cmd)",
KnxDatapointMainType.DPT_4_1_1_BYTE_COMBINED_INFORMATION),
DPT_MBus_Address(
- (long) 328L, (int) 1000, (String) "MBus address", KnxDatapointMainType.DPT_MBUS_ADDRESS),
+ (long) 329L, (int) 1000, (String) "MBus address", KnxDatapointMainType.DPT_MBUS_ADDRESS),
DPT_Colour_RGB(
- (long) 329L,
+ (long) 330L,
(int) 600,
(String) "RGB value 3x(0..255)",
KnxDatapointMainType.DPT_3_BYTE_COLOUR_RGB),
DPT_LanguageCodeAlpha2_ASCII(
- (long) 330L,
+ (long) 331L,
(int) 1,
(String) "language code (ASCII)",
KnxDatapointMainType.DPT_LANGUAGE_CODE_ISO_639_1),
DPT_Tariff_ActiveEnergy(
- (long) 331L,
+ (long) 332L,
(int) 1,
(String) "electrical energy with tariff",
KnxDatapointMainType.DPT_SIGNED_VALUE_WITH_CLASSIFICATION_AND_VALIDITY),
DPT_Prioritised_Mode_Control(
- (long) 332L,
+ (long) 333L,
(int) 1,
(String) "priority control",
KnxDatapointMainType.DPT_PRIORITISED_MODE_CONTROL),
DPT_DALI_Control_Gear_Diagnostic(
- (long) 333L,
+ (long) 334L,
(int) 600,
(String) "diagnostic value",
KnxDatapointMainType.DPT_CONFIGURATION_DIAGNOSTICS_16_BIT),
DPT_DALI_Diagnostics(
- (long) 334L,
+ (long) 335L,
(int) 600,
(String) "diagnostic value",
KnxDatapointMainType.DPT_CONFIGURATION_DIAGNOSTICS_8_BIT),
DPT_CombinedPosition(
- (long) 335L, (int) 800, (String) "combined position", KnxDatapointMainType.DPT_POSITIONS),
+ (long) 336L, (int) 800, (String) "combined position", KnxDatapointMainType.DPT_POSITIONS),
DPT_StatusSAB(
- (long) 336L,
+ (long) 337L,
(int) 800,
(String) "status sunblind & shutter actuator",
KnxDatapointMainType.DPT_STATUS_32_BIT),
DPT_Colour_xyY(
- (long) 337L, (int) 600, (String) "colour xyY", KnxDatapointMainType.DPT_STATUS_48_BIT),
+ (long) 338L, (int) 600, (String) "colour xyY", KnxDatapointMainType.DPT_STATUS_48_BIT),
DPT_Converter_Status(
- (long) 338L,
+ (long) 339L,
(int) 600,
(String) "DALI converter status",
KnxDatapointMainType.DPT_CONVERTER_STATUS),
DPT_Converter_Test_Result(
- (long) 339L,
+ (long) 340L,
(int) 600,
(String) "DALI converter test result",
KnxDatapointMainType.DPT_CONVERTER_TEST_RESULT),
DPT_Battery_Info(
- (long) 340L,
+ (long) 341L,
(int) 600,
(String) "Battery Information",
KnxDatapointMainType.DPT_BATTERY_INFORMATION),
DPT_Brightness_Colour_Temperature_Transition(
- (long) 341L,
+ (long) 342L,
(int) 600,
(String) "brightness colour temperature transition",
KnxDatapointMainType.DPT_BRIGHTNESS_COLOUR_TEMPERATURE_TRANSITION),
DPT_Brightness_Colour_Temperature_Control(
- (long) 342L,
+ (long) 343L,
(int) 600,
(String) "brightness colour temperature control",
KnxDatapointMainType.DPT_STATUS_24_BIT),
DPT_Colour_RGBW(
- (long) 343L,
+ (long) 344L,
(int) 600,
(String) "RGBW value 4x(0..100%)",
KnxDatapointMainType.DPT_COLOUR_RGBW),
DPT_Relative_Control_RGBW(
- (long) 344L,
+ (long) 345L,
(int) 600,
(String) "RGBW relative control",
KnxDatapointMainType.DPT_RELATIVE_CONTROL_RGBW),
DPT_Relative_Control_RGB(
- (long) 345L,
+ (long) 346L,
(int) 600,
(String) "RGB relative control",
KnxDatapointMainType.DPT_RELATIVE_CONTROL_RGB),
DPT_GeographicalLocation(
- (long) 346L,
+ (long) 347L,
(int) 1,
(String) "geographical location (longitude and latitude) expressed in degrees",
KnxDatapointMainType.DPT_F32F32),
DPT_TempRoomSetpSetF16_4(
- (long) 347L,
+ (long) 348L,
(int) 100,
(String) "Temperature setpoint setting for 4 HVAC Modes",
KnxDatapointMainType.DPT_F16F16F16F16),
DPT_TempRoomSetpSetShiftF16_4(
- (long) 348L,
+ (long) 349L,
(int) 101,
(String) "Temperature setpoint shift setting for 4 HVAC Modes",
KnxDatapointMainType.DPT_F16F16F16F16);
diff --git a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
index 161490ecc3..ac17dcceb8 100644
--- a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
+++ b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
@@ -321,7 +321,7 @@ public enum KnxManufacturer {
M_GUANGZHOU_SEAWIN_ELECTRICAL_TECHNOLOGIES_CO___LTD_(
(int) 278, (int) 331, (String) "Guangzhou SeaWin Electrical Technologies Co., Ltd."),
M_ACREL((int) 279, (int) 332, (String) "Acrel"),
- M_FRANKE_AQUAROTTER_GMBH((int) 280, (int) 333, (String) "Franke Aquarotter GmbH"),
+ M_KWC_AQUAROTTER_GMBH((int) 280, (int) 333, (String) "KWC Aquarotter GmbH"),
M_ORION_SYSTEMS((int) 281, (int) 334, (String) "Orion Systems"),
M_SCHRACK_TECHNIK_GMBH((int) 282, (int) 335, (String) "Schrack Technik GmbH"),
M_INSPRID((int) 283, (int) 336, (String) "INSPRID"),
@@ -439,7 +439,7 @@ public enum KnxManufacturer {
M_CODESYS_GMBH((int) 387, (int) 440, (String) "CODESYS GmbH"),
M_MOORGEN_DEUTSCHLAND_GMBH((int) 388, (int) 441, (String) "Moorgen Deutschland GmbH"),
M_CULLMANN_TECH((int) 389, (int) 442, (String) "CULLMANN TECH"),
- M_MERCK_WINDOW_TECHNOLOGIES_B_V_((int) 390, (int) 443, (String) "Merck Window Technologies B.V."),
+ M_EYRISE_B_V((int) 390, (int) 443, (String) "eyrise B.V"),
M_ABEGO((int) 391, (int) 444, (String) "ABEGO"),
M_MYGEKKO((int) 392, (int) 445, (String) "myGEKKO"),
M_ERGO3_SARL((int) 393, (int) 446, (String) "Ergo3 Sarl"),
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java
index e3f1c6d375..9f2c4ceb1b 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java
@@ -58,11 +58,15 @@ import java.util.*;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.stream.IntStream;
+import org.apache.commons.lang3.concurrent.BasicThreadFactory;
+import org.apache.commons.lang3.tuple.MutablePair;
import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
@@ -85,7 +89,16 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
private final Logger logger = LoggerFactory.getLogger(S7ProtocolLogic.class);
private final AtomicInteger tpduGenerator = new AtomicInteger(10);
-
+
+ /*
+ * Task group for managing connection redundancy.
+ */
+ private ExecutorService clientExecutorService = Executors.newFixedThreadPool(4, new BasicThreadFactory.Builder()
+ .namingPattern("plc4x-app-thread-%d")
+ .daemon(true)
+ .priority(Thread.MAX_PRIORITY)
+ .build());
+
/*
* Take into account that the size of this buffer depends on the final device.
* S7-300 goes from 20 to 300 and for S7-400 it goes from 300 to 10000.
@@ -101,6 +114,17 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
private final S7PlcSubscriptionHandle usrHandle = new S7PlcSubscriptionHandle(EventType.USR, EventLogic);
private final S7PlcSubscriptionHandle almHandle = new S7PlcSubscriptionHandle(EventType.ALM, EventLogic);
+ /*
+ * For the reconnection functionality by a "TimeOut" of the connection,
+ * you must keep track of open transactions. In general, an S7 device
+ * supports a couple of simultaneous requests.
+ * The rhythm of execution must be determined by the TransactionManager.
+ * So far it is the way to indicate to the user that he must redo
+ * his request.
+ */
+ private HashMap<Object,MutablePair<RequestTransactionManager.RequestTransaction, Object>> active_requests = new HashMap<>();
+
+
private S7DriverContext s7DriverContext;
private RequestTransactionManager tm;
@@ -203,6 +227,27 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
});
}
+
+ /*
+ * It performs the sequential and safe shutdown of the driver.
+ * Completion of pending requests, executors and associated tasks.
+ */
+ @Override
+ public void onDisconnect(ConversationContext<TPKTPacket> context) {
+ //1. Clear all pending requests and their associated transaction
+ cleanFutures();
+ //2. Here we shutdown the local task executor.
+ clientExecutorService.shutdown();
+ //3. Performs the shutdown of the transaction executor.
+ tm.shutdown();
+ //4. Finish the execution of the tasks for the handling of Events.
+ EventLogic.stop();
+ //5. Executes the closing of the main channel.
+ context.getChannel().close();
+ //6. Here is the stop of any task or state machine that is added.
+ }
+
+
@Override
public CompletableFuture<PlcReadResponse> read(PlcReadRequest readRequest) {
DefaultPlcReadRequest request = (DefaultPlcReadRequest) readRequest;
@@ -1017,5 +1062,27 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
future.completeExceptionally(e);
}
}
+
+ private void cleanFutures(){
+ //TODO: Debe ser ejecutado si la conexion esta levanta.
+ active_requests.forEach((f,p)->{
+ CompletableFuture<Object> cf = (CompletableFuture<Object>) f;
+ try {
+ if (!cf.isDone()) {
+ logger.info("CF");
+ cf.cancel(true);
+ logger.info("ClientCF");
+ ((CompletableFuture<Object>) p.getRight()).completeExceptionally(new PlcRuntimeException("Disconnected"));
+ logger.info("TM");
+ p.getLeft().endRequest();
+ };
+ } catch (Exception ex){
+ logger.info(ex.toString());
+ }
+ });
+ active_requests.clear();
+
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/transaction/RequestTransactionManager.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/transaction/RequestTransactionManager.java
index 4b42caa338..3592ff2e55 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/transaction/RequestTransactionManager.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/transaction/RequestTransactionManager.java
@@ -32,6 +32,7 @@ import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
+import org.apache.commons.lang3.concurrent.BasicThreadFactory;
/**
* This is a limited Queue of Requests, a Protocol can use.
@@ -48,7 +49,14 @@ public class RequestTransactionManager {
private static final Logger logger = LoggerFactory.getLogger(RequestTransactionManager.class);
/** Executor that performs all operations */
- static final ExecutorService executor = Executors.newScheduledThreadPool(4);
+ //static final ExecutorService executor = Executors.newScheduledThreadPool(4);
+
+ final ExecutorService executor = Executors.newFixedThreadPool(4, new BasicThreadFactory.Builder()
+ .namingPattern("plc4x-tm-thread-%d")
+ .daemon(true)
+ .priority(Thread.MAX_PRIORITY)
+ .build());
+
private final Set<RequestTransaction> runningRequests;
/** How many Transactions are allowed to run at the same time? */
private int numberOfConcurrentRequests;
@@ -83,6 +91,13 @@ public class RequestTransactionManager {
// As we might have increased the number, try to send some more requests.
processWorklog();
}
+
+ /*
+ * It allows the sequential shutdown of the associated driver.
+ */
+ public void shutdown(){
+ executor.shutdown();
+ }
public void submit(Consumer<RequestTransaction> context) {
RequestTransaction transaction = startRequest();
@@ -204,12 +219,16 @@ public class RequestTransactionManager {
this.delegate = delegate;
}
+ //TODO: Check MDC used. Created exception in Hop application
@Override
public void run() {
- try (final MDC.MDCCloseable closeable = MDC.putCloseable("plc4x.transactionId", Integer.toString(transactionId))) {
+ //try (final MDC.MDCCloseable closeable = MDC.putCloseable("plc4x.transactionId", Integer.toString(transactionId))) {
+ try{
logger.trace("Start execution of transaction {}", transactionId);
delegate.run();
logger.trace("Completed execution of transaction {}", transactionId);
+ } catch (Exception ex) {
+ logger.info(ex.getMessage());
}
}
}