Ejemplo n.º 1
0
 public void WaitProgramEnd(ProgramBuffer index, int timeout)
 {
     if (IsProgramRunning(index))
     {
         Api.WaitProgramEnd(index, timeout);
     }
 }
Ejemplo n.º 2
0
 private void StopBufferIfRunning(ProgramBuffer index)
 {
     if (IsProgramRunning(index))
     {
         Api.StopBuffer(index);
         Thread.Sleep(100);
     }
 }
Ejemplo n.º 3
0
 public bool IsProgramRunning(ProgramBuffer index)
 {
     try {
         return((uint)(Api.GetProgramState(index) & ProgramStates.ACSC_PST_RUN) > 0U);
     }
     catch (Exception ex) {
         logger.Error(string.Format("BufferHelper.IsProgramRunning: Exception {0}: {1}", index, ex.Message));
         return(false);
     }
 }
Ejemplo n.º 4
0
        private bool IsBufferEmpty(ProgramBuffer bufferIndex)
        {
            string buffer;

            try {
                buffer = Api.UploadBuffer(bufferIndex);
            }
            catch (Exception e) {
                throw new AcsException("Failed to upload buffer. Exception: " + e.Message);
            }

            return(buffer == null);
        }
Ejemplo n.º 5
0
        private void DeclareVariableInDBuffer()
        {
            string Warning = "! Warning, generated by Host for digital input and output, do NOT change." + NewLine;

            string inputDefine = string.Empty;

            for (int i = 0; i < InputModuleNum; i++)
            {
                inputDefine += GlobalDefine + GetInputName(i) + NewLine;
            }

            string outputDefine = string.Empty;

            for (int i = 0; i < OutputModuleNum; i++)
            {
                outputDefine += GlobalDefine + GetOutputName(i) + NewLine;
            }

            string        program = Warning + inputDefine + outputDefine;
            ProgramBuffer DBuffer = (ProgramBuffer)(Convert.ToInt16(Ch.GetDBufferIndex()));

            string originProgram = Ch.UploadBuffer(DBuffer);

            if (originProgram != null)
            {
                if (originProgram.Contains(InputVariableName + BaseAddressOffset) == false)
                {
                    Ch.AppendBuffer(DBuffer, program);

                    for (int i = 0; i < 9; i++)
                    {
                        Ch.ClearBuffer((ProgramBuffer)i, 1, 2000);
                    }
                    Ch.CompileBuffer(DBuffer);
                }
            }
            else
            {
                Ch.AppendBuffer(DBuffer, program);

                for (int i = 0; i < 9; i++)
                {
                    Ch.ClearBuffer((ProgramBuffer)i, 1, 2000);
                }
                Ch.CompileBuffer(DBuffer);
            }

            MapEtherCAT();
        }
Ejemplo n.º 6
0
        public void StopBuffer(ProgramBuffer index)
        {
            if (!Api.IsConnected)
            {
                logger.Info("BufferHelper.StopBuffer: Controller not connected");
                return;
            }

            try {
                Api.StopBuffer(index);
            }
            catch (Exception ex) {
                logger.Error(string.Format("AcsUtil.ReadVar: Failed to stop buffer {0}: {1}", index, ex.Message));
            }
        }
Ejemplo n.º 7
0
 public void WriteVariable(object value, string variable, ProgramBuffer buffer = ProgramBuffer.ACSC_NONE)
 {
     try
     {
         if (Connected())
         {
             ch.WriteVariable(value, variable, buffer);
         }
     }
     catch (Exception ex)
     {
         LogScreen.PushMessage(ex.StackTrace, MessageType.Error);
         Console.WriteLine(ex.StackTrace);
     }
 }
Ejemplo n.º 8
0
 public void RunBuffer(ProgramBuffer buffer)
 {
     if (Connected())
     {
         try
         {
             ch.RunBuffer(buffer, null);
         }
         catch (Exception ex)
         {
             LogScreen.PushMessage(ex.StackTrace, MessageType.Error);
             Console.WriteLine(ex.StackTrace);
         }
     }
 }
Ejemplo n.º 9
0
        private void WriteBuffer(ProgramBuffer index, string buffer)
        {
            if (!CompareBuffer(index, buffer))
            {
                return;
            }

            StopBufferIfRunning(index);
            try {
                Api.LoadBuffer(index, buffer);
                Api.CompileBuffer(index);
                changesMadeToBuffer = true;
            }
            catch (Exception e) {
                throw new AcsException($"Failed to load and compile buffer {index}. Exception: " + e.Message);
            }
        }
