Exemple #1
0
        protected virtual void S1F3ReceiveSelectedEquipmentStatusRequest(object sender, SECSEventArgs e)
        {
            try
            {
                S1F3 s1f3 = ((S1F3)e.secsHandler.Parse <S1F3>(e));
                SCUtility.secsActionRecordMsg(scApp, true, s1f3);
                int  count = s1f3.SVID.Count();
                S1F4 s1f4  = new S1F4();
                s1f4.SECSAgentName = scApp.EAPSecsAgentName;
                s1f4.SystemByte    = s1f3.SystemByte;
                s1f4.SV            = new SXFY[count];
                for (int i = 0; i < count; i++)
                {
                    if (s1f3.SVID[i] == SECSConst.VID_AlarmsSet)
                    {
                        //TODO Set Alarm List
                        s1f4.SV[i] = new S6F11.RPTINFO.RPTITEM.VIDITEM_04();
                    }
                    else if (s1f3.SVID[i] == SECSConst.VID_ControlState)
                    {
                        string control_state = SCAppConstants.LineHostControlState.convert2MES(line.Host_Control_State);
                        s1f4.SV[i] = new S6F11.RPTINFO.RPTITEM.VIDITEM_06()
                        {
                            CONTROLSTATE = control_state
                        };
                    }
                    else if (s1f3.SVID[i] == SECSConst.VID_ActiveVehicles)
                    {
                        List <AVEHICLE> vhs       = scApp.getEQObjCacheManager().getAllVehicle();
                        int             vhs_count = vhs.Count;
                        S6F11.RPTINFO.RPTITEM.VIDITEM_71[] VEHICLEINFOs = new S6F11.RPTINFO.RPTITEM.VIDITEM_71[vhs_count];
                        for (int j = 0; j < vhs_count; j++)
                        {
                            VEHICLEINFOs[j] = new S6F11.RPTINFO.RPTITEM.VIDITEM_71()
                            {
                                VHINFO = new S6F11.RPTINFO.RPTITEM.VIDITEM_71.VEHICLEINFO()
                                {
                                    VEHICLE_ID    = vhs[j].VEHICLE_ID,
                                    VEHICLE_STATE = "2"
                                }
                            };
                        }
                        s1f4.SV[i] = new S6F11.RPTINFO.RPTITEM.VIDITEM_53()
                        {
                            VEHICLEINFO = VEHICLEINFOs
                        };
                    }
                    else if (s1f3.SVID[i] == SECSConst.VID_SCState)
                    {
                        //string sc_state = SCAppConstants.LineSCState.convert2MES(line.SCStats);
                        //s1f4.SV[i] = new S6F11.RPTINFO.RPTITEM.VIDITEM_73()
                        //{
                        //    SCSTATE = sc_state
                        //};
                    }
                    else if (s1f3.SVID[i] == SECSConst.VID_EnhancedTransfers)
                    {
                        List <ACMD_MCS> mcs_cmds  = scApp.CMDBLL.loadACMD_MCSIsUnfinished();
                        int             cmd_count = mcs_cmds.Count;
                        S6F11.RPTINFO.RPTITEM.VIDITEM_13[] EnhancedTransferCmds = new S6F11.RPTINFO.RPTITEM.VIDITEM_13[cmd_count];
                        for (int k = 0; k < cmd_count; k++)
                        {
                            ACMD_MCS mcs_cmd        = mcs_cmds[k];
                            string   transfer_state = SCAppConstants.TransferState.convert2MES(mcs_cmd.TRANSFERSTATE);
                            EnhancedTransferCmds[k] = new S6F11.RPTINFO.RPTITEM.VIDITEM_13();
                            EnhancedTransferCmds[k].TRANSFER_STATE.TRANSFER_STATE = transfer_state;

                            EnhancedTransferCmds[k].COMMAND_INFO.COMMAND_ID.COMMAND_ID = mcs_cmd.CMD_ID;
                            EnhancedTransferCmds[k].COMMAND_INFO.PRIORITY.PRIORITY     = mcs_cmd.PRIORITY.ToString();

                            EnhancedTransferCmds[k].TRANSFER_INFO.CARRIER_ID       = mcs_cmd.CARRIER_ID;
                            EnhancedTransferCmds[k].TRANSFER_INFO.SOURCE_PORT      = mcs_cmd.HOSTSOURCE;
                            EnhancedTransferCmds[k].TRANSFER_INFO.DESTINATION_PORT = mcs_cmd.HOSTDESTINATION;
                        }

                        s1f4.SV[i] = new S6F11.RPTINFO.RPTITEM.VIDITEM_76()
                        {
                            EnhancedTransferCmd = EnhancedTransferCmds
                        };
                    }
                    else if (s1f3.SVID[i] == SECSConst.VID_Spec_Version)
                    {
                        s1f4.SV[i] = new S6F11.RPTINFO.RPTITEM.VIDITEM_114()
                        {
                            SPEC_VERSION = string.Empty // TODO fill in
                        };
                    }
                    else if (s1f3.SVID[i] == SECSConst.VID_Enhanced_Carriers)
                    {
                        List <AVEHICLE> has_carry_vhs   = scApp.getEQObjCacheManager().getAllVehicle().Where(vh => vh.HAS_CST == 1).ToList();
                        int             carry_vhs_count = has_carry_vhs.Count;
                        S6F11.RPTINFO.RPTITEM.VIDITEM_10[] carrier_info = new S6F11.RPTINFO.RPTITEM.VIDITEM_10[carry_vhs_count];
                        for (int j = 0; j < carry_vhs_count; j++)
                        {
                            carrier_info[j] = new S6F11.RPTINFO.RPTITEM.VIDITEM_10();
                            carrier_info[j].CARRIER_ID_OBJ.CARRIER_ID    = has_carry_vhs[j].CST_ID.Trim();
                            carrier_info[j].CARRIER_LOC_OBJ.CARRIER_LOC  = has_carry_vhs[j].VEHICLE_ID;
                            carrier_info[j].INSTALL_TIME_OBJ.INSTALLTIME = string.Empty; //TODO 要填入進入的時間
                            carrier_info[j].CARRIER_ZONE_NAME            = string.Empty;
                            carrier_info[j].CARRIER_STATE = string.Empty;
                        }


                        s1f4.SV[i] = new S6F11.RPTINFO.RPTITEM.VIDITEM_51()
                        {
                            ENHANCED_CARRIER_INFO = carrier_info
                        };
                    }
                    else if (s1f3.SVID[i] == SECSConst.VID_Current_Port_States)
                    {
                        List <APORTSTATION> port_station = scApp.MapBLL.loadAllPort();
                        int port_count = port_station.Count;
                        var vid_118    = new S6F11.RPTINFO.RPTITEM.VIDITEM_118();
                        vid_118.PORT_INFO = new S6F11.RPTINFO.RPTITEM.VIDITEM_354[port_count];
                        for (int j = 0; j < port_count; j++)
                        {
                            vid_118.PORT_INFO[j] = new S6F11.RPTINFO.RPTITEM.VIDITEM_354();
                            vid_118.PORT_INFO[j].PORT_ID.PORT_ID = port_station[j].PORT_ID;
                            vid_118.PORT_INFO[j].PORT_TRANSFTER_STATE.PORT_TRANSFER_STATE =
                                ((int)port_station[j].PORT_STATUS).ToString();
                        }
                        s1f4.SV[i] = vid_118;
                    }
                    else
                    {
                        s1f4.SV[i] = new S6F11.RPTINFO.RPTITEM.VIDITEM_04();
                    }
                }
                TrxSECS.ReturnCode rtnCode = ISECSControl.replySECS(bcfApp, s1f4);
                SCUtility.secsActionRecordMsg(scApp, false, s1f4);
            }
            catch (Exception ex)
            {
                logger.Error("MESDefaultMapAction has Error[Line Name:{0}],[Error method:{1}],[Error Message:{2}",
                             line.LINE_ID, "S1F3_Receive_Eqpt_Stat_Req", ex.ToString());
            }
        }
