Page 1 of 1

Deactivate Alarm in runtime

Posted: Fri Aug 23, 2013 4:11 am
by bjornidar
Hi,

is it possible by scripting to deactivate an alarm? So that it doesn't apper in the alarmviewer?

Re: Deactivate Alarm in runtime

Posted: Mon Aug 26, 2013 8:44 am
by mark.monroe
Have you tried:
Globals.AlarmServer.Default_AlarmItem0.IsEnabled = false;

Where AlarmItem0 is the name of the alarm you want to disable.

Re: Deactivate Alarm in runtime

Posted: Mon Aug 26, 2013 11:36 pm
by bjornidar
Hi, and thank you!

I will give it a try and loop through AlarmItems :)

Re: Deactivate Alarm in runtime

Posted: Tue Aug 27, 2013 11:51 pm
by bjornidar
Hi,

could you look throug my code? It doesn't seem to disable the alarm from the alarm-window. Should it be deactivated before the void AlarmServer fires?

I'm just using staic AlarmItem300 for testing.
It should be done inside the second while-loop.

Code:

Code: Select all

   public partial class AlarmServer
   {
      SmsHandling sms = new SmsHandling(9600, 1);
      
      // Alarm oppstår
      void AlarmServer_AlarmActive(System.Object sender, System.EventArgs e)
      {
         // Deaktiverer alarm (til test.)
         Globals.AlarmServer.Default_AlarmItem300.IsEnabled = false;

         
         // Oppretter spørring for databasetilkobling
         SqlConnection setupConnection = new SqlConnection("Data Source=(local)\\SQLEXPRESS;Initial Catalog=trysilfjellet_alarmer;Integrated Security=SSPI;");
         // Oppretter SQL-spørring for telefonnummer
         SqlCommand sqlTlf = new SqlCommand("SELECT * FROM alarminnstillinger ORDER BY id DESC", setupConnection);
         
         // Åpner SQL-forbindelse mot alarminnstillinger
         setupConnection.Open();
         
         SqlDataReader tlfReader = sqlTlf.ExecuteReader();
         // Variabler for telefonnummer
         int dag = 0;
         int natt = 0;
         // DateTime-variabler for arbeidstid og klokkeslett nå
         DateTime arbstart = DateTime.Now;
         DateTime arbslutt = DateTime.Now;
         DateTime naa = DateTime.Now;

         // Henter telefonnummer og arbeidstid og legger de i lokale variabler
         while(tlfReader.Read())
         {
            dag = (int)tlfReader["dagvakt"];
            natt = (int)tlfReader["nattvakt"];
            DateTime.TryParse(tlfReader["tid_arb_start"].ToString(), out arbstart);
            DateTime.TryParse(tlfReader["tid_arb_slutt"].ToString(), out arbslutt);

         }
         // Lukker SQL-forbindelse mot alarminnstillinger
         setupConnection.Close();
         
         // Henter informasjon fra aktiv alarm
         Neo.ApplicationFramework.Interfaces.IAlarmEvent alarmEvent = (Neo.ApplicationFramework.Interfaces.IAlarmEvent)sender;
         string alarmText = alarmEvent.Text;
         string alarmID = alarmEvent.AlarmItemDisplayName;

         // Lager variabel for hvilket telefonnummer alarm skal sendes til
         int nummer;
         // Sjekk for tid på døgnet mot lagret arbeidstid
         if ((naa.TimeOfDay > arbstart.TimeOfDay) && (naa.TimeOfDay < arbslutt.TimeOfDay))
         {
             nummer = dag;
         }
         else
         {
            nummer = natt;
         }
      
         // Oppretter spørring for databasetilkobling
         SqlConnection alarmConnection = new SqlConnection("Data Source=(local)\\SQLEXPRESS;Initial Catalog=trysilfjellet_alarmer;Integrated Security=SSPI;");

         // Oppretter SQL-spørring for alarmer
         SqlCommand sqlCmd = new SqlCommand("SELECT * FROM alarmer WHERE alarm_item = '" + alarmID + "'", alarmConnection);
         
         // Åpner SQL-forbindelse mot alarmtabell
         alarmConnection.Open();
         
         // Lager SQL-reader som benyttes for å hente ut verdier fra SQL-base
         SqlDataReader alarmReader = sqlCmd.ExecuteReader();
            // Leser igjennom alarmdatabase og semder SMS dersom prioritet = 2   
         while (alarmReader.Read())
         {
            string alarmTekst = replceAlarmTekst(alarmReader["alarm_tekst"].ToString());
            string aktiv = Convert.ToString(alarmReader["aktiv"]);
            if(aktiv == "2")
            {
               
               sms.SendSms("0047" + nummer, "Alarm system: " + alarmReader["stasjon"] + "\n\rFeil: " + alarmTekst);
               System.Threading.Thread.Sleep(5000);
            }
         }
         // Lukker SQL-forbindelse mot alarmtabell
         alarmConnection.Close();
         
      }
      // Erstatter æøå i alarmtekst
      static string replceAlarmTekst(string p)
      {
         StringBuilder b = new StringBuilder(p);
         b.Replace("æ", "ae");
         b.Replace("ø", "o");
         b.Replace("å", "aa");
         b.Replace("Æ", "Ae");
         b.Replace("Ø", "O");
         b.Replace("Å", "AA");
         return b.ToString();
      }

    }

