Example #1
0
        public async Task <Result> TryOpenConnectionAsync(IDeviceLogger deviceLogger)
        {
            try
            {
                IStreamResource     streamResource;
                IModbusSerialMaster modbusSerialMaster = null;
                await Task.Run(() =>
                {
                    streamResource     = _connectionManager.GetSerialPortAdapter(PortName);
                    modbusSerialMaster = ModbusSerialMaster.CreateRtu(streamResource);
                });

                if (modbusSerialMaster != null)
                {
                    _currentModbusMaster?.Dispose();
                    _currentModbusMaster = modbusSerialMaster;
                }
                else
                {
                    throw new Exception();
                }
                _slaveId      = SlaveId;
                _deviceLogger = deviceLogger;

                _isConnectionLost = false;
                _lastQuerySucceed = true;
            }
            catch (Exception e)
            {
                return(Result.Create(e));
            }
            return(Result.Create(true));
        }
Example #2
0
 public DeviceManager(IDeviceLogger defaultDeviceLogger)
 {
     RegisterHandler <WebRequestHandler>();
     if (defaultDeviceLogger != null)
     {
         RegisterHandler(defaultDeviceLogger);
     }
 }
Example #3
0
 public void DeleteLogger(IDeviceLogger logger)
 {
     _deviceLoggers.Remove(logger);
     if (logger?.LogMessageAriseAction != null)
     {
         logger.LogMessageAriseAction -= OnLogMessageArise;
     }
     LoggersChangedAction?.Invoke();
 }
Example #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="BaseStateMachine" /> class.
 /// </summary>
 /// <param name="deviceLogger">The logger MGR.</param>
 public BaseStateMachine(IDeviceLogger deviceLogger)
 {
     this.logger              = deviceLogger.CreateComponentLogger(className);
     this.state               = GuiState.DISCONNECTED;
     this.stateMessage        = "Not Connected";
     this.CurrentState        = this.State_None;
     this.eventExecLock       = new object();
     this.statusUpdateLockObj = new object();
 }
Example #5
0
        public void AddLogger(IDeviceLogger logger, string subjectName)
        {
            logger.SetLoggerSubject(subjectName);
            if (_deviceLoggers.Contains(logger))
            {
                return;
            }
            _deviceLoggers.Add(logger);

            logger.LogMessageAriseAction += OnLogMessageArise;
            LoggersChangedAction?.Invoke();
        }
Example #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="StateMachine{T}"/> class.
        /// </summary>
        /// <param name="deviceLogger">The logger MGR.</param>
        public StateMachine(IDeviceLogger deviceLogger)
        {
            if (deviceLogger == null)
            {
                throw new ArgumentNullException("deviceLogger", "Device Logger cannot be null");
            }

            this.logger              = deviceLogger.CreateComponentLogger(className);
            this.state               = GuiState.DISCONNECTED;
            this.internalStateEnum   = default(T);
            this.stateMessage        = "Not Connected";
            this.currentState        = this.StateNone;
            this.eventExecLock       = new object();
            this.statusUpdateLockObj = new object();
            this.isDisposed          = false;
        }
Example #7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DatabaseServer" /> class.
        /// </summary>
        /// <param name="deviceLogger">The logger MGR.</param>
        /// <param name="dbConfig">The database configuration.</param>
        /// <param name="timerSync">The timer synchronize.</param>
        public DatabaseServer(IDeviceLogger deviceLogger, DatabaseSettings dbConfig, ISynchronizeInvoke timerSync)
            : base(deviceLogger)
        {
            this.dbConfig    = dbConfig;
            this.stringUtils = new StringUtils();
            this.isDisposed  = false;

            this.State               = GuiState.FAULT;
            this.StateMessage        = "Not Connected.";
            this.deviceLogger        = deviceLogger;
            this.logger              = deviceLogger.CreateComponentLogger(className);
            this.dbConn              = null;
            this.settingsLock        = new object();
            this.connectionString    = string.Empty;
            this.oldConnectionString = string.Empty;

            // Create tables ----------------------------------------------------------------
            this.locationsTable  = new LocationTable.LocationTable(this, this.deviceLogger);
            this.messageTable    = new MessageTable.MessageTable(this, this.deviceLogger);
            this.transformTable  = new TransformTable.TransformTable(this, this.deviceLogger);
            this.inspectionTable = new InspectionTable.InspectionTable(this, this.deviceLogger);
            this.resultTable     = new ResultTable.ResultTable(this, this.deviceLogger);

            // Route Table TWEs when you need to update banner
            this.locationsTable.TweCallback  += this.Table_tweCallback;
            this.messageTable.TweCallback    += this.Table_tweCallback;
            this.transformTable.TweCallback  += this.Table_tweCallback;
            this.inspectionTable.TweCallback += this.Table_tweCallback;
            this.resultTable.TweCallback     += this.Table_tweCallback;

            this.pingTimeout    = 3;
            this.commandTimeout = 5;

            this.LoadDatabaseSettings();

            this.dbConfig.SettingsChanged += this.DbConfig_SettingsChanged;
            this.terminationRequestedEvent = new ManualResetEvent(false);
            this.dbConLockObj = new object();

            this.runnerThread = new Thread(new ThreadStart(this.StartDatabaseServer));
            this.runnerThread.Start();

            // this.StartStateMachine(DatabaseState.State_Connect, this.State_Connect, true, timerSync);
        }
