Esempio n. 1
0
        private void Add(bool isReadOnly, ModbusDescription rv)
        {
            mSignals.Add(rv.Signal.Specification.Id, rv);

            // add action for output signals
            if (isReadOnly)
            {
                if (rv.Index > 120)
                {
                    throw new NotImplementedException("index cann't be more than 120");
                }

                return;
            }

            if (rv.Index > kWagoOutputsStart + 120)
            {
                throw new NotImplementedException("index cann't be more than 120");
            }

            if (rv.Index >= kWagoOutputsStart)
            {
                rv.Signal.OnUpdate += SignalUpdated;
            }
        }
Esempio n. 2
0
        /*
         * public void AddFloat(ISignal signal, ushort address, bool isReadOnly = true)
         * {
         *  if (signal == null)
         *      throw new ArgumentNullException("signal");
         *
         *  if (!IsValidAddress(SignalType.Float, address, byte.MaxValue))
         *      throw new ArgumentException();
         *
         *  var rv = new ModbusDescription(signal, SignalType.Float, mOutputData, address, byte.MaxValue, isReadOnly);
         *  mSignals.Add(rv.Signal.Id, rv);
         * }
         *
         * public void AddUint(ISignal signal, ushort address, bool isReadOnly = true)
         * {
         *  if (signal == null)
         *      throw new ArgumentNullException("signal");
         *
         *  if (!IsValidAddress(SignalType.Uint, address, byte.MaxValue))
         *      throw new ArgumentException();
         *
         *  var rv = new ModbusDescription(signal, SignalType.Uint, mOutputData, address, byte.MaxValue, isReadOnly);
         *  mSignals.Add(rv.Signal.Id, rv);
         * }
         */
        #endregion

        internal void AddInternalUshort(ISignal signal, ushort address, bool isReadOnly = true)
        {
            if (signal == null)
            {
                throw new ArgumentNullException("signal");
            }

            if (address > kRegistersLenght)
            {
                throw new ArgumentOutOfRangeException("address", string.Format("address cann't be more than {0}", kRegistersLenght));
            }

            if (!IsValidAddress(SignalType.Ushort, address, byte.MaxValue))
            {
                throw new ArgumentException();
            }

            var rv = new ModbusDescription(signal, SignalType.Ushort, address, byte.MaxValue, isReadOnly);

            mSignals.Add(rv.Signal.Specification.Id, rv);

            // add action for output signals
            if (isReadOnly)
            {
                if (rv.Index > 120)
                {
                    throw new NotImplementedException("index cann't be more than 120");
                }

                return;
            }

            if (rv.Index > kWagoOutputsStart + 120)
            {
                throw new NotImplementedException("index cann't be more than 120");
            }

            if (rv.Index >= kWagoOutputsStart)
            {
                rv.Signal.OnUpdate += SignalUpdated;
            }
        }
Esempio n. 3
0
        internal void AddDiscreet(ISignal signal, ushort address, byte bit, bool isReadOnly = true)
        {
            if (signal == null)
            {
                throw new ArgumentNullException("signal");
            }

            if (address > kRegistersLenght)
            {
                throw new ArgumentOutOfRangeException("address", string.Format("address cann't be more than {0}", kRegistersLenght));
            }

            if (!IsValidAddress(SignalType.Bool, address, bit))
            {
                throw new ArgumentException();
            }

            var rv = new ModbusDescription(signal, SignalType.Bool, address, bit, isReadOnly);

            Add(isReadOnly, rv);
        }