- IED server: fixed dupd trigger handling

pull/266/head
Michael Zillgith 5 years ago
parent e4fcb923a0
commit 3f42387ed7

@ -1034,7 +1034,6 @@ checkForUpdateTrigger(IedServer self, DataAttribute* dataAttribute)
LOG_CONTROL_VALUE_UPDATE);
#endif
}
#endif /* ((CONFIG_IEC61850_REPORT_SERVICE == 1) || (CONFIG_IEC61850_LOG_SERVICE == 1)) */
}
@ -1089,9 +1088,7 @@ IedServer_updateAttributeValue(IedServer self, DataAttribute* dataAttribute, Mms
assert(dataAttribute != NULL);
assert(MmsValue_getType(dataAttribute->mmsValue) == MmsValue_getType(value));
if (MmsValue_equals(dataAttribute->mmsValue, value))
checkForUpdateTrigger(self, dataAttribute);
else {
if (MmsValue_equals(dataAttribute->mmsValue, value) == false) {
if (dataAttribute->type == IEC61850_BOOLEAN) {
/* Special treatment because of transient option */
@ -1111,6 +1108,8 @@ IedServer_updateAttributeValue(IedServer self, DataAttribute* dataAttribute, Mms
checkForChangedTriggers(self, dataAttribute);
}
}
checkForUpdateTrigger(self, dataAttribute);
}
void
@ -1122,10 +1121,8 @@ IedServer_updateFloatAttributeValue(IedServer self, DataAttribute* dataAttribute
float currentValue = MmsValue_toFloat(dataAttribute->mmsValue);
if (currentValue == value) {
checkForUpdateTrigger(self, dataAttribute);
}
else {
if (currentValue != value) {
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_wait(self->dataModelLock);
#endif
@ -1135,6 +1132,8 @@ IedServer_updateFloatAttributeValue(IedServer self, DataAttribute* dataAttribute
#endif
checkForChangedTriggers(self, dataAttribute);
}
checkForUpdateTrigger(self, dataAttribute);
}
void
@ -1146,10 +1145,8 @@ IedServer_updateInt32AttributeValue(IedServer self, DataAttribute* dataAttribute
int32_t currentValue = MmsValue_toInt32(dataAttribute->mmsValue);
if (currentValue == value) {
checkForUpdateTrigger(self, dataAttribute);
}
else {
if (currentValue != value) {
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_wait(self->dataModelLock);
#endif
@ -1160,6 +1157,8 @@ IedServer_updateInt32AttributeValue(IedServer self, DataAttribute* dataAttribute
checkForChangedTriggers(self, dataAttribute);
}
checkForUpdateTrigger(self, dataAttribute);
}
void
@ -1167,10 +1166,8 @@ IedServer_updateDbposValue(IedServer self, DataAttribute* dataAttribute, Dbpos v
{
Dbpos currentValue = Dbpos_fromMmsValue(dataAttribute->mmsValue);
if (currentValue == value) {
checkForUpdateTrigger(self, dataAttribute);
}
else {
if (currentValue != value) {
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_wait(self->dataModelLock);
#endif
@ -1181,6 +1178,8 @@ IedServer_updateDbposValue(IedServer self, DataAttribute* dataAttribute, Dbpos v
checkForChangedTriggers(self, dataAttribute);
}
checkForUpdateTrigger(self, dataAttribute);
}
void
@ -1192,10 +1191,8 @@ IedServer_updateInt64AttributeValue(IedServer self, DataAttribute* dataAttribute
int64_t currentValue = MmsValue_toInt64(dataAttribute->mmsValue);
if (currentValue == value) {
checkForUpdateTrigger(self, dataAttribute);
}
else {
if (currentValue != value) {
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_wait(self->dataModelLock);
#endif
@ -1206,6 +1203,8 @@ IedServer_updateInt64AttributeValue(IedServer self, DataAttribute* dataAttribute
checkForChangedTriggers(self, dataAttribute);
}
checkForUpdateTrigger(self, dataAttribute);
}
void
@ -1217,10 +1216,8 @@ IedServer_updateUnsignedAttributeValue(IedServer self, DataAttribute* dataAttrib
uint32_t currentValue = MmsValue_toUint32(dataAttribute->mmsValue);
if (currentValue == value) {
checkForUpdateTrigger(self, dataAttribute);
}
else {
if (currentValue != value) {
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_wait(self->dataModelLock);
#endif
@ -1231,6 +1228,8 @@ IedServer_updateUnsignedAttributeValue(IedServer self, DataAttribute* dataAttrib
checkForChangedTriggers(self, dataAttribute);
}
checkForUpdateTrigger(self, dataAttribute);
}
void
@ -1242,10 +1241,8 @@ IedServer_updateBitStringAttributeValue(IedServer self, DataAttribute* dataAttri
uint32_t currentValue = MmsValue_getBitStringAsInteger(dataAttribute->mmsValue);
if (currentValue == value) {
checkForUpdateTrigger(self, dataAttribute);
}
else {
if (currentValue != value) {
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_wait(self->dataModelLock);
#endif
@ -1256,6 +1253,8 @@ IedServer_updateBitStringAttributeValue(IedServer self, DataAttribute* dataAttri
checkForChangedTriggers(self, dataAttribute);
}
checkForUpdateTrigger(self, dataAttribute);
}
void
@ -1267,11 +1266,7 @@ IedServer_updateBooleanAttributeValue(IedServer self, DataAttribute* dataAttribu
bool currentValue = MmsValue_getBoolean(dataAttribute->mmsValue);
if (currentValue == value) {
checkForUpdateTrigger(self, dataAttribute);
}
else {
if (currentValue != value) {
bool callCheckTriggers = true;
if (dataAttribute->triggerOptions & TRG_OPT_TRANSIENT) {
@ -1290,6 +1285,8 @@ IedServer_updateBooleanAttributeValue(IedServer self, DataAttribute* dataAttribu
if (callCheckTriggers)
checkForChangedTriggers(self, dataAttribute);
}
checkForUpdateTrigger(self, dataAttribute);
}
void
@ -1301,10 +1298,7 @@ IedServer_updateVisibleStringAttributeValue(IedServer self, DataAttribute* dataA
const char* currentValue = MmsValue_toString(dataAttribute->mmsValue);
if (!strcmp(currentValue ,value)) {
checkForUpdateTrigger(self, dataAttribute);
}
else {
if (strcmp(currentValue, value)) {
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_wait(self->dataModelLock);
#endif
@ -1315,6 +1309,8 @@ IedServer_updateVisibleStringAttributeValue(IedServer self, DataAttribute* dataA
checkForChangedTriggers(self, dataAttribute);
}
checkForUpdateTrigger(self, dataAttribute);
}
void
@ -1326,10 +1322,8 @@ IedServer_updateUTCTimeAttributeValue(IedServer self, DataAttribute* dataAttribu
uint64_t currentValue = MmsValue_getUtcTimeInMs(dataAttribute->mmsValue);
if (currentValue == value) {
checkForUpdateTrigger(self, dataAttribute);
}
else {
if (currentValue != value) {
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_wait(self->dataModelLock);
#endif
@ -1340,6 +1334,8 @@ IedServer_updateUTCTimeAttributeValue(IedServer self, DataAttribute* dataAttribu
checkForChangedTriggers(self, dataAttribute);
}
checkForUpdateTrigger(self, dataAttribute);
}
void
@ -1349,10 +1345,8 @@ IedServer_updateTimestampAttributeValue(IedServer self, DataAttribute* dataAttri
assert(dataAttribute != NULL);
assert(self != NULL);
if (memcmp(dataAttribute->mmsValue->value.utcTime, timestamp->val, 8) == 0) {
checkForUpdateTrigger(self, dataAttribute);
}
else {
if (memcmp(dataAttribute->mmsValue->value.utcTime, timestamp->val, 8)) {
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_wait(self->dataModelLock);
#endif
@ -1363,6 +1357,8 @@ IedServer_updateTimestampAttributeValue(IedServer self, DataAttribute* dataAttri
checkForChangedTriggers(self, dataAttribute);
}
checkForUpdateTrigger(self, dataAttribute);
}
void

Loading…
Cancel
Save