public RegisterNumber(DeviceBlock deviceBlock, RegisterSettings settings, SetNumberValueDelegate setValue, GetNumberValueDelegate getValue = null) : base(deviceBlock, settings) { UseScale = false; _ScaleFactor = 1; Inserter = null; String defaultValue = Settings.RegisterValue; if (defaultValue != null) RegisterValueNumber = new RegisterValueNumber(this, defaultValue); if (RegisterValueNumber != null) { HasFixedValue = true; MappedToRegisterData &= (Device.Params.Protocol.Type == ProtocolSettings.ProtocolType.Modbus); _Value = RegisterValueNumber.ValueDecimal; } else HasFixedValue = false; SetNumberValueInternal = setValue; GetNumberValueInternal = getValue; UseScale = settings.UseScale; ScaleValueType = settings.ScaleValueType; if (UseScale) _ScaleFactor = 1 / settings.DefaultScale; LoadExtractor(settings.Extractor); LoadInserter(settings.Inserter); }
public RegisterBytes(DeviceBlock deviceBlock, RegisterSettings settings, SetBytesValueDelegate setValue, GetBytesValueDelegate getValue = null) : base(deviceBlock, settings) { String defaultValue = Settings.RegisterValue; if (defaultValue != null) RegisterValueBytes = new RegisterValueBytes(this, defaultValue); if (RegisterValueBytes != null) { HasFixedValue = true; MappedToRegisterData &= (Device.Params.Protocol.Type == ProtocolSettings.ProtocolType.Modbus); _Value = RegisterValueBytes.ValueBytes; } else { HasFixedValue = false; _Value = null; } SetBytesValueInternal = setValue; GetBytesValueInternal = getValue; LoadExtractor(settings.Extractor); LoadInserter(settings.Inserter); }
protected Register(DeviceBlock deviceBlock, RegisterSettings settings) { //SendBufferStartPos = 0; //ReceiveBufferStartPos = 0; PayloadPosition = settings.Position; Name = settings.Name; Content = settings.Content; Settings = settings; DeviceBlock = deviceBlock; Device = deviceBlock.Device; ValueType = settings.Type; Message = settings.Message; BindingName = settings.Binding; Binding = DeviceBlock.Conversation.GetVariable(BindingName); if (Binding == null) { BoundToSend = false; BoundToRead = false; BoundToFind = false; BoundToExtract = false; } else { bool res = DeviceBlock.Conversation.GetVariableUsage(BindingName, out BoundToSend, out BoundToRead, out BoundToFind, out BoundToExtract); if (!res) LogMessage("Register Constructor - Variable: " + BindingName + " - not used in conversation: " + DeviceBlock.Conversation, LogEntryType.ErrorMessage); } MappedToRegisterData = (DeviceBlock.GetType() == typeof(DeviceBlock_Modbus) && settings.Id.HasValue) || (DeviceBlock.GetType() != typeof(DeviceBlock_Modbus) && BindingName == ""); //IsContent = Content != ""; StartRegister = settings.Id.HasValue ? settings.Id.Value : (UInt16)0; RegisterCount = settings.RegisterCount; UInt16? size = settings.Size; Size = size.HasValue ? size.Value : (UInt16)(RegisterCount * 2); FixedSize = settings.Size; IsAlarmFlag = settings.IsAlarmFlag; IsAlarmDetail = settings.IsAlarmDetail; IsErrorFlag = settings.IsErrorFlag; IsErrorDetail = settings.IsErrorDetail; IsHexadecimal = settings.IsHexadecimal; IsCString = settings.IsCString; LoadValueList(); }
protected internal Register GetRegister(DeviceBlock block, RegisterSettings settings) { String itemName = settings.Content; if (itemName != "") { VariableEntry var = FindVariable(itemName); if (var != null) { if (var.GetType() == typeof(VariableEntry_Numeric)) return new RegisterNumber(block, settings, ((VariableEntry_Numeric)var).SetValueDelegate, ((VariableEntry_Numeric)var).GetValueDelegate); else if (var.GetType() == typeof(VariableEntry_String)) return new RegisterString(block, settings, ((VariableEntry_String)var).SetValueDelegate, ((VariableEntry_String)var).GetValueDelegate); else if (var.GetType() == typeof(VariableEntry_Bytes)) return new RegisterBytes(block, settings, ((VariableEntry_Bytes)var).SetValueDelegate, ((VariableEntry_Bytes)var).GetValueDelegate); } // some devices do not need external exposure of the Register entries - eg CC128 // LogMessage("Device.GetRegister - Cannot find 'Content': " + itemName, LogEntryType.Trace); } RegisterSettings.RegisterValueType type = settings.Type; if (type == RegisterSettings.RegisterValueType.rv_bytes) return new RegisterBytes(block, settings, null); if (type == RegisterSettings.RegisterValueType.rv_string) return new RegisterString(block, settings, null); return new RegisterNumber(block, settings, null); }
private void CommonConstruction() { ExitOnSuccess = ActionSettings.ExitOnSuccess; ExitOnFailure = ActionSettings.ExitOnFailure; if (ExitOnSuccess || ExitOnFailure) ContinueOnFailure = true; else ContinueOnFailure = ActionSettings.ContinueOnFailure; DeviceBlock = FindBlock(); LoadActions(); LoadParameters(); }
public DeviceBlock FindBlock() { // return local block if present if (DeviceBlock != null) return DeviceBlock; string blockName = ActionSettings.BlockName; if (blockName != "") { DeviceBlock = Device.FindBlock(blockName); if (DeviceBlock == null) throw new Exception("AlgorithmAction - Cannot find target block: '" + blockName + "'"); } else if (ParentAction != null) // climb the parent tree DeviceBlock = ParentAction.FindBlock(); else DeviceBlock = null; return DeviceBlock; }