Exemple #2
0
        public override bool QueryProcessAndControlState(out Globals.ControlState newControlState, out Globals.ProcessState newProcessState)
        {
            //TODO - look at evatec example - this could possible be moved to Tool.cs
            newControlState = new ControlState(ControlStates.UNDEFINED, "Undefined");
            newProcessState = new ProcessState(ProcessStates.UNDEFINED, "Undefined");
            S1F3 s1f3 = new S1F3(CurrentToolConfig.Toolid);

            s1f3.addSVID(CurrentToolConfig.ControlStateSVID.ToString(), DataType.U4, "ControlStateSVID");
            s1f3.addSVID(CurrentToolConfig.ProcessStateSVID.ToString(), DataType.U4, "ProcessStateSVID");
            try
            {
                MyLog.Information("Sending tool status query for SVID " + CurrentToolConfig.ControlStateSVID + ", " +
                                  CurrentToolConfig.ProcessStateSVID);
                s1f3.send(EqSrv, CurrentToolConfig.CommunicationTimeout);
                int controlState;
                int processState;

                if (s1f3.SV.Count != 2)
                {
                    MyLog.Warning("Status query response did not include expected values.");
                    return(false);
                }

                if (s1f3.SV[0].Type == DataType.L)
                {
                    MyLog.Warning("The configured SVID '" + CurrentToolConfig.ControlStateSVID + "' for Control State is not recognized by the tool");
                    return(false);
                }
                else
                {
                    controlState = Int32.Parse(s1f3.SV[0].Value);
                }

                if (s1f3.SV[1].Type == DataType.L)
                {
                    MyLog.Warning("The configured SVID '" + CurrentToolConfig.ProcessStateSVID + "' for Process State is not recognized by the tool");
                    return(false);
                }
                else
                {
                    processState = Int32.Parse(s1f3.SV[1].Value);
                }

                if (ControlStateDict.ContainsKey(controlState))
                {
                    newControlState = ControlStateDict[controlState];
                    if (newControlState.State != currentControlState)
                    {
                        Messenger.Default.Send(new ControlStateChangeMessage(newControlState.State, newControlState.Description));
                        MyLog.Debug("Control State changed to " + newControlState.Description);
                        currentControlState = newControlState.State;
                    }
                }
                else
                {
                    MyLog.Warning("Control State changed to undefined state " + controlState);
                    currentControlState = ControlStates.UNDEFINED;
                }
                if (ProcessStateDict.ContainsKey(processState))
                {
                    newProcessState = ProcessStateDict[processState];
                    if (newProcessState.State != currentProcessState)
                    {
                        Messenger.Default.Send(new ProcessStateChangeMessage(newProcessState.State, newProcessState.Description));
                        currentProcessState = newProcessState.State;
                    }
                }
                else
                {
                    MyLog.Warning("Process State changed to undefined state " + processState);
                    currentProcessState = ProcessStates.UNDEFINED;
                }
                MyLog.Debug("Status query returned Control State '" + controlState + "' Process State '" + processState + "'");
                return(true);
            }
            catch (BoundMessageTimeoutException)
            {
                MyLog.Warning("Tool status query (S1F3) timed out.");
            }
            catch (BoundMessageSendException e)
            {
                MyLog.Warning("Tool status query (S1F3) failed - " + e.Message);
            }
            catch (Exception e)
            {
                MyLog.Warning("Unexpected error in tool status query (S1F3); " + e.Message);
            }
            return(false);
        }