/// <summary>
        /// Modbus RTU slave factory method.
        /// </summary>
        public static ModbusPromiscuousSerialSlave CreateRtu(IStreamResource streamResource)
        {
            if (streamResource == null)
                throw new ArgumentNullException("streamResource");

            return new ModbusPromiscuousSerialSlave(new ModbusRtuTransport(streamResource));
        }
		/// <summary>
		/// Modbus ASCII master factory method.
		/// </summary>
		public static ModbusSerialMaster CreateAscii(IStreamResource streamResource)
		{
			if (streamResource == null)
				throw new ArgumentNullException("streamResource");

			return new ModbusSerialMaster(new ModbusAsciiTransport(streamResource));
		}
        /// <summary>
        /// Modbus ASCII slave factory method.
        /// </summary>
        public static ModbusSerialSlave CreateAscii(byte unitId, IStreamResource streamResource)
        {
            if (streamResource == null)
                throw new ArgumentNullException("streamResource");

            return new ModbusSerialSlave(unitId, new ModbusAsciiTransport(streamResource));
        }
        public PromiscuousListener(IStreamResource streamResource)
        {
            if (streamResource == null)
                throw new ArgumentNullException(nameof(streamResource));

            _streamResource = streamResource;
        }
Exemple #5
0
        /// <summary>
        /// Modbus ASCII master factory method.
        /// </summary>
        public static ModbusSerialMaster CreateAscii(IStreamResource streamResource)
        {
            if (streamResource == null)
                throw new ArgumentNullException("streamResource");

            StreamResourceUtility.InitializeDefaultTimeouts(streamResource);

            return new ModbusSerialMaster(new ModbusAsciiTransport(streamResource));
        }
Exemple #6
0
        /// <summary>
        /// Modbus RTU slave factory method.
        /// </summary>
        public static ModbusSerialSlave CreateRtu(byte unitId, IStreamResource streamResource)
        {
            if (streamResource == null)
                throw new ArgumentNullException("streamResource");

            StreamResourceUtility.InitializeDefaultTimeouts(streamResource);

            return new ModbusSerialSlave(unitId, new ModbusRtuTransport(streamResource));
        }
        public SlaveSimulatorHost(IMasterContext masterContext, 
            IEnumerable<ISlave> slaves, 
            double characterTimeout,
            double messageTimeout)
        {
            if (masterContext == null) throw new ArgumentNullException(nameof(masterContext));
            if (slaves == null) throw new ArgumentNullException(nameof(slaves));

            _masterContext = masterContext;
            _characterTimeout = characterTimeout;
            _messageTimeout = messageTimeout;

            foreach (var slave in slaves)
            {
                _slaves.Add(slave.SlaveId, slave);
            }

            var task = new Task(() =>
            {
                try
                {
                    using (var master = _masterContext)
                    {
                        _port = master.Master.Transport.GetStreamResource();

                        _listener = new PromiscuousListener(_port);

                        _listener.Sample += OnSample;

                        _listener.Listen();
                    }
                }
                catch (Exception ex)
                {
                    //This will exception out when the port is killed
                    Console.WriteLine(ex.ToString());
                }
                finally
                {
                    _listener.Sample -= OnSample;

                    _listener = null;
                }
            });

            //Create the timer
            _timer = new System.Timers.Timer
            {
                AutoReset = false

            };

            _timer.Elapsed += TimerElapsed;

            task.Start();
        }
		internal static string ReadLine(IStreamResource stream)
		{
			var result = new StringBuilder();
			var singleByteBuffer = new byte[1];

			do
			{
				stream.Read(singleByteBuffer, 0, 1);
				result.Append(Encoding.ASCII.GetChars(singleByteBuffer).First());
			} while (!result.ToString().EndsWith(Modbus.NewLine));

			return result.ToString().Substring(0, result.Length - Modbus.NewLine.Length);
		}		
        private static void ExpectReadLine(IStreamResource stream, byte[] frame)
        {
            byte lastByte = 0;

            foreach (var b in frame)
            {
                byte tempByte = b;
                Expect.Call(stream.Read(new byte[] { lastByte }, 0, 1)).Do(((Func<byte[], int, int, int>) delegate(byte[] buf, int offset, int count)
                {
                    Array.Copy(new byte[] { tempByte }, buf, 1);
                    return 1;
                }));

                lastByte = tempByte;
            }
        }
 internal ModbusAsciiTransport(IStreamResource streamResource, IModbusFactory modbusFactory, IModbusLogger logger)
     : base(streamResource, modbusFactory, logger)
 {
     Debug.Assert(streamResource != null, "Argument streamResource cannot be null.");
 }
Exemple #11
0
        internal ModbusTransport(IStreamResource streamResource)
        {
            Debug.Assert(streamResource != null, "Argument streamResource cannot be null.");

            _streamResource = streamResource;
        }
Exemple #12
0
 public IModbusAsciiTransport CreateAsciiTransport(IStreamResource streamResource)
 {
     return(new ModbusAsciiTransport(streamResource, this, Logger));
 }
Exemple #13
0
 internal ModbusAsciiTransport(IStreamResource streamResource)
     : base(streamResource)
 {
     Debug.Assert(streamResource != null, "Argument streamResource cannot be null.");
 }
Exemple #14
0
        /// <summary>
        /// Creates an ASCII master.
        /// </summary>
        /// <param name="factory"></param>
        /// <param name="streamResource"></param>
        /// <returns></returns>
        public static IModbusSerialMaster CreateAsciiMaster(this IModbusFactory factory, IStreamResource streamResource)
        {
            IModbusAsciiTransport transport = factory.CreateAsciiTransport(streamResource);

            return(new ModbusSerialMaster(transport));
        }
Exemple #15
0
 public Stream(IStreamResource streamResource)
 {
     _streamResource = streamResource;
 }
 /// <summary>
 /// Initializes stream read write timeouts to default value if they have not been overridden already.
 /// </summary>
 internal static void InitializeDefaultTimeouts(IStreamResource streamResource)
 {
     streamResource.WriteTimeout = streamResource.WriteTimeout == streamResource.InfiniteTimeout ? Modbus.DefaultTimeout : streamResource.WriteTimeout;
     streamResource.ReadTimeout = streamResource.ReadTimeout == streamResource.InfiniteTimeout ? Modbus.DefaultTimeout : streamResource.ReadTimeout;
 }
 public TestMaster(IStreamResource sr, IModbusMaster modbusMaster)
 {
     _sr           = sr;
     _modbusMaster = modbusMaster;
 }