Exemplo n.º 1
0
        public void InitializeService(Channel ch)
        {
            try
            {
                lock (this)
                {
                    Channels.Add(ch);



                    if (Channels == null)
                    {
                        return;
                    }
                    // Initialize


                    #region XGT.

                    IPLC_LS_Master PLC_LS = null;
                    switch (ch.ConnectionType)
                    {
                    case "SerialPort":
                        var dis = (DISerialPort)ch;
                        var sp  = new SerialPort(dis.PortName, dis.BaudRate, dis.Parity, dis.DataBits, dis.StopBits);
                        sp.Handshake = dis.Handshake;
                        var spAdaper = new SerialPortAdapter(sp);
                        PLC_LS = new LS_CNET();
                        PLC_LS.AllSerialPortAdapter(spAdaper);
                        _cnet.Add(ch.ChannelName, (LS_CNET)PLC_LS);
                        break;

                    case "Ethernet":
                        var die = (DIEthernet)ch;
                        PLC_LS = new LS_FENET(die.IPAddress, die.Port, 500);
                        FENET.Add(ch.ChannelName, (LS_FENET)PLC_LS);
                        break;
                    }

                    #endregion Initialize

                    foreach (var dv in ch.Devices)
                    {
                        foreach (var db in dv.DataBlocks)
                        {
                            foreach (var tg in db.Tags)
                            {
                                TagCollection.Tags.Add(
                                    $"{ch.ChannelName}.{dv.DeviceName}.{db.DataBlockName}.{tg.TagName}", tg);
                            }
                        }
                    }
                }
            }
            catch (CommunicationException ex)
            {
                EventscadaException?.Invoke(this.GetType().Name, ex.Message);
            }
        }
Exemplo n.º 2
0
        public void Connect()
        {
            try
            {
                lock (myLockRead)
                {
                    Console.WriteLine("STARTED: {0}", ++COUNTER);
                    taskArray = new Task[Channels.Count];
                    if (taskArray == null)
                    {
                        throw new NullReferenceException("No Data");
                    }
                    for (var i = 0; i < Channels.Count; i++)
                    {
                        taskArray[i] = new Task((chParam) =>
                        {
                            IPLC_LS_Master PLC_LS = null;
                            var ch = (Channel)chParam;
                            switch (ch.ConnectionType)
                            {
                            case "SerialPort":
                                PLC_LS = _cnet[ch.ChannelName];
                                break;

                            case "Ethernet":
                                PLC_LS = FENET[ch.ChannelName];
                                break;
                            }

                            if (PLC_LS != null)
                            {
                                PLC_LS.Connection();
                                IsConnected = PLC_LS.IsConnected;
                                while (IsConnected)
                                {
                                    foreach (var dv in ch.Devices)
                                    {
                                        foreach (var db in dv.DataBlocks)
                                        {
                                            if (!IsConnected)
                                            {
                                                break;
                                            }
                                            SendPackage(PLC_LS, ch, dv, db);
                                        }
                                    }
                                }
                            }
                        }, Channels[i]);
                        taskArray[i].Start();
                    }
                }
            }
            catch (Exception ex)
            {
                Disconnect();
                EventscadaException?.Invoke(this.GetType().Name + "  XLSIS.Connect", ex.Message);
            }
        }
Exemplo n.º 3
0
        public void SendPackage(IPLC_LS_Master PLC_LS, Channel ch, Device dv, DataBlock db)
        {
            try
            {
                SendDone.WaitOne(-1);
                lock (LockObject)
                {
                    switch (db.DataType)
                    {
                    case "Byte":
                    case "Bit":
                        var bitArys = PLC_LS.BeginRead(dv.SlaveId, db.MemoryType.Substring(0, 1) == "M" ? "MB" : "PB", 2 * db.StartAddress, 2 * db.Length, db.DataBlockName);
                        if (bitArys == null || bitArys.Length == 0)
                        {
                            return;
                        }
                        switch (ch.ConnectionType)
                        {
                        case "SerialPort":
                            //Array.Reverse(bitArys);
                            break;

                        case "Ethernet":
                            Array.Reverse(bitArys);
                            break;
                        }

                        var bitRs = Bit.ToArray(bitArys);
                        if (bitRs.Length > db.Tags.Count)
                        {
                            return;
                        }
                        for (var j = 0; j <= db.Tags.Count - 1; j++)
                        {
                            db.Tags[j].Value     = bitRs[j];
                            db.Tags[j].Visible   = bitRs[j];
                            db.Tags[j].Enabled   = bitRs[j];
                            db.Tags[j].Timestamp = DateTime.Now;
                        }

                        break;

                    case "Word":
                        byte[] wdArys = PLC_LS.BeginRead(dv.SlaveId, db.MemoryType.Substring(0, 1) == "D" ? "DB" : "TB", 2 * db.StartAddress, 2 * db.Length, db.DataBlockName);
                        if (wdArys == null || wdArys.Length == 0)
                        {
                            return;
                        }
                        switch (ch.ConnectionType)
                        {
                        case "SerialPort":

                            break;

                        case "Ethernet":
                            Array.Reverse(wdArys);
                            break;
                        }
                        Word.ToArray(wdArys);

                        if (wdArys.Length > db.Tags.Count)
                        {
                            return;
                        }
                        for (var i = 0; i < db.Tags.Count; i++)
                        {
                            db.Tags[i].Value     = wdArys[i];
                            db.Tags[i].Timestamp = DateTime.Now;
                        }

                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                if (ex.Message == "Hex Character Count Not Even")
                {
                    return;
                }
                IsConnected = false;
                EventscadaException?.Invoke(this.GetType().Name + "  XLSIS.SendPackage", ex.Message);
            }
        }
Exemplo n.º 4
0
        public void WriteTag(string tagName, dynamic value)
        {
            SendDone.Reset();
            var strArrays  = tagName.Split('.');
            var dataPacket = new List <byte>();

            try
            {
                var str = $"{strArrays[0]}.{strArrays[1]}";
                foreach (var ch in Channels)
                {
                    foreach (var dv in ch.Devices)
                    {
                        var bEquals = $"{ch.ChannelName}.{dv.DeviceName}".Equals(str);
                        if (bEquals)
                        {
                            IPLC_LS_Master PLC_LS = null;
                            switch (ch.ConnectionType)
                            {
                            case "SerialPort":
                                PLC_LS = _cnet[ch.ChannelName];
                                break;

                            case "Ethernet":
                                PLC_LS = FENET[ch.ChannelName];
                                break;
                            }
                            if (PLC_LS == null)
                            {
                                return;
                            }
                            var obj = PLC_LS;
                            lock (obj)
                            {
                                byte[] x;
                                switch (TagCollection.Tags[tagName].DataType)
                                {
                                case "Bit":

                                    PLC_LS.BeginWrite(dv.SlaveId, $"{TagCollection.Tags[tagName].Address}", 0, value == "1" ? "1" : "0");
                                    break;

                                case "Word":
                                    string[] dataAsArray = { value };
                                    foreach (var t in dataAsArray)
                                    {
                                        x = BitConverter.GetBytes(Convert.ToInt16(t));
                                        dataPacket.Add(x[1]);
                                        dataPacket.Add(x[0]);
                                    }
                                    PLC_LS.BeginWrite(dv.SlaveId, $"{TagCollection.Tags[tagName].Address}", 0, value);
                                    break;
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                EventscadaException?.Invoke(this.GetType().Name + "XLSIS.WriteTag", ex.Message);
            }
            finally
            {
                SendDone.Set();
            }
        }