Example #1
0
        public bool IsHeartBeatAlive()
        {
            try
            {
                AdsStream       dataStream = new AdsStream(4);
                AdsBinaryReader binReader  = new AdsBinaryReader(dataStream);

                int iHandle = 0;
                int iValue  = 0;
                iHandle = _tcAds.CreateVariableHandle("TwinCAT_SystemInfoVarList._AppInfo.OnlineChangeCnt");

                _tcAds.Read(iHandle, dataStream);
                iValue = binReader.ReadInt32();
                dataStream.Position = 0;
                if (iValue != _onlineChangeCount)
                {
                    _onlineChangeCount = iValue;
                    isHierarchieLoaded = false;
                }
            }
            catch (Exception e)
            {
                DiagnosticWindow.AddToDebug(e.Message);
                return(false);
            }
            return(true);
        }
Example #2
0
        private void BtnRead_Click(object sender, EventArgs e)
        {
            stream = new AdsStream(4);
            reader = new AdsBinaryReader(stream);

            try
            {
                client.Read(htime1, stream);

                txtTime.Text    = (reader.ReadPlcTIME()).ToString();
                stream.Position = 0;

                client.Read(hdate1, stream);
                txtDate.Text    = reader.ReadPlcDATE().ToString();
                stream.Position = 0;

                client.Read(hdate2, stream);
                txtDate2.Text   = reader.ReadPlcDATE().ToString();
                stream.Position = 0;
            }
            catch (Exception err)
            {
                MessageBox.Show("BtnRead " + err.Message);
            }
        }
Example #3
0
        /**
         * Reads one variable from the PLC. The variable must be declared as a REAL.
         *
         * Input:
         * tcAds - TwinCat ADS client object
         * var - The variable name (as a string) to be read from the PLC. E.g "MAIN.var1"
         * vartype - The variable type as declared in the PLC. REAL is the only supported variable type.
         * More types can be added by making changes where appropriate.
         *
         * Output: Floating value representing the value in the PLC.
         *
         **/
        static float readByString(TcAdsClient tcAds, string var, string vartype)
        {
            int hVar = 0;

            try
            {
                hVar = tcAds.CreateVariableHandle(var);
            }
            catch (Exception err)
            {
                Console.WriteLine(err);
            }
            if (vartype == "REAL")
            {
                // creates a stream with a length of 4 byte
                AdsStream    ds = new AdsStream(4);
                BinaryReader br = new BinaryReader(ds);
                tcAds.Read(hVar, ds);
                try
                {
                    tcAds.DeleteVariableHandle(hVar);
                }
                catch (Exception err)
                {
                    Console.WriteLine(err);
                }

                return(br.ReadSingle());
            }
            else
            {
                Console.WriteLine("Error: Variable type not implemented!");
                return(0.0F);
            }
        }
 public bool GetSmokeFlag()
 {
     try
     {
         int          handle_g_SetState = tcclient.CreateVariableHandle("MAIN.smokeFlag");
         AdsStream    dataStream        = new AdsStream(1);
         BinaryReader binRead           = new BinaryReader(dataStream);
         tcclient.Read(handle_g_SetState, dataStream);
         dataStream.Position = 0;
         smokeflag           = binRead.ReadBoolean();
     }
     catch (Exception)
     {
         MessageBox.Show("ADS read value  smokeFlag error");
     }
     return(smokeflag);
 }
Example #5
0
        static void Main(string[] args)
        {
            TcAdsClient     tcClient   = new TcAdsClient();
            AdsStream       dataStream = new AdsStream(4);
            AdsBinaryReader binReader  = new AdsBinaryReader(dataStream);

            int      handle = 0;
            int      iValue = 0;
            int      exValue = 0;
            string   variable, adres;
            DateTime now = DateTime.Now;

            Console.WriteLine("Podaj adres serwera ADS: ");
            adres = Console.ReadLine();
            Console.WriteLine("Podaj  nazwe zmienna do zapysywania w bazie danych: ");
            variable = Console.ReadLine();
            FileStream   File   = new FileStream("data.txt", FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter writer = new StreamWriter(File);

            writer.WriteLine(adres + "  801  " + variable + "    " + now.ToString("F"));

            try
            {
                tcClient.Connect(adres, 801);

                handle = tcClient.CreateVariableHandle(variable);

                Console.WriteLine("Czekam na znak");

                do
                {
                    tcClient.Read(handle, dataStream);
                    iValue = binReader.ReadInt32();
                    dataStream.Position = 0;
                    if (iValue != exValue)
                    {
                        writer.WriteLine(iValue + "    " + now.ToString("F"));
                    }

                    Console.WriteLine("Aktualna wartosc wynosi: " + iValue);

                    exValue = iValue;
                } while (Console.ReadKey().Key.Equals(ConsoleKey.Enter));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message + " xdddd");
            }
            finally
            {
                writer.Close();
                tcClient.DeleteVariableHandle(handle);
                tcClient.Dispose();
            }
            Console.ReadKey();
        }
