コード例 #1
0
ファイル: ModbusIpDriver.cs プロジェクト: cdy816/Spider
        /// <summary>
        ///
        /// </summary>
        /// <param name="deviceInfo"></param>
        /// <param name="value"></param>
        /// <param name="valueType"></param>
        public override void WriteValue(string deviceInfo, object value, byte valueType)
        {
            if (mComm.IsConnected)
            {
                var dtmp = deviceInfo.Split(new char[] { ':' });

                ushort addr = ushort.Parse(dtmp[1]);
                ushort size = ushort.Parse(dtmp[2]);

                if (dtmp[0].StartsWith("cs"))
                {
                    mMaster.WriteSingleCoil((byte)mData.Id, addr, Convert.ToBoolean(value));
                }
                else if (dtmp[0].StartsWith("hr"))
                {
                    mMaster.WriteMultipleRegisters((byte)mData.Id, addr, GetValue(value, valueType, size));
                }
            }
        }
コード例 #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);
     }
 }
コード例 #3
0
 public void WriteSingleCoil(byte slaveID, ushort coilAddress, bool OnOff)
 {
     Master.WriteSingleCoil(slaveID, coilAddress, OnOff);
 }