Example #8
0
        public async Task <Result> TryOpenConnectionAsync(IDeviceLogger currentDeviceLogger)
        {
            try
            {
                await Task.Run(() =>
                {
                    TcpClient client = new TcpClient(IpAddress, Port);

                    _currentModbusMaster = ModbusIpMaster.CreateIp(client);

                    _currentDeviceLogger = currentDeviceLogger;
                });

                return(Result.Create(true));
            }
            catch (Exception e)
            {
                return(Result.Create(e));
            }
        }
Example #9
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Plc" /> class.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="deviceLogger">The device logger</param>
        /// <param name="configurationManager">The configuration manager.</param>
        public Plc(string name, IDeviceLogger deviceLogger, IConfigurationManager configurationManager)
            : base(deviceLogger)
        {
            this.Name         = name;
            this.deviceLogger = deviceLogger ?? throw new ArgumentNullException("deviceLogger", "Device Logger cannot be null");
            this.logger       = deviceLogger.CreateComponentLogger(className);
            this.StateMessage = "PLC is not enabled";
            this.State        = GuiState.FAULT;

            bool success = IPAddress.TryParse("0.0.0.0", out this.ipAddress);

            this.isDisposed        = false;
            this.port              = 0;
            this.missedHeartbeats  = 0;
            this.plcDataStream     = string.Empty;
            this.plcDataStreamLock = new object();

            this.regexHashEventSystem = new Regex("##(\\w*) (\\w*)(.*)");
            this.regexfindParams      = new Regex(" (([\\w]*)=((\"[a-zA-Z0-9._\\ ]*\")|(0x[0-9]*))|(\\w*))");

            delay = 0;
            this.configurationManager = configurationManager ?? throw new ArgumentNullException("configurationManager", "ConfigurationManager cannot be null");

            this.plcSettings = configurationManager.PLCSettings;
            configurationManager.PLCSettings.SettingsChanged += this.PLCSettings_SettingsChanged;
            success = IPAddress.TryParse("0.0.0.0", out this.defaultIPAddress);

            success   = IPAddress.TryParse(this.plcSettings.IPAddress, out this.ipAddress);
            this.port = this.plcSettings.Port;

            this.plcTxFifo = new ConcurrentBlockingFifo <byte[]>();

            this.plcInputEventData  = new PlcInputEventData();
            this.plcOutputEventData = new PlcOutputEventData();
            this.plcSystemEventData = new PlcSystemEventData();

            this.plcInputEventData.EventDataChanged  += this.PlcInputEventData_EventDataChanged;
            this.plcOutputEventData.EventDataChanged += this.PlcOutputEventData_EventDataChanged;
            this.plcSystemEventData.EventDataChanged += this.PlcSystemEventData_EventDataChanged;
            this.plcSystemEventData.HeartbeatEvent   += this.PlcSystemEventData_HeartbeatEvent;
        }
Example #10
0
 public void RegisterHandler(IDeviceLogger handler)
 {
     DeviceLogHandlers.Add(handler);
 }
Example #11
0
 public Task <Result> TryOpenConnectionAsync(IDeviceLogger currentDeviceLogger)
 {
     return(Task.FromResult <Result>(true));
 }
Example #12
0
 public async Task <bool> TryOpenConnectionAsync(bool isThrowingException, IDeviceLogger currentDeviceLogger)
 {
     return(false);
 }
Example #13
0
 public void SetLogger(IDeviceLogger currentDeviceLogger)
 {
     _currentDeviceLogger = currentDeviceLogger;
 }
Example #14
0
 public Task <Result> TryOpenConnectionAsync(IDeviceLogger currentDeviceLogger)
 {
     _currentDeviceLogger = currentDeviceLogger;
     return(Task.FromResult(Result.Create(!IsConnectionLost)));
 }