Esempio n. 1
0
        public IPlc plc(string Id)
        {
            PlcBase plc = plcs.Find(item => item.Id == Id);

            if (plc != null)
            {
                return(plc);
            }
            throw new Exception("PLC\"" + Id + "\"不存在");
        }
Esempio n. 2
0
        public void LoadConfig()
        {
            hardwares = Configuration.GetConfig <List <CommunicationBase> >(nameof(hardwares));
            #region RESET
            foreach (var item in plcs)
            {
                item.ConnectionChangeEvent -= HardWareConnectionChanged;
                HardWareConnectionChanged(item, false);
                item.Close();
            }
            plcs.Clear();
            foreach (var item in scanners)
            {
                item.ConnectionChangeEvent -= HardWareConnectionChanged;
                HardWareConnectionChanged(item, false);
                item.Close();
            }
            scanners.Clear();

            #endregion
            foreach (var item in hardwares)
            {
                var      assembly     = Assembly.GetAssembly(typeof(CommunicationBase));
                var      type         = assembly.GetType("Communication." + item.HardwareId + "." + item.Kind + "`1");
                var      instanceType = type.MakeGenericType(assembly.GetType("Communication." + item.Mode));
                object[] parameters   = new object[4];
                parameters[0] = item.Id;
                parameters[1] = item.ParamStr;
                parameters[2] = item.ParamInt;
                parameters[3] = item.Timeout;
                switch (item.HardwareId)
                {
                case "Plc":
                    PlcBase plc = (PlcBase)Activator.CreateInstance(instanceType, parameters);
                    plc.ConnectionChangeEvent += HardWareConnectionChanged;
                    Task.Run(() => { plc.Connect(); });
                    plcs.Add(plc);
                    break;

                case "Scanner":
                    ScannerBase scanner = (ScannerBase)Activator.CreateInstance(instanceType, parameters);
                    scanner.ConnectionChangeEvent += HardWareConnectionChanged;
                    Task.Run(() => { scanner.Connect(); });
                    //scanner.Connect();
                    scanners.Add(scanner);
                    break;

                default:
                    break;
                }
            }
            OnPlcChanged();
            OnScannerChanged();
        }