Ejemplo n.º 10
0
        public object ReadVariableAsMatrix(string varName, ProgramBuffer bufferIndex = ProgramBuffer.ACSC_NONE,
                                           int from1 = -1, int to1 = -1, int from2 = -1, int to2 = -1)
        {
            if (!api.IsConnected)
            {
                logger.Info("AcsUtil.ReadVariableAsMatrix: Controller not connected");
                return(null);
            }

            try {
                return(api.ReadVariableAsMatrix(varName, bufferIndex, from1, to1, from2, to2));
            }
            catch (Exception ex) {
                logger.Error($"AcsUtil.ReadVariableAsMatrix: Exception while accessing '{varName}': " + ex.Message);
                return(null);
            }
        }
Ejemplo n.º 11
0
        public object ReadVar(string varName, ProgramBuffer bufferIndex = ProgramBuffer.ACSC_NONE,
                              int indFrom = -1, int indFromTo = -1)
        {
            if (!api.IsConnected)
            {
                logger.Info("AcsUtil.ReadVar: Controller not connected");
                return(null);
            }

            try {
                return(api.ReadVariable(varName, bufferIndex, indFrom, indFromTo));
            }
            catch (Exception ex) {
                logger.Error($"AcsUtil.ReadVar: Exception while accessing '{varName}', index from '{indFrom}' to '{indFromTo}': " + ex.Message);
                return(null);
            }
        }
Ejemplo n.º 12
0
        public void RunBuffer(ProgramBuffer index, string label = null)
        {
            if (!Api.IsConnected)
            {
                logger.Info("BufferHelper.RunBuffer: Controller not connected");
                return;
            }

            try {
                StopBufferIfRunning(index);
                Api.RunBuffer(index, label);
            }
            catch (Exception ex) {
                logger.Error(
                    string.Format("BufferHelper.RunBuffer: Failed to run buffer {0}:{1} {2}", index,
                                  label == null ? "the top" : (object)label, ex.Message));
            }
        }
Ejemplo n.º 13
0
        public object ReadVariable(string variable, ProgramBuffer buffer = ProgramBuffer.ACSC_NONE)
        {
            object data = (int)0;

            try
            {
                if (Connected())
                {
                    data = ch.ReadVariable(variable, buffer);
                }
            }
            catch (Exception ex)
            {
                LogScreen.PushMessage(ex.StackTrace, MessageType.Error);
                Console.WriteLine(ex.StackTrace);
            }
            return(data);
        }
Ejemplo n.º 14
0
        private void DeclareVariableInDBuffer()
        {
            string Warning = "! Warning, generated by Host for Motor Abs Position, do not change." + _newLine;

            string EcatActPosDefine = string.Empty;

            foreach (var motor in Motors)
            {
                EcatActPosDefine += GlobalDefine + GetEcatActPosName(motor) + _newLine;
            }

            string        program = Warning + EcatActPosDefine;
            ProgramBuffer DBuffer = (ProgramBuffer)(Convert.ToInt16(_ch.GetDBufferIndex()));

            string originProgram = _ch.UploadBuffer(DBuffer);

            if (originProgram != null)
            {
                if (originProgram.Contains(EcatActPosName) == false)
                {
                    _ch.AppendBuffer(DBuffer, program);

                    for (int i = 0; i < 9; i++)
                    {
                        _ch.ClearBuffer((ProgramBuffer)i, 1, 2000);
                    }
                    _ch.CompileBuffer(DBuffer);
                }
            }
            else
            {
                _ch.AppendBuffer(DBuffer, program);

                for (int i = 0; i < 9; i++)
                {
                    _ch.ClearBuffer((ProgramBuffer)i, 1, 2000);
                }
                _ch.CompileBuffer(DBuffer);
            }

            MapEtherCat();
        }
Ejemplo n.º 15
0
        /// <summary>
        /// compare buffer to be written with existing buffer on the ACS controller (if any)
        /// </summary>
        /// <param name="bufferIndex">index of the buffer</param>
        /// <param name="toWrite">buffer to be written</param>
        /// <returns>true when there's different between the buffer, or the buffer on the controller is empty</returns>
        /// <exception cref="AcsException">triggered when buffer uploading failed</exception>
        private bool CompareBuffer(ProgramBuffer bufferIndex, string toWrite)
        {
            string toCompare;

            try {
                toCompare = Api.UploadBuffer(bufferIndex);
            }
            catch (Exception e) {
                throw new AcsException("Failed to upload buffer. Exception: " + e.Message);
            }

            if (toCompare == null)
            {
                return(true);
            }

            var    writeReader   = new StringReader(toWrite);
            var    compareReader = new StringReader(toCompare);
            string writeLine;
            string compareLine;

            do
            {
                writeLine   = writeReader.ReadLine();
                compareLine = compareReader.ReadLine();

                if (writeLine == null)
                {
                    return(compareLine != null);
                }
                if (compareLine == null)
                {
                    return(true);
                }
            } while (writeLine.CompareTo(compareLine) == 0);

            return(true);
        }