/// <summary> /// 向某个ip发送命令,这里的ip必须是底层可以执行动作的ip /// </summary> /// <param name="ip"></param> /// <param name="action"></param> public void SendAction(string ip, SmAction action) { using (ActionLock.Lock()) { if (ActionClientDict.TryGetValue(ip, out var state)) { try { tcpServer.Send(state, SmParamApi.BuildAlarmPackage(state.ModuleAddr, action)); Logger.Debug($"发送命令 {Enum.GetName(typeof(SmAction), action)} 成功 {ip}"); ActionCache[ip] = SmAction.NoAction; } catch { ActionCache[ip] = action; YUtil.RecoveryTimeout(ScanActionTimer); } } } }
/// <summary> /// 构建报警命令包 /// </summary> /// <param name="addr"></param> /// <param name="operate">可设置打开或者关闭报警</param> /// <param name="aimType"></param> /// <returns></returns> internal static byte[] BuildAlarmPackage(List <byte> addr, SmAction operate, byte aimType = (byte)SmFrame.IndustryAimType) { byte[] sendBytes = new byte[] { (byte)operate }; return(BuildActionPackage(addr, (byte)SmActionFrame.Alarm, sendBytes.ToList(), aimType)); }
/// <summary> /// 构建报警命令报警包 /// </summary> /// <param name="addr"></param> /// <param name="operate">可设置打开或者关闭报警</param> /// <param name="aimType"></param> /// <returns></returns> public static byte[] BuildAlarmPackage(List <byte> addr, SmAction operate, byte aimType = (byte)SmFrame.IndustryAimType) { return(SmPackage.BuildAlarmPackage(addr, operate, aimType)); }