Beispiel #1
0
        public bool WriteIOTag(string tagAddress, enuOnOff value)
        {
            bool rtv = true;
            string res;
            int rtc;
            byte[] result = null;

            //if (!master.connected)
            //    Start();

            try
            {
                if (master.connected)//PAx prylar
                {
                    bool onOff = value == enuOnOff.SetOn;
            //                    byte[] result = null;

                    int ID = ++transactionId;
                    int StartAddress = 0;

                    // check if address is word.bit format
                    if (tagAddress.Contains('.'))
                    {
                        int bit = 0;
                        int word = 0;
                        int.TryParse(tagAddress.Substring(tagAddress.IndexOf('.', 0) + 1), out bit);
                        int.TryParse(tagAddress.Substring(0, tagAddress.IndexOf('.')), out word);
                        StartAddress = (word) * 16 + (15 - bit);
                    }
                    else
                    {
                        StartAddress = System.Convert.ToInt32(tagAddress);
                    }
                    master.WriteSingleCoils(ID, StartAddress, onOff, ref result);
                }
            }
            catch (Exception ex)
            {
                Stop();
                //started = false;
                rtv = false;
                //Added 2011-01-25, PaCl
                throw new Exception(new StringBuilder("Error writing io tag ").Append(tagAddress).Append(": ").Append(ex.Message).ToString());
            }
            rtv = (result != null) && (result.Length > 0);
            return rtv;
        }
Beispiel #2
0
        public bool ReadIOTag(string tagAddress, bool isInput, out enuOnOff value)
        {
            int StartAddress = 0;
            byte Length = 1;
            byte[] result = null;
            Tiara.IO.ModBusTCPClient.enuOnOff onOff;
            bool rtv = false;

            try
            {
                if (master.connected)//PAx prylar
                {
                    int ID = ++transactionId;

                    // check if address is word.bit format
                    if (tagAddress.Contains('.'))
                    {
                        int bit = 0;
                        int word = 0;
                        int.TryParse(tagAddress.Substring(tagAddress.IndexOf('.', 0) + 1), out bit);
                        int.TryParse(tagAddress.Substring(0, tagAddress.IndexOf('.')), out word);
                        StartAddress = (word) * 16 + (15 - bit);
                    }
                    else
                    {
                        StartAddress = System.Convert.ToInt32(tagAddress);
                    }
                    //result = new byte[1];
                    if (isInput)
                        master.ReadDiscreteInputs(ID, StartAddress, Length, ref result);
                    else
                        master.ReadCoils(ID, StartAddress, Length, ref result);

                }

            }
            catch (Exception ex)
            {
                ////////////////// Stop();KAnske så
                //started = false;
                rtv = false;
                //Added 2011-01-25, PaCl
                throw new Exception(new StringBuilder("Error reading io tag ").Append(tagAddress).Append(": ").Append(ex.Message).ToString());
            }
            if (result != null && result.Length > 0)
            {
                // Maska ut LSB ur svaret (ADAM returnerade 8 bitar
                // trots att man bara läste en).
                int iResultLsb = (int)result[0] & 1;
                value = (enuOnOff)((iResultLsb == 1) ? 1 : 0);
                rtv = true;
            }
            else
                value = (enuOnOff)0;

            return rtv;
        }