Ejemplo n.º 1
0
        public void SendS1F13(WinSECS host)
        {
            SECSTransaction trans = new SECSTransaction(1, 13);

            trans.Primary.Root.Name        = "CR";
            trans.Primary.Root.Description = "Establish communications request";
            SECSItem item = trans.Primary.Root.AddNew("L");

            trans.ReplyExpected = true;
            trans.Send(host);;
        }
Ejemplo n.º 2
0
        void INotifyAgent.OnPrimaryIn(SECSTransaction t, ERRORS ErrorCode, string ErrorText)
        {
            try
            {
                SecsHelper.RecordSecsMessage(t.Primary);

                if (t.Primary.Stream == 1)
                {
                    switch (t.Primary.Function)
                    {
                    case 1:
                        t.Secondary.Root.Item("L").Item("MDLN").Value    = "";
                        t.Secondary.Root.Item("L").Item("SOFTREV").Value = "";
                        t.Reply();
                        break;

                    case 13:
                        t.Secondary.Root.Item("COMMACK").Value = 0;
                        t.Secondary.Root.Item("MDLN").Delete();
                        t.Secondary.Root.Item("SOFTREV").Delete();
                        t.Reply();
                        break;
                    }
                }
                else if (t.Primary.Stream == 5)
                {
                    if (t.Primary.Function == 1)
                    {
                        t.Secondary.Root.Item("ACKC5").Value = 0;
                        t.Reply();
                    }
                }
                else if (t.Primary.Stream == 6)
                {
                    if (t.Primary.Function == 11)
                    {
                        t.Secondary.Root.Item("ACKC6").Value = 0;
                        t.Reply();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Host Primary In message Error:" + ex.Message);
            }
        }
Ejemplo n.º 3
0
        public void OnPrimaryIn(SECSTransaction t, ERRORS ErrorCode, string ErrorText)
        {
            try
            {
                SecsHelper.RecordSecsMessage(t.Primary);

                if (t.Primary.Stream == 1)
                {
                    switch (t.Primary.Function)
                    {
                    case 1:
                        //SECSItem mdln = t.Secondary.Root.AddNew("L").AddNew("MDLN");
                        //mdln.Format = SECS_FORMAT.ASCII;
                        //mdln.Value = "";

                        //SECSItem softver = mdln.Duplicate();
                        //softver.Format = SECS_FORMAT.ASCII;
                        //softver.Value = "";
                        t.Secondary.Root.Item("L").Item("MDLN").Value    = "";
                        t.Secondary.Root.Item("L").Item("SOFTREV").Value = "";
                        t.Reply();
                        break;

                    case 13:
                        t.Secondary.Root.Item("COMMACK").Value = 0;
                        t.Secondary.Root.Item("MDLN").Delete();
                        t.Secondary.Root.Item("SOFTREV").Delete();
                        t.Reply();
                        break;
                    }
                }
                else if (t.Primary.Stream == 6)
                {
                    if (t.Primary.Function == 11)
                    {
                        t.Secondary.Root.Item("ACKC6").Value = 0;
                        t.Reply();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Host Primary In message Error:" + ex.Message);
            }
        }
Ejemplo n.º 4
0
        async public void SendAsync(string unitID, string transName, XElement xmlPrimaryMessage)

        {
            try
            {
                if (!string.IsNullOrEmpty(unitID) && secsPortList.ContainsKey(unitID))
                {
                    _secsPort = secsPortList[unitID];
                }
                //else return;
                if (_secsPort.Connected)
                {
                    await Task.Run(() =>
                    {
                        try
                        {
                            //XElement trans = xmlPrimaryMessage.Element("Primary");
                            SECSTransaction tran = _secsPort.Library.FindTransaction(transName); //new SECSTransaction(stream, function);

                            tran.Primary.Root = XMLToRootSecsItem(xmlPrimaryMessage);
                            tran.Send(_secsPort);
                            //LogInfo.HSMS(string.Format("[Send] {0} : {1}", unitID, tran.Primary));
                            logger.Info(string.Format("[Send] {0} : {1}", unitID, tran.Primary));
                            //_secsPort.SendAsync(transName, xmlPrimaryMessage);
                        }
                        catch (NullReferenceException nullR)
                        {
                            //_logWriter.Write(nullR.Message, "ApplicationException", 0, 8000, System.Diagnostics.TraceEventType.Error, transName + "CustomSendAsync: SECSPort NullReferenceException!");
                        }
                        catch (ArgumentNullException a)
                        {
                            //_logWriter.Write(a.Message, "ApplicationException", 0, 8000, System.Diagnostics.TraceEventType.Error, transName + ":CustomSendAsync Unrecognized Message!");
                        }
                    });
                }
                else
                {
                    DispatchSecondaryInGEMMessage("S99F1", xmlPrimaryMessage);          //Connection Failure
                }
            }
            catch (Exception e)
            {
                //_logWriter.Write(e.Message, "ApplicationException", 0, 8000, System.Diagnostics.TraceEventType.Error, transName + "SendAsync: SecsWellDriver Exception Error!");
            }
        }
Ejemplo n.º 5
0
        private void BuildS1F14(SECSTransaction trans)
        {
            trans.Secondary.Root.Name = "CRA";
            SECSItem item        = trans.Secondary.Root.AddNew("L");
            SECSItem itemCommAck = item.AddNew("COMMACK", "Establish communications acknowledge code");

            itemCommAck.Format = SECS_FORMAT.BINARY;
            itemCommAck.Value  = 0;
            SECSItem itemMCInfo = item.AddNew("L");

            itemMCInfo.AddNew("MDLN", "Equipment Model Type");
            itemMCInfo.Item("MDLN").Format = SECS_FORMAT.ASCII;
            itemMCInfo.Item("MDLN").Value  = "LH620";
            itemMCInfo.AddNew("SOFTREV", "Software revision code");
            itemMCInfo.Item("SOFTREV").Format = SECS_FORMAT.ASCII;
            itemMCInfo.Item("SOFTREV").Value  = "1.2.0";
            trans.Reply();
        }
Ejemplo n.º 6
0
        public void OnSecondaryIn(SECSTransaction t, ERRORS ErrorCode, string ErrorText)
        {
            SecsHelper.RecordSecsMessage(t.Secondary);
            if (t.Secondary.Stream == 1 && t.Secondary.Function == 4)
            {
                if (t.Tag == "QryHardBinQty")
                {
                    QueryHardBinQty(t);
                }
            }

            if (t.Secondary.Stream == 2 && t.Secondary.Function == 16)
            {
                RMDHandler(t);
            }

            if (t.Secondary.Stream == 2 && t.Secondary.Function == 42)
            {
                RMDHandler(t);
            }
        }
Ejemplo n.º 7
0
        public void SendS1F3(WinSECS host)
        {
            SECSTransaction trans = new SECSTransaction(1, 3);

            trans.Primary.Root.Name        = "SSR";
            trans.Primary.Root.Description = "Selected equipment status request";
            SECSItem item = trans.Primary.Root.AddNew("L");
            SECSItem svid = item.AddNew("SVID", "Status variable ID");

            svid.Format = SECS_FORMAT.U4;
            svid.Value  = 1001;
            SECSItem svid2 = svid.Duplicate();

            svid2.Format = SECS_FORMAT.U4;
            svid2.Value  = 1002;
            SECSItem svid3 = svid.Duplicate();

            svid3.Format        = SECS_FORMAT.U4;
            svid3.Value         = 1003;
            trans.ReplyExpected = true;
            trans.Send(host);;
        }
Ejemplo n.º 8
0
 private void DispatchPrimaryInGEMMessage(string unitID, SECSTransaction t, XElement xmlTrans)
 {
     if (!t.Name.Contains("S9"))
     {
         try
         {
             //LogInfo.HSMS("[Receive] " + unitID + " : " + t?.Name + Environment.NewLine + t.Primary);
             logger.Info("[Receive] " + unitID + " : " + t?.Name + Environment.NewLine + t.Primary);
             if (!_secsIIMessageDispatcher.ProcessMessage(unitID, xmlTrans, t.Name, t.DeviceID.ToString()))
             {
                 t.Secondary.Function = 0;
             }
             if (xmlTrans.Element("Secondary") != null)
             {
                 ReplyAsync(unitID, t, xmlTrans.Element("Secondary"));
             }
         }
         catch (Exception e)
         {
         }
     }
 }
Ejemplo n.º 9
0
 async private void ReplyAsync(string unitID, SECSTransaction t, XElement xmlSecondaryMessage)
 {
     if (!string.IsNullOrEmpty(unitID) && secsPortList.ContainsKey(unitID))
     {
         _secsPort = secsPortList[unitID];
     }
     //if (_sECSIILibrary == null) throw new NullReferenceException("SECSLibrary is null!");
     if (_secsPort.Connected == true)
     {
         await Task.Run(() =>
         {
             try
             {
                 t.Secondary.Root = XMLToRootSecsItem(xmlSecondaryMessage);
                 t.Reply(_secsPort);
                 //LogInfo.HSMS("[Reply] " + unitID + " : " + t?.Name + Environment.NewLine + t.Secondary);
                 logger.Info("[Reply] " + unitID + " : " + t?.Name + Environment.NewLine + t.Secondary);
             }
             catch (ArgumentNullException a)
             {
             }
         });
     }
 }
Ejemplo n.º 10
0
 void INotifyAgent.OnSecondaryOut(SECSTransaction t, ERRORS ErrorCode, string ErrorText)
 {
     SecsHelper.RecordSecsMessage(t.Secondary);
 }
Ejemplo n.º 11
0
 public void OnPrimaryOut(SECSTransaction t, ERRORS ErrorCode, string ErrorText)
 {
     SecsHelper.RecordSecsMessage(t.Primary);
 }
Ejemplo n.º 12
0
 public void OnSecondaryOut(SECSTransaction t, ERRORS ErrorCode, string ErrorText)
 {
     //throw new NotImplementedException();
     SecsHelper.RecordSecsMessage(t.Secondary);
 }
Ejemplo n.º 13
0
        async private void OnSECSEventHandler(SECSPort secsPort, SECSEventType type, SECSTransaction trans, SECSErrors err, string errmsg)
        {
            try
            {
                XElement xmlMessage = secsPort.Library.TransToXElement(trans);
                switch (type)
                {
                case SECSEventType.PrimaryRcvd:
                    if (err == SECSErrors.None)
                    {
                        if (secsPortList.Count < 1)
                        {
                            xmlMessage.Element("Primary").Add(new XElement("UnitName", _unitID));
                        }
                        else
                        {
                            xmlMessage.Element("Primary").Add(new XElement("UnitName", secsPortList.First(j => j.Value.DeviceID == secsPort.DeviceID).Key));
                        }
                        await Task.Factory.StartNew(() => DispatchPrimaryInGEMMessage(secsPort.Name, trans, xmlMessage));
                    }
                    //else
                    //_logWriter.Write(String.Format("Error Code: {0}. {1}", trans.Name, errmsg), "ApplicationException", 0, 8000, System.Diagnostics.TraceEventType.Error, "Primary Recvd Error!");
                    //BOE_CIS20EventSource.Log.ReceiveSECSIIMessage(trans.Name, xmlMessage.Element("Primary").ToString());
                    //_logWriter.Write(xmlMessage.Element("Primary"), "SECSII", 0, 7000, System.Diagnostics.TraceEventType.Information, "Rcvd " + trans.Name);
                    break;

                case SECSEventType.SecondaryRcvd:
                    string transName = ParseMessageName(trans.Primary.Stream, trans.Secondary.Function);
                    //S9F* SecsDriver 会自动恢复,不用自己处理
                    //if (err == SECSErrors.T3TimeOut && trans.Name == "S1F14")
                    //{
                    //    _dispatchGEMMessage.CommunicationFailure("S1F14", null);
                    //}

                    await Task.Factory.StartNew(() => DispatchSecondaryInGEMMessage(transName, xmlMessage));

                    //_logWriter.Write(xmlMessage.Element("Secondary"), "SECSII", 0, 7000, System.Diagnostics.TraceEventType.Information, "Rcvd " + transName);
                    break;

                case SECSEventType.PrimarySent:
                    //_logWriter.Write(xmlMessage.Element("Primary"), "SECSII", 0, 7000, System.Diagnostics.TraceEventType.Information, "Sent " + trans.Name);
                    break;

                case SECSEventType.SecondarySent:
                    //_logWriter.Write(xmlMessage.Element("Secondary"), "SECSII", 0, 7000, System.Diagnostics.TraceEventType.Information, "Reply " + ParseMessageName(trans.Primary.Stream, trans.Secondary.Function));
                    break;

                case SECSEventType.HSMSDisconnected:
                    DispatchSecondaryInGEMMessage("S99F1", null);
                    //_logWriter.Write("HSMS is Disconnected", "SECSII");
                    break;

                case SECSEventType.HSMSConnected:
                    DispatchSecondaryInGEMMessage("S1F13", null);
                    //_logWriter.Write("HSMS is Connected", "SECSII");
                    break;

                case SECSEventType.Error:
                    if (err == SECSErrors.T3TimeOut && trans.Name == "S1F13")
                    {
                        DispatchSecondaryInGEMMessage("S1F14", xmlMessage);
                    }
                    if (err == SECSErrors.ReadError || err == SECSErrors.WriteError)
                    {
                        DispatchSecondaryInGEMMessage("S99F2", null);
                    }
                    string name = "";
                    if (trans != null)
                    {
                        //if (err == SECSErrors.T3TimeOut)
                        //    name = ParseMessageName(trans.Primary.Stream, trans.Secondary.Function);
                        //else
                        name = trans.Name;
                    }
                    //_logWriter.Write(String.Format(" ErrorCode: {0} {1}", err, errmsg), "ApplicationException", 0, 8000, System.Diagnostics.TraceEventType.Error, name + ": SECSDriver Error!");
                    break;
                }
            }
            catch (NullReferenceException n)
            {
            }
            catch (Exception e)
            {
            }
            //Logging
        }