Exemple #1
0
        /// <summary>
        ///
        /// </summary>
        private void ProcessRead()
        {
            mComm.Take();
            try
            {
                foreach (var vv in mInputStatusPackage)
                {
                    var result = mMaster.ReadInputs((byte)mData.Id, vv.Key, vv.Value);
                    if (result != null && result.Length == vv.Value)
                    {
                        for (ushort i = 0; i < vv.Value; i++)
                        {
                            ushort addr = (ushort)(vv.Key + i);
                            if (this.mInputStatusTags.ContainsKey(addr))
                            {
                                UpdateValue(mInputStatusTags[addr], result[i]);
                            }
                        }
                    }
                }

                foreach (var vv in mCoilStatusPackage)
                {
                    var result = mMaster.ReadCoils((byte)mData.Id, vv.Key, vv.Value);

                    if (result != null && result.Length == vv.Value)
                    {
                        for (ushort i = 0; i < vv.Value; i++)
                        {
                            ushort addr = (ushort)(vv.Key + i);
                            if (this.mCoilStatusTags.ContainsKey(addr))
                            {
                                UpdateValue(mCoilStatusTags[addr], result[i]);
                            }
                        }
                    }
                }

                foreach (var vv in mInputRegistorPackage)
                {
                    var result = mMaster.ReadInputRegisters((byte)mData.Id, vv.Key, vv.Value);
                    if (result != null && result.Length == vv.Value)
                    {
                        for (ushort i = 0; i < vv.Value; i++)
                        {
                            ushort addr = (ushort)(vv.Key + i);
                            UpdateRegistor(addr, i, result, mInputRegistorTags);
                        }
                    }
                }

                foreach (var vv in mHoldtRegistorPackage)
                {
                    var result = mMaster.ReadHoldingRegisters((byte)mData.Id, vv.Key, vv.Value);
                    if (result != null && result.Length == vv.Value)
                    {
                        for (ushort i = 0; i < vv.Value; i++)
                        {
                            ushort addr = (ushort)(vv.Key + i);
                            UpdateRegistor(addr, i, result, mHoldRegistorTags);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LoggerService.Service.Warn("Modbus ip Driver", ex.Message);
            }
            mComm.Release();
        }
Exemple #2
0
 public void SetOut(string Address, string Value)
 {
     try
     {
         ushort adr     = Convert.ToUInt16(Address);
         bool   boolVal = false;
         if (bool.TryParse(Value, out boolVal))
         {
             bool[] Response;
             try
             {
                 lock (Master)
                 {
                     Master.WriteSingleCoil(_Cfg.slaveID, adr, boolVal);
                 }
             }
             catch
             {
                 throw new Exception(this._Cfg.DeviceName + " connection error!");
             }
             lock (Master)
             {
                 Response = Master.ReadCoils(_Cfg.slaveID, adr, 1);
             }
             bool org;
             if (DOUT.TryGetValue(adr, out org))
             {
                 if (!org.Equals(Response[0]))
                 {
                     DOUT.TryUpdate(adr, Response[0], org);
                     _Report.On_Data_Chnaged(_Cfg.DeviceName, "DOUT", adr.ToString(), org.ToString(), Response[0].ToString());
                 }
             }
             else
             {
                 DOUT.TryAdd(adr, Response[0]);
                 _Report.On_Data_Chnaged(_Cfg.DeviceName, "DOUT", adr.ToString(), "N/A", Response[0].ToString());
             }
         }
         else
         {
             ushort[] Response2;
             try
             {
                 lock (Master)
                 {
                     Master.WriteSingleRegister(_Cfg.slaveID, adr, Convert.ToUInt16(Value));
                 }
             }
             catch
             {
                 throw new Exception(this._Cfg.DeviceName + " connection error!");
             }
             lock (Master)
             {
                 Response2 = Master.ReadHoldingRegisters(_Cfg.slaveID, adr, 1);
             }
             ushort org;
             if (AOUT.TryGetValue(adr, out org))
             {
                 if (!org.Equals(Response2[0]))
                 {
                     AOUT.TryUpdate(adr, Response2[0], org);
                     _Report.On_Data_Chnaged(_Cfg.DeviceName, "DOUT", adr.ToString(), org.ToString(), Response2[0].ToString());
                 }
             }
             else
             {
                 AOUT.TryAdd(adr, Response2[0]);
                 _Report.On_Data_Chnaged(_Cfg.DeviceName, "DOUT", adr.ToString(), "N/A", Response2[0].ToString());
             }
         }
     }
     catch (Exception e)
     {
         logger.Error(e.StackTrace);
     }
 }
Exemple #3
0
            //public ushort[] ReadInputRegisters(byte slaveID, ushort coilAddress)
            //{

            //    ushort[] ussReadRegisters = Master.ReadInputRegisters(slaveID, coilAddress, DigitalInputQuantity);
            //    ushort[] ussReadConvert = new ushort[(int)DigitalInputQuantity];


            //    for (int i = 0; i <= ussReadRegisters.Length; i++)
            //    {
            //        if (ussReadRegisters[0] != 0)
            //        {
            //            double value = double.Parse((((int)ussReadRegisters[i] / 4096) + 4) / 1000);
            //            ussReadConvert(i) = value.ToString("0.000");
            //        }
            //    }


            //    return
            //}

            public ushort[] ReadHoldingRegisters(byte slaveID, ushort coilAddress)
            {
                return(Master.ReadHoldingRegisters(slaveID, coilAddress, DigitalInputQuantity));
            }