Beispiel #1
0
        public override void SMStarting()
        {
            string csv = GetOrderDataCSV();

            if (String.IsNullOrEmpty(csv) ||
                (CountLines <= 0 && SkipIfNoLines))
            {
                if (CurrentACState == ACStateEnum.SMStarting)
                {
                    CurrentACState = ACStateEnum.SMCompleted;
                }
                return;
            }

            if (ParentPWGroup != null && this.ContentACClassWF != null)
            {
                // 5. RefPAACClassMethod is a reference to the virtual "WriteOrder"-Method
                ACClassMethod refPAACClassMethod = null;
                using (ACMonitor.Lock(this.ContextLockForACClassWF))
                {
                    refPAACClassMethod = this.ContentACClassWF.RefPAACClassMethod;
                }

                if (refPAACClassMethod != null)
                {
                    PAProcessModule module = ParentPWGroup.AccessedProcessModule;
                    if (module == null)
                    {
                        Msg msg = new Msg("AccessedProcessModule is null", this, eMsgLevel.Error, PWClassName, "SMStarting", 1010);
                        if (IsAlarmActive(ProcessAlarm, msg.Message) == null)
                        {
                            Messages.LogError(this.GetACUrl(), "SMStarting(10)", msg.Message);
                        }
                        OnNewAlarmOccurred(ProcessAlarm, msg, true);
                        SubscribeToProjectWorkCycle();
                        return;
                    }

                    // 6. With TypeACSignature() you get ACMethod for "WriteOrder"
                    ACMethod paramMethod = refPAACClassMethod.TypeACSignature();
                    if (!(bool)ExecuteMethod("GetConfigForACMethod", paramMethod, true))
                    {
                        return;
                    }
                    // 7. Set all necessary parameters
                    paramMethod.ParameterValueList["Content"] = csv;

                    RecalcTimeInfo();
                    if (CreateNewProgramLog(paramMethod) <= CreateNewProgramLogResult.ErrorNoProgramFound)
                    {
                        return;
                    }
                    _ExecutingACMethod = paramMethod;

                    // 8. Start asynchronous task on PAFOrder.
                    if (!module.TaskInvocationPoint.AddTask(paramMethod, this))
                    {
                        SubscribeToProjectWorkCycle();
                        return;
                    }
                    else
                    {
                        UnSubscribeToProjectWorkCycle();
                    }
                    UpdateCurrentACMethod();
                }
            }

            // 9. Switch to State SMRunning
            // (If module.AddTask was exceuted syncronously then state is maybe already Runnning.)
            if (IsACStateMethodConsistent(ACStateEnum.SMStarting) < ACStateCompare.WrongACStateMethod)
            {
                CurrentACState = ACStateEnum.SMRunning;
            }
        }