private static void UpdateChannel(FreeSCADA.CLServer.ChannelState state, RemoutingChannel channel) { object channelValue = null; Type valueType = Type.GetType(state.Type); if (valueType != null) { channelValue = Convert.ChangeType(state.Value, valueType); } else { channelValue = Convert.ChangeType(state.Value, channel.Type); } ChannelStatusFlags flags = ChannelStatusFlags.Unknown; switch (state.Status) { case FreeSCADA.CLServer.ChannelStatusFlags.Bad: flags = ChannelStatusFlags.Bad; break; case FreeSCADA.CLServer.ChannelStatusFlags.Good: flags = ChannelStatusFlags.Good; break; case FreeSCADA.CLServer.ChannelStatusFlags.NotUsed: flags = ChannelStatusFlags.NotUsed; break; } channel.DoUpdate(channelValue, state.ModifyTime, flags); }
private void UpdateChannelFunc(IChannel channel) { if (statusFlags != channel.StatusFlags) { statusFlags = channel.StatusFlags; (ToolTip as ToolTip).Content = "Variable: " + channel.PluginId + "." + channel.Name + ", Status: " + channel.Status; } this.InvalidateVisual(); }
public virtual void DoUpdate(object value, DateTime externalTime, ChannelStatusFlags status) { try { InternalSetValue(value, externalTime, status); } catch (Exception e) { Env.Current.Logger.LogError(e.Message); } }
public BaseChannel(string name, bool readOnly, ICommunicationPlug plugin, Type type) { this.name = name; this.readOnly = readOnly; this.plugin = plugin; this.type = type; defaultValue = type.IsValueType ? Activator.CreateInstance(type) : null; if (type == typeof(string)) { defaultValue = ""; } value = defaultValue; modifyTime = DateTime.MinValue; status = ChannelStatusFlags.Unknown; }
protected void InternalSetValue(object value, DateTime externalTime, ChannelStatusFlags status) { bool fire = false; lock (this) { object old = this.value; if (value != null) { this.value = value; this.type = value.GetType(); this.status = status; } else { this.value = defaultValue; this.type = defaultValue.GetType(); this.status = ChannelStatusFlags.Unknown; } modifyTime = externalTime; if (old != null) { fire = !old.Equals(this.value); } else { fire = true; } } if (fire) { FireValueChanged(); } }
public virtual void DoUpdate(object value, DateTime externalTime, ChannelStatusFlags status) { InternalSetValue(value, externalTime, status); }