Re: Deactivate Alarm in runtime

Posted: Wed Aug 28, 2013 8:14 am
by mark.monroe
When you disable the alarm, it will never go active. First try putting your

// Deaktiverer alarm (til test.)
Globals.AlarmServer.Default_AlarmItem300.IsEnabled = false;

code on a button and see if you can disable/enable the alarm.

I believe that if you disable the alarm on the alarm active event, the alarm will not fire the next time it is triggered. But since you are in the Alarm active event, it has already been activated, and you will get the alarm.

Re: Deactivate Alarm in runtime

Posted: Mon Sep 02, 2013 7:55 am
by bjornidar
Hi,

I've read the post's about looping through tags and how you can use a variable as a "AlarmItem"/ tag, but I can't figure out how to do it.

if(Convert.ToInt16(comboBox1.SelectedItem.ToString()) == 0)
{
Globals.AlarmServer.Default_globalalarmItem.IsEnabled = false;
}

where globalalarmItem contains "AlarmItemXX"

This gives me error; Can't find any definition for Default_globalalarmItem,...

Re: Deactivate Alarm in runtime

Posted: Fri Sep 06, 2013 8:28 am
by mark.monroe
Here is an example. Alarms have to be in a group, so their name is always prefaced with the name of the group they are in.

Code: Select all

namespace Neo.ApplicationFramework.Generated
{
    using System.Windows.Forms;
    using System;
    using System.Drawing;
    using Neo.ApplicationFramework.Tools;
    using Neo.ApplicationFramework.Common.Graphics.Logic;
    using Neo.ApplicationFramework.Controls;
    using Neo.ApplicationFramework.Interfaces;
    
	using Neo.ApplicationFramework.Tools.Alarm;
	using Neo.ApplicationFramework.Tools.OpcClient;
	using System.Reflection;
	
    public partial class Screen1
    {
		
		void Button1_Click(System.Object sender, System.EventArgs e)
		{
			AlarmItem alm = StringToAlarm("Default_AlarmItem0");
			alm.IsEnabled = false;
		}
		
		public static AlarmItem StringToAlarm(string almName)
		{
			string typeName = (new AlarmItem()).GetType().Name;
			
			PropertyInfo[] props = Globals.AlarmServer.GetType().GetProperties();
			foreach (PropertyInfo prop in props) {
				if (prop.PropertyType.Name.Equals(typeName)) {
					Globals.Tags.Tag2.Value = prop.Name;
					if (prop.Name.Equals(almName, StringComparison.CurrentCultureIgnoreCase)) {
						return (AlarmItem)prop.GetValue(Globals.AlarmServer, null);
					} 
				}
			}
			return null;
		}
    }
}
Snap 2013-09-06 at 08.26.52.jpg
Snap 2013-09-06 at 08.26.52.jpg (53.9 KiB) Viewed 12486 times

Re: Deactivate Alarm in runtime

Posted: Wed Sep 18, 2013 12:21 am
by bjornidar
Thank you! Works like a charm!