コード例 #1
0
        private void ConnectServer()
        {
            try
            {
                switch (_Cfg.ConnectionType)
                {
                case "Socket":
                    try
                    {
                        _Report.On_Connection_Status_Report(_Cfg.DeviceName, "Connecting");
                        tt = new TcpClient(_Cfg.IPAdress, _Cfg.Port);

                        Master = Modbus.Device.ModbusIpMaster.CreateIp(tt);
                        _Report.On_Connection_Status_Report(_Cfg.DeviceName, "Connected");
                    }
                    catch (Exception e)
                    {
                        _Report.On_Connection_Error(_Cfg.DeviceName, e.StackTrace);
                        _Report.On_Connection_Status_Report(_Cfg.DeviceName, "Connection_Error");
                        return;
                    }
                    break;
                }
                Master.Transport.Retries     = _Cfg.Retries;
                Master.Transport.ReadTimeout = _Cfg.ReadTimeout;

                Thread ReceiveTd = new Thread(Polling);
                ReceiveTd.IsBackground = true;
                ReceiveTd.Start();
            }
            catch (Exception e)
            {
                logger.Error(e.StackTrace);
            }
        }
コード例 #2
0
 public ICPcon(ushort digitalInputQuantity, Modbus.Device.ModbusIpMaster master)
 {
     try
     {
         DigitalInputQuantity = digitalInputQuantity;
         Master = master;
         Master.Transport.Retries     = 0;
         Master.Transport.ReadTimeout = 1500;
     }
     catch (Exception ex)
     {
         throw new Exception(ex.ToString());
     }
 }
コード例 #3
0
ファイル: ModbusIpDriver.cs プロジェクト: cdy816/Spider
        /// <summary>
        ///
        /// </summary>
        public override void Init()
        {
            base.Init();

            int clen = -1, cstart = -1, ilen = -1, istart = -1, irlen = -1, irstart = -1, hrlen = -1, hrstart = -1;

            foreach (var vv in mCachTags)
            {
                var    dtmp = vv.Key.ToLower().Split(new char[] { ':' });
                ushort addr = ushort.Parse(dtmp[1]);

                if (dtmp[0] == ("cs"))
                {
                    //Coil status
                    if (cstart == -1)
                    {
                        cstart = addr;
                        clen   = 1;
                    }
                    else
                    {
                        if ((addr - cstart + 1) > mData.PackageLen)
                        {
                            mCoilStatusPackage.Add((ushort)cstart, (ushort)clen);
                            cstart = -1;
                        }
                        else
                        {
                            clen = addr - cstart + 1;
                        }
                    }
                    if (!mCoilStatusTags.ContainsKey(addr))
                    {
                        mCoilStatusTags.Add(addr, vv.Value);
                    }
                }
                else if (dtmp[0] == ("is"))
                {
                    //Input status
                    if (istart == -1)
                    {
                        istart = addr;
                        ilen   = 1;
                    }
                    else
                    {
                        if ((addr - istart + 1) > mData.PackageLen)
                        {
                            mInputStatusPackage.Add((ushort)istart, (ushort)ilen);
                            istart = -1;
                        }
                        else
                        {
                            ilen = addr - istart + 1;
                        }
                    }
                    if (!mInputStatusTags.ContainsKey(addr))
                    {
                        mInputStatusTags.Add(addr, vv.Value);
                    }
                }
                else if (dtmp[0] == ("ir"))
                {
                    ushort len = ushort.Parse(dtmp[2]);
                    //Input registor

                    if (irstart == -1)
                    {
                        irstart = addr;
                        irlen   = len;
                    }
                    else
                    {
                        if ((addr - irstart + len) > mData.PackageLen)
                        {
                            mInputRegistorPackage.Add((ushort)irstart, (ushort)irlen);
                            irstart = -1;
                        }
                        else
                        {
                            irlen = addr - irstart + len;
                        }
                    }
                    if (!mInputRegistorTags.ContainsKey(addr))
                    {
                        mInputRegistorTags.Add(addr, new Tuple <ushort, List <int> >(len, vv.Value));
                    }
                }
                else if (dtmp[0] == ("hr"))
                {
                    //holding registor
                    ushort len = ushort.Parse(dtmp[2]);

                    if (hrstart == -1)
                    {
                        hrstart = addr;
                        hrlen   = len;
                    }
                    else
                    {
                        if ((addr - hrstart + len) > mData.PackageLen)
                        {
                            mHoldtRegistorPackage.Add((ushort)hrstart, (ushort)hrlen);
                            hrstart = -1;
                        }
                        else
                        {
                            hrlen = addr - hrstart + len;
                        }
                    }
                    if (!mHoldRegistorTags.ContainsKey(addr))
                    {
                        mHoldRegistorTags.Add(addr, new Tuple <ushort, List <int> >(len, vv.Value));
                    }
                }
            }

            if (cstart != -1)
            {
                mCoilStatusPackage.Add((ushort)cstart, (ushort)clen);
            }

            if (istart != -1)
            {
                mInputStatusPackage.Add((ushort)istart, (ushort)ilen);
            }

            if (irstart != -1)
            {
                mInputRegistorPackage.Add((ushort)irstart, (ushort)irlen);
            }

            if (hrstart != -1)
            {
                mHoldtRegistorPackage.Add((ushort)hrstart, (ushort)hrlen);
            }

            mComm.EnableTransparentRead(true);
            mMaster = Modbus.Device.ModbusIpMaster.CreateIp(mComm);
        }