Example #6
0
 private void ReadElementToStream(string elementPath, AdsStream stream)
 {
     try
     {
         int handle = _twinCatClient.CreateVariableHandle(elementPath);
         try
         {
             _twinCatClient.Read(handle, stream);
         }
         finally
         {
             _twinCatClient.DeleteVariableHandle(handle);
         }
     }
     catch (AdsErrorException ex)
     {
         _logger.ErrorFormat("Could not read element on path '{0}' because of '{1}'.", elementPath, ex.ErrorCode);
         throw;
     }
 }
Example #7
0
        private void button1_Click(object sender, EventArgs e)
        {
            lstArray.Items.Clear();
            client.Read(hintArray, stream);

            for (int i = 0; i < 10; i++)
            {
                lstArray.Items.Add(Reader.ReadInt16());
            }
            button1.Enabled = false;
            // client.ReadAny(hdintArray1, typeof(int), new int[] { 40 });
            //??  how to read DINT array from plc by ReadAny method  ??
        }
        public int ReadInt(string VarAdress)
        {
            int result = 0;

            try
            {
                hVar = TwinCat3Client.CreateVariableHandle(VarAdress);
                AdsStream    ADSdataStream = new AdsStream(4);
                BinaryReader binRead       = new BinaryReader(ADSdataStream);
                TwinCat3Client.Read(hVar, ADSdataStream);
                ADSdataStream.Position = 0;
                result = binRead.ReadInt32();
                TwinCat3Client.DeleteVariableHandle(hVar);
                hVar = 0;
                ADSdataStream.Dispose();
                binRead.Dispose();
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
            return(result);
        }
        //readlreal
        private void button_Click(object sender, EventArgs e)
        {
            TwinCAT_ADS_LOAD();
            try
            {
                hvar = tcclient.CreateVariableHandle("MAIN.adsstru.KL3068_Value_Ch1");
            }
            catch (Exception err)
            {
                MessageBox.Show("get hvar error \n" + err.ToString());
            }
            AdsStream    datastream = new AdsStream(8);
            BinaryReader binread    = new BinaryReader(datastream);

            datastream.Position = 0;

            try
            {
                tcclient.Read(hvar, datastream);
                readlreal     = binread.ReadDouble();
                textBox1.Text = readlreal.ToString("0.00");
                textBox6.Text = Calc_temper(readlreal).ToString("0.00") + "度";
            }

            catch (Exception err)
            {
                MessageBox.Show("read value error");
            }
            try
            {
                tcclient.DeleteVariableHandle(hvar);
            }
            catch (Exception err)
            {
                MessageBox.Show("read delect hvar error");
            }
        }
Example #10
0
        /// <summary>
        /// Parses an PLC array of type T. Supports pointered arrays (POINTER TO ...).
        /// In case of pointered array it will skipp NULL pointers and import only valid instances.
        /// </summary>
        /// <param name="plcPath">The path in PLC to the array.</param>
        /// <param name="twinCatClient">The adsClient instance.</param>
        /// <param name="typeOfElements">Marshall type representation in .NET. See Beckhoff TwinCat 3 manual for an example.</param>
        /// <returns>
        /// Dictionary of imported and converted (.NET type) array elements and their pathes.
        /// </returns>
        public static IEnumerable GetArrayElements(this TcAdsClient twinCatClient, string plcPath, Type typeOfElements)
        {
            var elements = new ArrayList();
            TcAdsSymbolInfoLoader symbolLoader = twinCatClient.CreateSymbolInfoLoader();
            TcAdsSymbolInfo       arraySymbol  = symbolLoader.FindSymbol(plcPath);

            if (arraySymbol == null)
            {
                return(elements);
            }

            var stream = new AdsStream(8);
            var reader = new AdsBinaryReader(stream);

            TcAdsSymbolInfo elementSymbol = arraySymbol.FirstSubSymbol;

            while (elementSymbol != null)
            {
                stream.Position = 0;
                twinCatClient.Read(elementSymbol.IndexGroup, elementSymbol.IndexOffset, stream);

                var pointerValue = PlcSystem.IsX64Mode ? reader.ReadInt64() : reader.ReadInt32();

                if (pointerValue != 0)
                {
                    string plcArrayElementPath = elementSymbol.Name;

                    if (elementSymbol.IsPointer)
                    {
                        plcArrayElementPath = string.Format("{0}^", plcArrayElementPath);
                    }

                    var handle = twinCatClient.CreateVariableHandle(plcArrayElementPath);

                    try
                    {
                        object element = twinCatClient.ReadAny(handle, typeOfElements);
                        elements.Add(element);
                    }
                    finally
                    {
                        twinCatClient.DeleteVariableHandle(handle);
                    }
                }
                elementSymbol = elementSymbol.NextSymbol;
            }

            return(elements);
        }
Example #11
0
        /// <summary>
        /// Parses an PLC array of type T. Supports pointered arrays (POINTER TO ...).
        /// In case of pointered array it will skipp NULL pointers and import only valid instances.
        /// </summary>
        /// <typeparam name="T">
        /// Marshall type representation in .NET. See Beckhoff TwinCat 3 manual for an example.
        /// </typeparam>
        /// <param name="plcPath">The path in PLC to the array.</param>
        /// <param name="symbolLoader">The symbol loader instance.</param>
        /// <param name="twinCatClient">The adsClient instance.</param>
        /// <returns>
        /// Dictionary of imported and converted (.NET type) array elements and their pathes.
        /// </returns>
        public static IDictionary <string, T> GetArrayElementsWithPathes <T>(this TcAdsClient twinCatClient, TcAdsSymbolInfoLoader symbolLoader, string plcPath)
        {
            IDictionary <string, T> array = new Dictionary <string, T>();

            TcAdsSymbolInfo arraySymbol = symbolLoader.FindSymbol(plcPath);

            if (arraySymbol == null)
            {
                return(array);
            }

            var stream = new AdsStream(8);
            var reader = new AdsBinaryReader(stream);

            TcAdsSymbolInfo elementSymbol = arraySymbol.FirstSubSymbol;

            while (elementSymbol != null)
            {
                stream.Position = 0;
                twinCatClient.Read(elementSymbol.IndexGroup, elementSymbol.IndexOffset, stream);

                var pointerValue = PlcSystem.IsX64Mode ? reader.ReadInt64() : reader.ReadInt32();

                if (pointerValue != 0)
                {
                    string plcArrayElementPath = elementSymbol.Name;

                    if (elementSymbol.IsPointer)
                    {
                        plcArrayElementPath = string.Format("{0}^", plcArrayElementPath);
                    }

                    var handle = twinCatClient.CreateVariableHandle(plcArrayElementPath);

                    try
                    {
                        var element = (T)twinCatClient.ReadAny(handle, typeof(T));
                        array.Add(plcArrayElementPath, element);
                    }
                    finally
                    {
                        twinCatClient.DeleteVariableHandle(handle);
                    }
                }
                elementSymbol = elementSymbol.NextSymbol;
            }

            return(array);
        }
Example #12
0
 private void button1_Click(object sender, EventArgs e)          //ReadButton
 {
     try
     {
         Form1_Load(sender, e);
         AdsStream       adsStream = new AdsStream(30);
         AdsBinaryReader reader    = new AdsBinaryReader(adsStream);
         adsClient.Read(varHandle, adsStream);
         textBox1.Text = reader.ReadPlcAnsiString(30).ToString();
         adsClient.Dispose();
     }
     catch (Exception err)
     {
         MessageBox.Show(err.Message);
     }
 }
Example #13
0
        static int[]  ReadTimeArray()
        {
            TimeSpan[]      timearray = new TimeSpan[80];
            int[]           timearray_milisecounds = new int[80];
            AdsStream       adsStream = new AdsStream(4);
            AdsBinaryReader reader    = new AdsBinaryReader(adsStream);

            for (int i = 0; i < timearray.Length; i++)
            {
                ///AdsStream adsStream = new AdsStream(4);
                //AdsBinaryReader reader = new AdsBinaryReader(adsStream);
                adsStream.Position = 0;
                hTimeArray         = ads.CreateVariableHandle("MAIN.time_array[" + (i + 1) + "]");
                ads.Read(hTimeArray, adsStream);
                timearray[i] = reader.ReadPlcTIME();
                timearray_milisecounds[i] = Convert.ToInt32(timearray[i].TotalMilliseconds);
            }
            return(timearray_milisecounds);
        }
Example #14
0
        /// <summary>
        /// Reads a pointer value of the specified <paramref name="typeOfValue"/>.
        /// </summary>
        /// <param name="twinCatClient">The twin cat client to read from.</param>
        /// <param name="plcPath">The path in the PC to the element.</param>
        /// <param name="typeOfValue">The expected type of the value.</param>
        /// <returns>
        /// The value of the element at the specified <paramref name="plcPath"/>.
        /// </returns>
        public static object GetPointerValue(this TcAdsClient twinCatClient, string plcPath, Type typeOfValue)
        {
            TcAdsSymbolInfoLoader symbolLoader = twinCatClient.CreateSymbolInfoLoader();
            TcAdsSymbolInfo       symbol       = symbolLoader.FindSymbol(plcPath);

            if (symbol == null)
            {
                return(null);
            }

            var stream = new AdsStream(8);
            var reader = new AdsBinaryReader(stream);

            stream.Position = 0;
            twinCatClient.Read(symbol.IndexGroup, symbol.IndexOffset, stream);

            var pointerValue = PlcSystem.IsX64Mode ? reader.ReadInt64() : reader.ReadInt32();

            if (pointerValue != 0)
            {
                string plcArrayElementPath = symbol.Name;

                if (symbol.IsPointer)
                {
                    plcArrayElementPath = string.Format("{0}^", plcArrayElementPath);
                }

                var handle = twinCatClient.CreateVariableHandle(plcArrayElementPath);

                try
                {
                    return(twinCatClient.ReadAny(handle, typeOfValue));
                }
                finally
                {
                    twinCatClient.DeleteVariableHandle(handle);
                }
            }

            return(null);
        }
Example #15
0
        private void UpdateSymbols()
        {
            try
            {
                // Read Loaded TcCOM
                labelTcComStatus.Text = tcClient.ReadAnyString(tcCOM_indexGroup, tcCOM_indexOffset, 255, Encoding.Default);

                // Read an UINT32 Value
                tcClientTaskValues.Read(task_indexGroup, task_indexOffset, readStream, 0, 8);
                readStream.Position   = 0;
                labelSignalValue.Text = reader.ReadDouble().ToString();
            }
            catch
            {
                MessageBox.Show("Correct symbols not accessible...");
                if (_cts != null)
                {
                    _cts.Cancel();
                    AdsDisconnect();
                }
            }
        }
Example #16
0
        private void AdsReadFeedBack()
        {
            try
            {
                // Get the ADS return codes and examine for errors
                AdsStream rdStream = new AdsStream(rdLength);
                tcClient.Read(Group, objStatusWord_axis1, rdStream);
                BinaryReader reader = new BinaryReader(rdStream);

                // Read the data from the ADS stream
                Statusword_axis1 = reader.ReadUInt16();
                ModesOfOperationDisplay_axis1   = reader.ReadByte();
                PositionActualValue_axis1       = reader.ReadInt32();
                RealVelocityValue_axis1         = reader.ReadInt32();
                FollowingErrorActualValue_axis1 = reader.ReadUInt16();
                PositionDemandValue_axis1       = reader.ReadInt32();
                //   FollowingErrorActualValue_axis1 = reader.ReadUInt32();
            }
            catch (Exception err)
            {
            }
        }
        /// <summary>
        /// Read item array from TwinCAT Variables
        /// </summary>
        /// <param name="name"></param>
        /// <param name="type"></param>
        /// <param name="arrLength"></param>
        /// <returns></returns>
        public object[] ReadArray(string name, string type, int arrLength)
        {
            object[] values = new object[arrLength];

            int streamLength = StreamLength(type);

            using (AdsStream dataStream = new AdsStream(arrLength * streamLength))
                using (AdsBinaryReader reader = new AdsBinaryReader(dataStream))
                {
                    int varHandle = TcClient.CreateVariableHandle(name);
                    TcClient.Read(varHandle, dataStream);
                    dataStream.Position = 0;

                    for (int i = 0; i < arrLength; i++)
                    {
                        values[i] = ReadObjectFromReader(reader, type);
                    }

                    TcClient.DeleteVariableHandle(varHandle);
                }

            return(values);
        }
Example #18
0
        /// <summary>
        /// Determines whether the specified twinCatClient client is connected and in running state.
        /// </summary>
        /// <param name="twinCatClient">The twin cat client.</param>
        /// <returns>
        ///   <c>true</c> if the specified twin cat client is connected; otherwise, <c>false</c>.
        /// </returns>
        public static bool IsConnected(TcAdsClient twinCatClient)
        {
            var dataStream = new AdsStream(2);

            try
            {
                twinCatClient.Read((int)AdsReservedIndexGroups.DeviceData,
                                   (int)AdsReservedIndexOffsets.DeviceDataAdsState, dataStream);

                var reader   = new BinaryReader(dataStream);
                var plcState = (AdsState)reader.ReadInt16();

                if (plcState == AdsState.Run)
                {
                    return(true);
                }

                return(false);
            }
            catch (AdsErrorException)
            {
                return(false);
            }
        }
Example #19
0
        /**
         * Reads one variable from the PLC. The variable must be declared as a REAL.
         *
         * Input:
         * tcAds - TwinCat ADS client object
         * var - The variable name (as a string) to be read from the PLC. E.g "MAIN.var1"
         * vartype - The variable type as declared in the PLC. REAL is the only supported variable type.
         * More types can be added by making changes where appropriate.
         *
         * Output: Floating value representing the value in the PLC.
         *
        **/
        static float readByString(TcAdsClient tcAds,string var,string vartype)
        {
            int hVar = 0;
            try
            {
                hVar = tcAds.CreateVariableHandle(var);
            }
            catch (Exception err)
            {
                Console.WriteLine(err);
            }
            if (vartype == "REAL")
            {
                // creates a stream with a length of 4 byte
                AdsStream ds = new AdsStream(4);
                BinaryReader br = new BinaryReader(ds);
                tcAds.Read(hVar, ds);
                try
                {
                    tcAds.DeleteVariableHandle(hVar);
                }
                catch (Exception err)
                {
                    Console.WriteLine(err);
                }

                return br.ReadSingle();
            }
            else {
                Console.WriteLine("Error: Variable type not implemented!");
                return 0.0F;
            }
        }
Example #20
0
        public void Read(string name, TcReadHandler handler, int length, int position = 0)
        {
            int handle = GetHandle(name);

            if (length < 1)
            {
                throw new Exception("Reading length must be over 0 in UlTcAdsClient::Read");
            }

            lock (criticalLock)
            {
                using (AdsStream stream = new AdsStream(length))
                {
                    using (AdsBinaryReader reader = new AdsBinaryReader(stream))
                    {
                        try
                        {
                            client.Read(handle, stream);
                            stream.Position = position;

                            handler(reader);
                        }
                        catch (Exception e)
                        {
                            string str = string.Format("Occurred exception({0}) in UlTcAdsClient::Read", e.ToString());
                            throw new Exception(str);
                        }
                    }
                }
            }
        }
        public void ReadTagSynchronously(Tag tag)
        {
            tag.LockValue();

            try
            {
                lock (_lock)
                {
                    if (!_twinCatClient.IsConnected)
                    {
                        try
                        {
                            _twinCatClient.Connect(_adsAddress, _adsPort);
                            _twinCatClient.Timeout = Timeout;
                        }
                        catch (AdsException e)
                        {
                            throw new PlcCommunicationException("Can't read tag synchronously. Connection to PLC failed.", _adsAddress,
                                                                _adsPort.ToString(CultureInfo.InvariantCulture), string.Empty, e);
                        }
                    }
                }

                // try to read UDT
                if (_udtHandler.ContainsKey(tag.DataType))
                {
                    ReadUdt(tag);
                    return;
                }

                var dataStream = new AdsStream(tag.BitSize == 0 ? 81 : tag.BitSize / 8);

                try
                {
                    int handle = _twinCatClient.CreateVariableHandle(tag.FullName());

                    try
                    {
                        _twinCatClient.Read(handle, dataStream);
                    }
                    finally
                    {
                        _twinCatClient.DeleteVariableHandle(handle);
                    }
                }
                catch (AdsErrorException e)
                {
                    throw new PlcCommunicationException("Can't read tag " + tag.FullName(), _adsAddress,
                                                        _adsPort.ToString(CultureInfo.InvariantCulture), string.Empty, e);
                }

                ParseValueFromStream(tag, dataStream);
            }
            catch (Exception e)
            {
                if (_logger != null)
                {
                    _logger.Warn(tag.FullName() + " value change leaded to a unhandled exception", e);
                }

                var exception = new PlcCommunicationException("Can't read tag " + tag.FullName(), _adsAddress,
                                                              _adsPort.ToString(CultureInfo.InvariantCulture), string.Empty, e);
                exception.Tag = tag;
                throw exception;
            }
            finally
            {
                tag.ReleaseValue();
            }
        }