diff --git a/src/pvaClientNTMultiData.cpp b/src/pvaClientNTMultiData.cpp index 7e5de88..e367752 100644 --- a/src/pvaClientNTMultiData.cpp +++ b/src/pvaClientNTMultiData.cpp @@ -148,15 +148,29 @@ void PvaClientNTMultiData::endDeltaTime() unionValue[i]->set(pvst->getSubField("value")); if(gotAlarm) { - severity[i] = pvst->getSubField("alarm.severity")->get(); - status[i] = pvst->getSubField("alarm.status")->get(); - message[i] = pvst->getSubField("alarm.message")->get(); + PVIntPtr pvSeverity = pvst->getSubField("alarm.severity"); + PVIntPtr pvStatus = pvst->getSubField("alarm.status"); + PVStringPtr pvMessage = pvst->getSubField("alarm.message"); + if(pvSeverity&&pvStatus&&pvMessage) { + severity[i] = pvSeverity->get(); + status[i] = pvStatus->get(); + message[i] = pvMessage->get(); + } else { + severity[i] = undefinedAlarm; + status[i] = undefinedStatus; + message[i] = "no alarm field"; + } } if(gotTimeStamp) { - secondsPastEpoch[i] = pvst->getSubField("timeStamp.secondsPastEpoch")->get(); - nanoseconds[i] = pvst->getSubField("timeStamp.nanoseconds")->get(); - userTag[i] = pvst->getSubField("timeStamp.userTag")->get(); + PVLongPtr pvEpoch = pvst->getSubField("timeStamp.secondsPastEpoch"); + PVIntPtr pvNano = pvst->getSubField("timeStamp.nanoseconds"); + PVIntPtr pvTag = pvst->getSubField("timeStamp.userTag"); + if(pvEpoch&&pvNano&&pvTag) { + secondsPastEpoch[i] = pvEpoch->get(); + nanoseconds[i] = pvNano->get(); + userTag[i] = pvTag->get(); + } } } }