- fixed examples: all timestamp updates prior to corresponding value updates
This commit is contained in:
parent
38711a8843
commit
db6cf1ec28
11 changed files with 71 additions and 49 deletions
|
@ -17,7 +17,7 @@
|
|||
#define DEBUG_COTP 0
|
||||
#define DEBUG_ISO_SERVER 0
|
||||
#define DEBUG_ISO_CLIENT 0
|
||||
#define DEBUG_IED_SERVER 0
|
||||
#define DEBUG_IED_SERVER 1
|
||||
#define DEBUG_IED_CLIENT 0
|
||||
#define DEBUG_MMS_CLIENT 0
|
||||
#define DEBUG_MMS_SERVER 0
|
||||
|
@ -41,7 +41,7 @@
|
|||
*
|
||||
* WARNING: If set to 1 normal single- and multi-threaded server are no longer working!
|
||||
*/
|
||||
#define CONFIG_MMS_THREADLESS_STACK 1
|
||||
#define CONFIG_MMS_THREADLESS_STACK 0
|
||||
|
||||
/* number of concurrent MMS client connections the server accepts, -1 for no limit */
|
||||
#define CONFIG_MAXIMUM_TCP_CLIENT_CONNECTIONS 5
|
||||
|
|
|
@ -71,8 +71,8 @@ main(int argc, char** argv)
|
|||
|
||||
IedServer_lockDataModel(iedServer);
|
||||
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_Inverter_MMXU1_TotW_mag_f, power);
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_Inverter_MMXU1_TotW_t, timeval);
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_Inverter_MMXU1_TotW_mag_f, power);
|
||||
|
||||
IedServer_unlockDataModel(iedServer);
|
||||
|
||||
|
|
|
@ -44,23 +44,23 @@ controlHandlerForBinaryOutput(void* parameter, MmsValue* value, bool test)
|
|||
uint64_t timeStamp = Hal_getTimeInMs();
|
||||
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO1) {
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1_stVal, value);
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1_t, timeStamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1_stVal, value);
|
||||
}
|
||||
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO2) {
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2_stVal, value);
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2_t, timeStamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2_stVal, value);
|
||||
}
|
||||
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO3) {
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3_stVal, value);
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3_t, timeStamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3_stVal, value);
|
||||
}
|
||||
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO4) {
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4_stVal, value);
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4_t, timeStamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4_stVal, value);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -138,17 +138,17 @@ main(int argc, char** argv)
|
|||
if (((int) t % 2) == 0)
|
||||
Timestamp_setClockNotSynchronized(&iecTimestamp, true);
|
||||
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn1_mag_f, an1);
|
||||
IedServer_updateTimestampAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn1_t, &iecTimestamp);
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn1_mag_f, an1);
|
||||
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn2_mag_f, an2);
|
||||
IedServer_updateTimestampAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn2_t, &iecTimestamp);
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn2_mag_f, an2);
|
||||
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn3_mag_f, an3);
|
||||
IedServer_updateTimestampAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn3_t, &iecTimestamp);
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn3_mag_f, an3);
|
||||
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn4_mag_f, an4);
|
||||
IedServer_updateTimestampAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn4_t, &iecTimestamp);
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn4_mag_f, an4);
|
||||
|
||||
IedServer_unlockDataModel(iedServer);
|
||||
|
||||
|
|
|
@ -84,23 +84,23 @@ controlHandlerForBinaryOutput(void* parameter, MmsValue* value, bool test)
|
|||
MmsValue* timeStamp = MmsValue_newUtcTimeByMsTime(Hal_getTimeInMs());
|
||||
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO1) {
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1_stVal, value);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1_t, timeStamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1_stVal, value);
|
||||
}
|
||||
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO2) {
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2_stVal, value);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2_t, timeStamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2_stVal, value);
|
||||
}
|
||||
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO3) {
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3_stVal, value);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3_t, timeStamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3_stVal, value);
|
||||
}
|
||||
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO4) {
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4_stVal, value);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4_t, timeStamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4_stVal, value);
|
||||
}
|
||||
|
||||
MmsValue_delete(timeStamp);
|
||||
|
|
|
@ -53,8 +53,8 @@ controlHandlerForIntegerOutput(void* parameter, MmsValue* value, bool test)
|
|||
uint64_t timeStamp = Hal_getTimeInMs();
|
||||
|
||||
if (parameter == IEDMODEL_WTG_WTUR1_SetTurOp_actSt) {
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_WTG_WTUR1_SetTurOp_actSt_stVal, value);
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_WTG_WTUR1_SetTurOp_actSt_t, timeStamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_WTG_WTUR1_SetTurOp_actSt_stVal, value);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -53,18 +53,27 @@ checkHandler(void* parameter, MmsValue* ctlVal, bool test, bool interlockCheck,
|
|||
static ControlHandlerResult
|
||||
controlHandlerForBinaryOutput(void* parameter, MmsValue* value, bool test)
|
||||
{
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO1)
|
||||
uint64_t timestamp = Hal_getTimeInMs();
|
||||
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO1) {
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1_t, timestamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1_stVal, value);
|
||||
}
|
||||
|
||||
else if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO2)
|
||||
else if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO2) {
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2_t, timestamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2_stVal, value);
|
||||
}
|
||||
|
||||
else if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO3)
|
||||
else if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO3) {
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3_t, timestamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3_stVal, value);
|
||||
}
|
||||
|
||||
else if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO4)
|
||||
else if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO4) {
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4_t, timestamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4_stVal, value);
|
||||
|
||||
}
|
||||
else
|
||||
return CONTROL_RESULT_FAILED;
|
||||
|
||||
|
|
|
@ -28,17 +28,27 @@ void sigint_handler(int signalId)
|
|||
void
|
||||
controlHandlerForBinaryOutput(void* parameter, MmsValue* value)
|
||||
{
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO1)
|
||||
uint64_t timestamp = Hal_getTimeInMs();
|
||||
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO1) {
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1_t, timestamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1_stVal, value);
|
||||
}
|
||||
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO2)
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO2) {
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2_t, timestamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2_stVal, value);
|
||||
}
|
||||
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO3)
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO3) {
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3_t, timestamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3_stVal, value);
|
||||
}
|
||||
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO4)
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO4) {
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4_t, timestamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4_stVal, value);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
|
@ -78,8 +88,10 @@ int main(int argc, char** argv) {
|
|||
while (running) {
|
||||
|
||||
IedServer_lockDataModel(iedServer);
|
||||
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn1_t, Hal_getTimeInMs());
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn1_mag_f, anIn1);
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn1_t, Hal_getTimeInMs());
|
||||
|
||||
IedServer_unlockDataModel(iedServer);
|
||||
|
||||
anIn1 += 0.1;
|
||||
|
|
|
@ -132,7 +132,6 @@ main(int argc, char** argv)
|
|||
|
||||
IedServer_lockDataModel(iedServer);
|
||||
|
||||
|
||||
IedServer_unlockDataModel(iedServer);
|
||||
|
||||
power += 0.1f;
|
||||
|
|
|
@ -43,23 +43,23 @@ controlHandlerForBinaryOutput(void* parameter, MmsValue* value, bool test)
|
|||
uint64_t timeStamp = Hal_getTimeInMs();
|
||||
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO1) {
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1_stVal, value);
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1_t, timeStamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1_stVal, value);
|
||||
}
|
||||
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO2) {
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2_stVal, value);
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2_t, timeStamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2_stVal, value);
|
||||
}
|
||||
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO3) {
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3_stVal, value);
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3_t, timeStamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3_stVal, value);
|
||||
}
|
||||
|
||||
if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO4) {
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4_stVal, value);
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4_t, timeStamp);
|
||||
IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4_stVal, value);
|
||||
}
|
||||
|
||||
return CONTROL_RESULT_OK;
|
||||
|
@ -119,14 +119,17 @@ main(int argc, char** argv)
|
|||
|
||||
IedServer_lockDataModel(iedServer);
|
||||
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn1_mag_f, an1);
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn1_t, timestamp);
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn2_mag_f, an2);
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn1_mag_f, an1);
|
||||
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn2_t, timestamp);
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn3_mag_f, an3);
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn2_mag_f, an2);
|
||||
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn3_t, timestamp);
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn4_mag_f, an4);
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn3_mag_f, an3);
|
||||
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn4_t, timestamp);
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn4_mag_f, an4);
|
||||
|
||||
IedServer_unlockDataModel(iedServer);
|
||||
|
||||
|
|
|
@ -2315,8 +2315,7 @@ ReportControl_valueUpdated(ReportControl* self, int dataSetEntryIndex, ReportInc
|
|||
if (self->triggered == false) {
|
||||
uint64_t currentTime = Hal_getTimeInMs();
|
||||
|
||||
MmsValue* timeOfEntry = self->timeOfEntry;
|
||||
MmsValue_setBinaryTime(timeOfEntry, currentTime);
|
||||
MmsValue_setBinaryTime(self->timeOfEntry, currentTime);
|
||||
|
||||
self->reportTime = currentTime + self->bufTm;
|
||||
}
|
||||
|
|
|
@ -1607,11 +1607,11 @@ MmsValue_setBinaryTime(MmsValue* self, uint64_t timestamp)
|
|||
uint8_t* daysDiffBuf = (uint8_t*) &daysDiff;
|
||||
|
||||
#if (ORDER_LITTLE_ENDIAN == 1)
|
||||
binaryTimeBuf[4] = daysDiffBuf[1];
|
||||
binaryTimeBuf[5] = daysDiffBuf[0];
|
||||
binaryTimeBuf[4] = daysDiffBuf[1];
|
||||
binaryTimeBuf[5] = daysDiffBuf[0];
|
||||
#else
|
||||
binaryTimeBuf[4] = daysDiffBuf[0];
|
||||
binaryTimeBuf[5] = daysDiffBuf[1];
|
||||
binaryTimeBuf[4] = daysDiffBuf[0];
|
||||
binaryTimeBuf[5] = daysDiffBuf[1];
|
||||
#endif
|
||||
|
||||
}
|
||||
|
@ -1620,15 +1620,15 @@ MmsValue_setBinaryTime(MmsValue* self, uint64_t timestamp)
|
|||
uint8_t* msSinceMidnightBuf = (uint8_t*) &msSinceMidnight;
|
||||
|
||||
#if (ORDER_LITTLE_ENDIAN == 1)
|
||||
binaryTimeBuf[0] = msSinceMidnightBuf[3];
|
||||
binaryTimeBuf[1] = msSinceMidnightBuf[2];
|
||||
binaryTimeBuf[2] = msSinceMidnightBuf[1];
|
||||
binaryTimeBuf[3] = msSinceMidnightBuf[0];
|
||||
binaryTimeBuf[0] = msSinceMidnightBuf[3];
|
||||
binaryTimeBuf[1] = msSinceMidnightBuf[2];
|
||||
binaryTimeBuf[2] = msSinceMidnightBuf[1];
|
||||
binaryTimeBuf[3] = msSinceMidnightBuf[0];
|
||||
#else
|
||||
binaryTimeBuf[0] = msSinceMidnightBuf[0];
|
||||
binaryTimeBuf[1] = msSinceMidnightBuf[1];
|
||||
binaryTimeBuf[2] = msSinceMidnightBuf[2];
|
||||
binaryTimeBuf[3] = msSinceMidnightBuf[3];
|
||||
binaryTimeBuf[0] = msSinceMidnightBuf[0];
|
||||
binaryTimeBuf[1] = msSinceMidnightBuf[1];
|
||||
binaryTimeBuf[2] = msSinceMidnightBuf[2];
|
||||
binaryTimeBuf[3] = msSinceMidnightBuf[3];
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue