예제 #1
0
        private static string SaveAlarmOccurencesToDB(S7AlarmDefinition newAlarm)
        {
            AlarmOccurencesEventSaver saver = new AlarmOccurencesEventSaver(newAlarm, _realmProvider);

            saver.SaveAlarmOccurences();
            return(saver.GetTextOfSavedAlarm());
        }
예제 #2
0
        private List <S7AlarmDefinition> ReadSpecificAlarmsDefinitions(List <int> plcConnectionIDList, List <int> alarmIdentityList)
        {
            _logger.Info($"Procedure of obtaining alarms definitiond from DB started. Amount of definitions to read: {plcConnectionIDList.Count}.");

            if (plcConnectionIDList.Count != alarmIdentityList.Count)
            {
                _logger.Error($"Lists of PLC connection ID and alarm identity has different amount of items!");
                return(new List <S7AlarmDefinition>());
            }
            else
            {
                List <S7AlarmDefinition> outputList = new List <S7AlarmDefinition>();

                for (int i = 0; i < alarmIdentityList.Count; i++)
                {
                    S7AlarmDefinition def = ReadSingleAlarmDefinition(plcConnectionIDList[i], alarmIdentityList[i]);
                    if (def != null)
                    {
                        outputList.Add(def);
                    }
                }

                outputList.OrderBy(x => x.Identity);

                return(outputList);
            }
        }
예제 #3
0
        private bool ModifyAlarmDefinition(S7AlarmDefinition alarmDefinition)
        {
            try
            {
                S7AlarmDefinition def = _realm.All <S7AlarmDefinition>().
                                        Where(x => x.Identity == alarmDefinition.Identity && x.PLCconnectionID == alarmDefinition.PLCconnectionID).ToList().First();

                using (var trans = _realm.BeginWrite())
                {
                    def.AlarmProfileIdentity       = alarmDefinition.AlarmProfileIdentity;
                    def.SMSrecipientsGroupIdentity = alarmDefinition.SMSrecipientsGroupIdentity;
                    def.AlarmActivated             = alarmDefinition.AlarmActivated;
                    def.AlarmTagName       = alarmDefinition.AlarmTagName;
                    def.AlarmTagDBnumber   = alarmDefinition.AlarmTagDBnumber;
                    def.AlarmTagByteNumber = alarmDefinition.AlarmTagByteNumber;
                    def.AlarmTagBitNumber  = alarmDefinition.AlarmTagBitNumber;
                    def.AckTagName         = alarmDefinition.AckTagName;
                    def.AckTagDBnumber     = alarmDefinition.AckTagDBnumber;
                    def.AckTagByteNumber   = alarmDefinition.AckTagByteNumber;
                    def.AckTagBitNumber    = alarmDefinition.AckTagBitNumber;
                    trans.Commit();
                }

                _logger.Info($"Saving updates for alarm definition with Identty = {alarmDefinition.Identity} successfull.");

                return(true);
            }
            catch (Exception ex)
            {
                _logger.Error($"Error while trying to update alarm definition. Error: {ex.Message}.");
                return(false);
            }
        }
예제 #4
0
        private bool DeleteSingleAlarmFromDB(AlarmS7UImodel alarm)
        {
            _logger.Info($"Method for deleting definition of single S7 alarm fired. Alarm identity: {alarm.Identity}.");

            try
            {
                S7AlarmDefinition definition = _realm.All <S7AlarmDefinition>().
                                               Where(x => x.Identity == alarm.Identity && x.PLCconnectionID == alarm.PLCconnectionID).ToList().First();

                using (var trans = _realm.BeginWrite())
                {
                    _realm.Remove(definition);
                    trans.Commit();
                }

                _logger.Info($"S7 alarm definition with ID: {alarm.Identity} deleted successfully.");

                return(true);
            }
            catch (Exception ex)
            {
                _logger.Error($"Deleting definition of S7 alarm with ID: {alarm.Identity} failed. Error: {ex.Message}.");
                return(false);
            }
        }
예제 #5
0
        private AlarmDataModel CreateAlarmMemoryModel(S7AlarmDefinition alarm)
        {
            AlarmDataModel alarmDef = new AlarmDataModel()
            {
                Identity          = alarm.Identity,
                AlarmOccured      = false,
                AlarmAcknowledged = false,
                SMSsent           = false,
            };

            return(alarmDef);
        }
예제 #6
0
        private AlarmS7UImodel MergeAlarmDefinitionAndAlarmTexts
            (S7AlarmDefinition alarmDefinition, AlarmLanguagesDefinition alarmTexts)
        {
            if (alarmDefinition != null && alarmTexts != null)
            {
                //merge those 2 objects into one
                AlarmS7UImodel outputObject = new AlarmS7UImodel()
                {
                    Identity                   = alarmDefinition.Identity,
                    PLCconnectionID            = alarmDefinition.PLCconnectionID,
                    AlarmProfileIdentity       = alarmDefinition.AlarmProfileIdentity,
                    SMSrecipientsGroupIdentity = alarmDefinition.SMSrecipientsGroupIdentity,
                    AlarmActivated             = alarmDefinition.AlarmActivated,
                    AlarmTagName               = alarmDefinition.AlarmTagName,
                    AlarmTagDBnumber           = alarmDefinition.AlarmTagDBnumber,
                    AlarmTagByteNumber         = alarmDefinition.AlarmTagByteNumber,
                    AlarmTagBitNumber          = alarmDefinition.AlarmTagBitNumber,
                    AckTagName                 = alarmDefinition.AckTagName,
                    AckTagDBnumber             = alarmDefinition.AckTagDBnumber,
                    AckTagByteNumber           = alarmDefinition.AckTagByteNumber,
                    AckTagBitNumber            = alarmDefinition.AckTagBitNumber,

                    SysLang1  = alarmTexts.SysLang1,
                    SysLang2  = alarmTexts.SysLang2,
                    SysLang3  = alarmTexts.SysLang3,
                    SysLang4  = alarmTexts.SysLang4,
                    SysLang5  = alarmTexts.SysLang5,
                    SysLang6  = alarmTexts.SysLang6,
                    SysLang7  = alarmTexts.SysLang7,
                    UserLang1 = alarmTexts.UserLang1,
                    UserLang2 = alarmTexts.UserLang2,
                    UserLang3 = alarmTexts.UserLang3,
                    UserLang4 = alarmTexts.UserLang4,
                    UserLang5 = alarmTexts.UserLang5,
                    UserLang6 = alarmTexts.UserLang6,
                    UserLang7 = alarmTexts.UserLang7,
                    UserLang8 = alarmTexts.UserLang8,
                    UserLang9 = alarmTexts.UserLang9,

                    ObjectModified = false,
                };

                return(outputObject);
            }
            else
            {
                return(null);
            }
        }
예제 #7
0
        public static void AddNewAlarmToSend(int profileID, int GroupID,
                                             S7AlarmDefinition newAlarm, IRealmProvider realmProvider)
        {
            _realmProvider = realmProvider;

            string text = SaveAlarmOccurencesToDB(newAlarm);

            SMSsendingModel model = new SMSsendingModel()
            {
                AlarmText       = text,
                AlarmProfileID  = profileID,
                AlarmSMSGroupID = GroupID,
            };

            _alarmsToSned.Enqueue(model);
        }
예제 #8
0
        private AlarmS7UImodel ReadSingleS7DetailedAlarm(int plcConnectionID, int alarmIdentity)
        {
            _logger.Info($"Method for obtaining full data of single alarm with PLC connection ID: {plcConnectionID}, and Identity: {alarmIdentity}; fired.");

            //read alarm definition
            S7AlarmDefinition alarmDefinition = ReadSingleAlarmDefinition(plcConnectionID, alarmIdentity);

            //create instance of alarm texts reader
            AlarmTextsReader reader = new AlarmTextsReader(_realmProvider);

            //read alarm texts
            AlarmLanguagesDefinition alarmTexts = reader.GetTextsTorSingleAlarm(alarmIdentity, plcConnectionID);

            //merge objects into one
            return(MergeAlarmDefinitionAndAlarmTexts(alarmDefinition, alarmTexts));
        }
        public static (S7AlarmDefinition, AlarmLanguagesDefinition) DivideToDifferentObjects(AlarmS7UImodel uiModel)
        {
            S7AlarmDefinition alarmDefinition = new S7AlarmDefinition()
            {
                Identity                   = uiModel.Identity,
                PLCconnectionID            = uiModel.PLCconnectionID,
                AlarmProfileIdentity       = uiModel.AlarmProfileIdentity,
                SMSrecipientsGroupIdentity = uiModel.SMSrecipientsGroupIdentity,
                AlarmActivated             = uiModel.AlarmActivated,
                AlarmTagName               = uiModel.AlarmTagName,
                AlarmTagDBnumber           = uiModel.AlarmTagDBnumber,
                AlarmTagByteNumber         = uiModel.AlarmTagByteNumber,
                AlarmTagBitNumber          = uiModel.AlarmTagBitNumber,
                AckTagName                 = uiModel.AckTagName,
                AckTagDBnumber             = uiModel.AckTagDBnumber,
                AckTagByteNumber           = uiModel.AckTagByteNumber,
                AckTagBitNumber            = uiModel.AckTagBitNumber,
            };

            AlarmLanguagesDefinition alarmTexts = new AlarmLanguagesDefinition()
            {
                Identity        = 0,
                AlarmIdentity   = uiModel.Identity,
                PLCconnectionID = uiModel.PLCconnectionID,
                SysLang1        = uiModel.SysLang1,
                SysLang2        = uiModel.SysLang2,
                SysLang3        = uiModel.SysLang3,
                SysLang4        = uiModel.SysLang4,
                SysLang5        = uiModel.SysLang5,
                SysLang6        = uiModel.SysLang6,
                SysLang7        = uiModel.SysLang7,
                UserLang1       = uiModel.UserLang1,
                UserLang2       = uiModel.UserLang2,
                UserLang3       = uiModel.UserLang3,
                UserLang4       = uiModel.UserLang4,
                UserLang5       = uiModel.UserLang5,
                UserLang6       = uiModel.UserLang6,
                UserLang7       = uiModel.UserLang7,
                UserLang8       = uiModel.UserLang8,
                UserLang9       = uiModel.UserLang9,
            };

            return(alarmDefinition, alarmTexts);
        }
예제 #10
0
        private void AnalyzeDataForSingleConnection(int connectionID)
        {
            foreach (var item in _alarmsData[connectionID])
            {
                //send new alarm
                if (item.AlarmOccured && !item.SMSsent)
                {
                    item.SMSsent = true;
                    S7AlarmDefinition definition = _currentAlarmsList[connectionID].Where(x => x.Identity == item.Identity).First();
                    AlarmsToSend.AddNewAlarmToSend(definition.AlarmProfileIdentity, definition.SMSrecipientsGroupIdentity, definition, _realmProvider);
                }

                //reset SMS sent
                if (!item.AlarmOccured)
                {
                    item.SMSsent           = false;
                    item.AlarmAcknowledged = false;
                }
            }
        }
예제 #11
0
 public AlarmOccurencesEventSaver(S7AlarmDefinition alarm, IRealmProvider realmProvider)
 {
     _realmProvider = realmProvider;
     _alarm         = alarm;
 }
예제 #12
0
        private void AddSingleAlarmMemory(int connectionID, S7AlarmDefinition alarm)
        {
            AlarmDataModel alarmDef = CreateAlarmMemoryModel(alarm);

            _alarmsData[connectionID].Add(alarmDef);
        }