From 6f4edffd5e5669ea10ec8b20d89fbc3ad6d39be2 Mon Sep 17 00:00:00 2001 From: Nicola Carminati Date: Mon, 27 Nov 2017 16:58:25 +0000 Subject: [PATCH] --- CMS_CORE_Application/Form1.Designer.cs | 89 +++++++++++++++++------ CMS_CORE_Application/Form1.cs | 10 ++- CMS_CORE_Library/CMS_CORE_Library.csproj | 6 ++ CMS_CORE_Library/OSAI_ErrorMgr.dll | Bin 0 -> 19456 bytes CMS_CORE_Library/Osai/Nc_Osai.cs | 64 ++++++++++++++-- CMS_CORE_Library/Osai/OSAIErrMgr.cs | 2 +- CMS_CORE_Library/OsaiTool.dll | Bin 0 -> 143360 bytes CMS_CORE_Library/Siemens/Nc_Siemens.cs | 66 +++++++++-------- 8 files changed, 175 insertions(+), 62 deletions(-) create mode 100644 CMS_CORE_Library/OSAI_ErrorMgr.dll create mode 100644 CMS_CORE_Library/OsaiTool.dll diff --git a/CMS_CORE_Application/Form1.Designer.cs b/CMS_CORE_Application/Form1.Designer.cs index 996ec5b..0f8cfc0 100644 --- a/CMS_CORE_Application/Form1.Designer.cs +++ b/CMS_CORE_Application/Form1.Designer.cs @@ -47,6 +47,8 @@ this.LabelBoh = new System.Windows.Forms.Label(); this.label8 = new System.Windows.Forms.Label(); this.TXTTime = new System.Windows.Forms.TextBox(); + this.TXTAlm = new System.Windows.Forms.TextBox(); + this.TXTMsg = new System.Windows.Forms.TextBox(); this.panel1.SuspendLayout(); this.SuspendLayout(); // @@ -54,9 +56,9 @@ // this.Connect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.Connect.Location = new System.Drawing.Point(3, 86); + this.Connect.Location = new System.Drawing.Point(14, 98); this.Connect.Name = "Connect"; - this.Connect.Size = new System.Drawing.Size(229, 23); + this.Connect.Size = new System.Drawing.Size(234, 23); this.Connect.TabIndex = 0; this.Connect.Text = "Connect"; this.Connect.UseVisualStyleBackColor = true; @@ -64,7 +66,10 @@ // // panel1 // - this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.panel1.Controls.Add(this.label3); this.panel1.Controls.Add(this.label2); this.panel1.Controls.Add(this.label1); @@ -72,15 +77,16 @@ this.panel1.Controls.Add(this.TXTip); this.panel1.Controls.Add(this.NcCombo); this.panel1.Controls.Add(this.Connect); - this.panel1.Location = new System.Drawing.Point(12, 12); + this.panel1.Location = new System.Drawing.Point(-3, -2); this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(237, 114); + this.panel1.Size = new System.Drawing.Size(264, 128); this.panel1.TabIndex = 1; // // label3 // + this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(49, 59); + this.label3.Location = new System.Drawing.Point(63, 59); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(29, 13); this.label3.TabIndex = 5; @@ -88,8 +94,9 @@ // // label2 // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(34, 33); + this.label2.Location = new System.Drawing.Point(48, 33); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(44, 13); this.label2.TabIndex = 4; @@ -97,8 +104,9 @@ // // label1 // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(27, 6); + this.label1.Location = new System.Drawing.Point(41, 6); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(51, 13); this.label1.TabIndex = 2; @@ -107,7 +115,7 @@ // TXTport // this.TXTport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.TXTport.Location = new System.Drawing.Point(82, 56); + this.TXTport.Location = new System.Drawing.Point(98, 56); this.TXTport.Name = "TXTport"; this.TXTport.Size = new System.Drawing.Size(150, 20); this.TXTport.TabIndex = 3; @@ -116,7 +124,7 @@ // TXTip // this.TXTip.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.TXTip.Location = new System.Drawing.Point(82, 30); + this.TXTip.Location = new System.Drawing.Point(98, 30); this.TXTip.Name = "TXTip"; this.TXTip.Size = new System.Drawing.Size(150, 20); this.TXTip.TabIndex = 2; @@ -132,7 +140,7 @@ "Fanuc", "Siemens", "Osai"}); - this.NcCombo.Location = new System.Drawing.Point(82, 3); + this.NcCombo.Location = new System.Drawing.Point(98, 3); this.NcCombo.Name = "NcCombo"; this.NcCombo.Size = new System.Drawing.Size(150, 21); this.NcCombo.TabIndex = 2; @@ -141,7 +149,7 @@ // TXTPath1 // this.TXTPath1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.TXTPath1.Location = new System.Drawing.Point(184, 210); + this.TXTPath1.Location = new System.Drawing.Point(179, 229); this.TXTPath1.Name = "TXTPath1"; this.TXTPath1.ReadOnly = true; this.TXTPath1.Size = new System.Drawing.Size(65, 20); @@ -149,8 +157,9 @@ // // label4 // + this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(110, 213); + this.label4.Location = new System.Drawing.Point(105, 232); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(68, 13); this.label4.TabIndex = 6; @@ -159,7 +168,7 @@ // TXTStat1 // this.TXTStat1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.TXTStat1.Location = new System.Drawing.Point(184, 236); + this.TXTStat1.Location = new System.Drawing.Point(179, 255); this.TXTStat1.Name = "TXTStat1"; this.TXTStat1.ReadOnly = true; this.TXTStat1.Size = new System.Drawing.Size(65, 20); @@ -167,8 +176,9 @@ // // label5 // + this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(107, 239); + this.label5.Location = new System.Drawing.Point(102, 258); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(71, 13); this.label5.TabIndex = 8; @@ -177,7 +187,7 @@ // TXTName // this.TXTName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.TXTName.Location = new System.Drawing.Point(99, 132); + this.TXTName.Location = new System.Drawing.Point(94, 151); this.TXTName.Name = "TXTName"; this.TXTName.ReadOnly = true; this.TXTName.Size = new System.Drawing.Size(150, 20); @@ -185,8 +195,9 @@ // // label6 // + this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(34, 135); + this.label6.Location = new System.Drawing.Point(34, 154); this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(55, 13); this.label6.TabIndex = 10; @@ -195,7 +206,7 @@ // TXTNProcess // this.TXTNProcess.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.TXTNProcess.Location = new System.Drawing.Point(184, 184); + this.TXTNProcess.Location = new System.Drawing.Point(179, 203); this.TXTNProcess.Name = "TXTNProcess"; this.TXTNProcess.ReadOnly = true; this.TXTNProcess.Size = new System.Drawing.Size(65, 20); @@ -204,7 +215,7 @@ // TXTMachNum // this.TXTMachNum.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.TXTMachNum.Location = new System.Drawing.Point(184, 158); + this.TXTMachNum.Location = new System.Drawing.Point(179, 177); this.TXTMachNum.Name = "TXTMachNum"; this.TXTMachNum.ReadOnly = true; this.TXTMachNum.Size = new System.Drawing.Size(65, 20); @@ -212,8 +223,9 @@ // // LabelBoh // + this.LabelBoh.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.LabelBoh.AutoSize = true; - this.LabelBoh.Location = new System.Drawing.Point(72, 161); + this.LabelBoh.Location = new System.Drawing.Point(67, 180); this.LabelBoh.Name = "LabelBoh"; this.LabelBoh.Size = new System.Drawing.Size(106, 13); this.LabelBoh.TabIndex = 14; @@ -221,8 +233,9 @@ // // label8 // + this.label8.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(132, 187); + this.label8.Location = new System.Drawing.Point(127, 206); this.label8.Name = "label8"; this.label8.Size = new System.Drawing.Size(46, 13); this.label8.TabIndex = 15; @@ -230,18 +243,44 @@ // // TXTTime // - this.TXTTime.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.TXTTime.Location = new System.Drawing.Point(84, 336); + this.TXTTime.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.TXTTime.Location = new System.Drawing.Point(183, 489); this.TXTTime.Name = "TXTTime"; this.TXTTime.ReadOnly = true; this.TXTTime.Size = new System.Drawing.Size(65, 20); this.TXTTime.TabIndex = 16; // + // TXTAlm + // + this.TXTAlm.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TXTAlm.Location = new System.Drawing.Point(7, 288); + this.TXTAlm.Multiline = true; + this.TXTAlm.Name = "TXTAlm"; + this.TXTAlm.ReadOnly = true; + this.TXTAlm.Size = new System.Drawing.Size(236, 81); + this.TXTAlm.TabIndex = 17; + // + // TXTMsg + // + this.TXTMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TXTMsg.Location = new System.Drawing.Point(7, 375); + this.TXTMsg.Multiline = true; + this.TXTMsg.Name = "TXTMsg"; + this.TXTMsg.ReadOnly = true; + this.TXTMsg.Size = new System.Drawing.Size(236, 89); + this.TXTMsg.TabIndex = 18; + // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(255, 479); + this.ClientSize = new System.Drawing.Size(255, 521); + this.Controls.Add(this.TXTMsg); + this.Controls.Add(this.TXTAlm); this.Controls.Add(this.TXTTime); this.Controls.Add(this.label8); this.Controls.Add(this.LabelBoh); @@ -286,6 +325,8 @@ private System.Windows.Forms.Label LabelBoh; private System.Windows.Forms.Label label8; private System.Windows.Forms.TextBox TXTTime; + private System.Windows.Forms.TextBox TXTAlm; + private System.Windows.Forms.TextBox TXTMsg; } } diff --git a/CMS_CORE_Application/Form1.cs b/CMS_CORE_Application/Form1.cs index 8ffd9ec..a99b891 100644 --- a/CMS_CORE_Application/Form1.cs +++ b/CMS_CORE_Application/Form1.cs @@ -24,6 +24,7 @@ namespace CMS_CORE_Application public partial class Form1 : Form { static Nc N; + static Nc N2; static String NCType; static String NCIp; static ushort NCPort; @@ -67,6 +68,8 @@ namespace CMS_CORE_Application String ModelName = ""; Dictionary Axes = new Dictionary(); Stopwatch sw = new Stopwatch(); + List Alm = new List(); + List Msg = new List(); try { @@ -78,7 +81,7 @@ namespace CMS_CORE_Application N = new Nc_Osai(NCIp, NCPort,500); if (NCType == "Fanuc") N = new Nc_Fanuc(NCIp, NCPort, 500); - + N.NC_Connect(); N.NC_RModelName(ref ModelName); N.NC_RProcessesNum(ref procnum); @@ -87,9 +90,10 @@ namespace CMS_CORE_Application while (true) { sw.Restart(); - N.AXES_RInterpPosition(1, ref Axes); N.PROC_RMode(1,ref mode); N.PROC_RStatus(1, ref status); + N.PROC_RActiveAlarms(1,ref Alm); + N.PLC_RActiveAlarms(ref Msg); sw.Stop(); @@ -104,6 +108,8 @@ namespace CMS_CORE_Application TXTName.Text = ModelName; TXTMachNum.Text = MachNumber; TXTTime.Text = sw.ElapsedMilliseconds.ToString()+" mS"; + TXTAlm.Text = String.Join(Environment.NewLine, Alm); + TXTMsg.Text = String.Join(Environment.NewLine, Msg); panel1.Enabled = false; }); diff --git a/CMS_CORE_Library/CMS_CORE_Library.csproj b/CMS_CORE_Library/CMS_CORE_Library.csproj index 942b645..e6421ec 100644 --- a/CMS_CORE_Library/CMS_CORE_Library.csproj +++ b/CMS_CORE_Library/CMS_CORE_Library.csproj @@ -881,6 +881,12 @@ Always + + Always + + + Always + \ No newline at end of file diff --git a/CMS_CORE_Library/OSAI_ErrorMgr.dll b/CMS_CORE_Library/OSAI_ErrorMgr.dll new file mode 100644 index 0000000000000000000000000000000000000000..7e01867f3ea9cc4661fd09c668b3c5b88363906b GIT binary patch literal 19456 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 QO=^;E@=F8g{|i6=4n>((dH?_b literal 0 HcmV?d00001 diff --git a/CMS_CORE_Library/Osai/Nc_Osai.cs b/CMS_CORE_Library/Osai/Nc_Osai.cs index fc44d60..f45b139 100644 --- a/CMS_CORE_Library/Osai/Nc_Osai.cs +++ b/CMS_CORE_Library/Osai/Nc_Osai.cs @@ -28,12 +28,12 @@ namespace CMS_CORE.Osai private String Cnc_SftVersion; private String Cnc_SeriesNum; private String Cnc_name; - private String[] PlcMessages; private DateTime Last_Static_Read; private String OsaiLanguages; private ushort timeOutConn; private EndpointAddress endPointAddress; private BasicHttpBinding HttpBinding; + private static String[] PlcMessages; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -61,8 +61,12 @@ namespace CMS_CORE.Osai //ReadLanguageConfig LanguageConfig(); - //ReadPlcMessages - ReadPlcMessages(); + //Read Plc Messages + if(PlcMessages == null) + { + PlcMessages = new string[] { }; + ReadPlcMessages(); + } } @@ -372,6 +376,7 @@ namespace CMS_CORE.Osai uint errorClass, errorNum; ushort nReturn; MSGERROR err; + MSGEMERGENCY errEmgy; //Check if the NC is Connected CheckConnection(); @@ -380,12 +385,45 @@ namespace CMS_CORE.Osai try { //Execute the method - nReturn = OpenNC.ReadCurrentErrorMsg(Number, out err, out errorClass, out errorNum); + nReturn = OpenNC.ReadCurrentEmergMsg(0, out errEmgy, out errorClass, out errorNum); //If there's an error launch exception if (errorClass != 0 || errorNum != 0 || nReturn == 0) throw new Nc_Exception(getError(NC_PROD_ERROR, errorClass, errorNum)); + //If there's an error + if (errEmgy.CodeErr != 0) + { + MESSAGE_TEXT MessageEmgy = new MESSAGE_TEXT(); + Cndex.MSG_EMERGENCY CndexErrorEmgy = ConverToCndexMessage(errEmgy); + + //Translate using OSAI .DLL (a new one!) + OSAIErrorManagerLibrary.TranslateEmergMsg(ref CndexErrorEmgy, ref MessageEmgy); + + //Build the new String Message + ActMSG = MessageEmgy.Line1.Trim(); + if (!String.IsNullOrWhiteSpace(MessageEmgy.Line2)) + ActMSG += "\n" + MessageEmgy.Line2.Trim(); + if (!String.IsNullOrWhiteSpace(MessageEmgy.Line3)) + ActMSG += "\n" + MessageEmgy.Line3.Trim(); + if (!String.IsNullOrWhiteSpace(MessageEmgy.Line4)) + ActMSG += "\n" + MessageEmgy.Line4.Trim(); + + Alarms.Clear(); + Alarms.Add(ActMSG); + return; + } + + //------------------------------------------ + //Second Part: Read the Global Alarms + + //Execute the method + nReturn = OpenNC.ReadCurrentErrorMsg(Number, out err, out errorClass, out errorNum); + + //If there's an error launch exception + if (errorClass != 0 || errorNum != 0 || nReturn == 0) + throw new Nc_Exception(getError(NC_PROD_ERROR, errorClass, errorNum)); + //If there's an error if (err.CodeErr != 0) { @@ -1493,6 +1531,7 @@ namespace CMS_CORE.Osai } + //Convert error from Open To Cndex private Cndex.MSG_ERROR ConverToCndexMessage(MSGERROR OpenError) { @@ -1511,6 +1550,21 @@ namespace CMS_CORE.Osai + //Convert error from Open To Cndex + private Cndex.MSG_EMERGENCY ConverToCndexMessage(MSGEMERGENCY OpenError) + { + Cndex.MSG_EMERGENCY OsaiSerie10Err = new Cndex.MSG_EMERGENCY(); + + OsaiSerie10Err.BootID = (int)OpenError.BootID; + OsaiSerie10Err.UnIdSeq = (int)OpenError.UnIdSeq; + OsaiSerie10Err.Code_Err = (int)OpenError.CodeErr; + OsaiSerie10Err.FormatTxt = OpenError.FormatTxt; + OsaiSerie10Err.Process = OpenError.Process; + + return OsaiSerie10Err; + } + + // Convert the internal error in a readable-String error private String getError(uint CMSError, uint Class, uint Num) @@ -1701,7 +1755,7 @@ namespace CMS_CORE.Osai } return ErrororOwner + szErrorClassDesc + ": " + szErrorDesc + " (" + Class + "-" + Num + ")"; - default: return ErrororOwner + " Generic Osai Error - Class:" + Class + " Num:" + Num + ")"; + default: return ErrororOwner + " Generic Osai Error - Class: " + Class + " Num: " + Num; } diff --git a/CMS_CORE_Library/Osai/OSAIErrMgr.cs b/CMS_CORE_Library/Osai/OSAIErrMgr.cs index d634d9d..50fcbc1 100644 --- a/CMS_CORE_Library/Osai/OSAIErrMgr.cs +++ b/CMS_CORE_Library/Osai/OSAIErrMgr.cs @@ -63,7 +63,7 @@ namespace CMS_CORE.Osai /// pText: MESSAGE_TEXT* /// [DllImport("OSAI_ErrorMgr.dll", EntryPoint = "TranslateEmergMsg", CallingConvention = CallingConvention.Cdecl)] - public static extern void TranslateEmergMsg(ref MSGEMERGENCY pMsgLog, ref MESSAGE_TEXT pText); + public static extern void TranslateEmergMsg(ref Cndex.MSG_EMERGENCY pMsgLog, ref MESSAGE_TEXT pText); /// /// Return Type: void diff --git a/CMS_CORE_Library/OsaiTool.dll b/CMS_CORE_Library/OsaiTool.dll new file mode 100644 index 0000000000000000000000000000000000000000..f68e38c9648bb635ec667f27d1cda55a36543ac2 GIT binary patch literal 143360 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 F{|CSJ AxisInPath; + // STatic variables + private static AlarmSvc SiemensAlmSvc; + private static Alarm[] SiemensAlarms; + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #region Contructor & global methods @@ -86,6 +94,14 @@ namespace CMS_CORE.Siemens //Read static Data ReadStaticNCData(); + //Setup the alarms (Only managed in this way (Siemens Thread) + if(SiemensAlmSvc == null) + { + SiemensAlarms = new Alarm[]{ }; + SiemensAlmSvc = new AlarmSvc(ConvertToSTEPLanguage(SiemensLanguage).ThreeLetterISOLanguageName); + SiemensAlmSvc.Subscribe(AlarmsChanged); + } + } catch (Exception ex) { @@ -200,7 +216,7 @@ namespace CMS_CORE.Siemens //Setup variables DataSvc Data = new DataSvc(); Data.Timeout = TimeoutConn; - Data.PriorityFlag = SlPriority.highPriority; + Data.PriorityFlag = SlPriority.highPriority; Item ReadItem = new Item(PathGenericNcMode + "[u"+ ProcNumber + "]"); Item ReadItemIncr = new Item(PathIncrJog + "[u" + ProcNumber + "]"); Item ReadItemAdv = new Item(PathAdvancedJog + "[u" + ProcNumber + "]"); @@ -258,7 +274,9 @@ namespace CMS_CORE.Siemens //Get the PLC Active Alarms public override void PLC_RActiveAlarms(ref List Alarms) { - throw new NotImplementedException(); + AlarmSource s = new AlarmSource(10,""); + + Alarms = SiemensAlarms.Where(x => x.Id >= IDMinPLCMessage && x.Id <= IDMaxPLCMessage).Select(x => x.Message).ToList(); } @@ -266,7 +284,7 @@ namespace CMS_CORE.Siemens //Get the process Messages public override void PROC_RActiveAlarms(ushort ProcNumber, ref List Alarms) { - throw new NotImplementedException(); + Alarms = SiemensAlarms.Where(x => x.Id < IDMinPLCMessage || x.Id > IDMaxPLCMessage).Select(x => x.Message).ToList(); } @@ -274,29 +292,7 @@ namespace CMS_CORE.Siemens //Get a dictionary with the Actual position of the axes in Process public override void AXES_RInterpPosition(ushort ProcNumber, ref Dictionary Axes) { - //Check if the NC is Connected - CheckConnection(); - - //Setup variables - DataSvc Data = new DataSvc(); - Data.Timeout = TimeoutConn; - Data.PriorityFlag = SlPriority.highPriority; - Item ReadItem = new Item(PathRelatPosition + "[u" + ProcNumber + ",1,16]"); - - //Try to get information - try - { - //Read Data - Data.Read(ReadItem); - - //Save Data - //Status = ConvertToSTEPStatus((uint)ReadItem.Value); - - } - catch (Exception ex) - { - ThrowNCException(ex); - } + throw new Nc_Exception("CMS-Core-Error: Function not allowed for this type of NC"); } @@ -304,7 +300,7 @@ namespace CMS_CORE.Siemens //Get a dictionary with the Machine position of the axes in Process public override void AXES_RMachinePosition(ushort ProcNumber, ref Dictionary Axes) { - throw new NotImplementedException(); + throw new Nc_Exception("CMS-Core-Error: Function not allowed for this type of NC"); } @@ -312,7 +308,7 @@ namespace CMS_CORE.Siemens //Get a dictionary with the Programmed position of the axes in Process public override void AXES_RProgrPosition(ushort ProcNumber, ref Dictionary Axes) { - throw new NotImplementedException(); + throw new Nc_Exception("CMS-Core-Error: Function not allowed for this type of NC"); } @@ -320,7 +316,7 @@ namespace CMS_CORE.Siemens //Get a dictionary with the Following Error of the axes in Process public override void AXES_RFollowingError(ushort ProcNumber, ref Dictionary Axes) { - throw new NotImplementedException(); + throw new Nc_Exception("CMS-Core-Error: Function not allowed for this type of NC"); } @@ -328,7 +324,7 @@ namespace CMS_CORE.Siemens //Get a dictionary with the Distance To Go of the axes in Process public override void AXES_RDistanceToGo(ushort ProcNumber, ref Dictionary Axes) { - throw new NotImplementedException(); + throw new Nc_Exception("CMS-Core-Error: Function not allowed for this type of NC"); } #endregion @@ -790,6 +786,16 @@ namespace CMS_CORE.Siemens /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #region Subordinate Private Functions + + + //Manage the Alarms - Called automatically on changes + private void AlarmsChanged(Guid guid, Alarm[] alarms) + { + SiemensAlarms = alarms; + } + + + //Manage the Mode private PROC_Mode ConvertToSTEPMode(uint mode, uint JogMode, uint AdvMode) {