예제 #1
0
                protected override void EstablishContext()
                {
                    base.EstablishContext();
                    RemapTagsParameter = new RemapTagsParameter
                    {
                        IoDeviceId     = IoDeviceId,
                        DigWriteIds    = new [] { 20 },
                        DigWriteValues = new [] { true },
                        NumWriteIds    = new [] { 30 },
                        NumWriteValues = new [] { 33.3 },
                        DigReadIds     = new [] { DigReadId },
                        NumReadIds     = new [] { NumReadId }
                    };
                    IoDeviceRunTarget.Setup(t => t.GetDigitalValue(DigReadId)).Returns(DigReadValue).Verifiable();
                    IoDeviceRunTarget.Setup(t => t.GetNumericValue(NumReadId)).Returns(NumReadValue).Verifiable();

                    Notifications = new ReadOnlyObservableCollection <Notification>(
                        new ObservableCollection <Notification> {
                        new Notification(DateTime.Now, "Message", "ShortDesc", "LongDesc")
                    });
                    Reporter = new Mock <INotificationReporter>();
                    Reporter.SetupGet(r => r.Notifications).Returns(Notifications);
                    IoDeviceRunTarget.SetupGet(t => t.Reporter).Returns(Reporter.Object);

                    RemapTagsResult = Service.RemapTags(new [] { RemapTagsParameter });
                }
예제 #2
0
        public void Run(IService service)
        {
            var ioDevices  = new List <IoDeviceAbstract>();
            var parameters = new List <RemapTagsParameter>();

            foreach (IoDeviceAbstract ioDevice in _ioDevices)
            {
                RemapTagsParameter parameter = ioDevice.CreateRemapParameter();
                if (parameter == null)
                {
                    continue;
                }
                parameters.Add(parameter);
                ioDevices.Add(ioDevice);
            }

            if (parameters.Any())
            {
                var result = service.RemapTags(parameters.ToArray());
                for (var i = 0; i < ioDevices.Count; i++)
                {
                    ApplyResult(ioDevices[i], result[i]);
                }
            }
        }
예제 #3
0
        private static void Remap(IIoDeviceRunTarget ioDevice, RemapTagsParameter parameter,
                                  RemapTagsResult result)
        {
            bool readOnly = !parameter.DigWriteIds.Any() && !parameter.NumWriteIds.Any();

            if (readOnly)
            {
                ioDevice.EnterReadLock();
            }
            else
            {
                ioDevice.EnterWriteLock();
            }
            try {
                if (!readOnly)
                {
                    WriteDigValues(ioDevice, parameter.DigWriteIds, parameter.DigWriteValues);
                    WriteNumValues(ioDevice, parameter.NumWriteIds, parameter.NumWriteValues);
                }

                result.DigReadValues = ReadDigValues(ioDevice, parameter.DigReadIds);
                result.NumReadValues = ReadNumValues(ioDevice, parameter.NumReadIds);
                result.Notifications = GetNotifications(ioDevice.Reporter.Notifications);
            } finally {
                if (readOnly)
                {
                    ioDevice.ExitReadLock();
                }
                else
                {
                    ioDevice.ExitWriteLock();
                }
            }
        }
예제 #4
0
        public RemapTagsResult[] RemapTags(RemapTagsParameter[] parameters)
        {
            if (NotValid())
            {
                return(null);
            }
            var results = new RemapTagsResult[parameters.Length];

            for (var parameterIndex = 0; parameterIndex < parameters.Length; parameterIndex++)
            {
                RemapTagsParameter parameter = parameters[parameterIndex];
                var result = new RemapTagsResult();
                results[parameterIndex] = result;
                IIoDeviceRunTarget ioDevice = _project.IoDeviceRunTargets[parameter.IoDeviceId];
                Remap(ioDevice, parameter, result);
            }

            return(results);
        }
예제 #5
0
        internal override RemapTagsParameter CreateRemapParameter()
        {
            var parameter = new RemapTagsParameter {
                IoDeviceId = _id
            };

            UpdateDigReadIds(parameter);
            UpdateNumReadIds(parameter);
            UpdateDigWriteData(parameter);
            UpdateNumWriteData(parameter);
            if (parameter.DigReadIds.Any() ||
                parameter.NumReadIds.Any() ||
                parameter.DigWriteIds.Any() ||
                parameter.NumWriteIds.Any())
            {
                return(parameter);
            }
            return(null);
        }
예제 #6
0
        private void UpdateNumReadIds(RemapTagsParameter parameter)
        {
            _readNumericTags.Clear();
            var unReadTags = new List <TagAbstract <double?> >();

            foreach (var tag in _numericTags)
            {
                if (tag.IsRead)
                {
                    _readNumericTags.Add(tag);
                }
                else
                {
                    unReadTags.Add(tag);
                }
            }
            foreach (var tag in unReadTags)
            {
                tag.UpdateValue(null);
            }
            parameter.NumReadIds = _readNumericTags.Select(t => t.Id).ToArray();
        }
예제 #7
0
        private void UpdateDigReadIds(RemapTagsParameter parameter)
        {
            _readDigitalTags.Clear();
            var unReadTags = new List <TagAbstract <bool?> >();

            foreach (var tag in _digitalTags)
            {
                if (tag.IsRead)
                {
                    _readDigitalTags.Add(tag);
                }
                else
                {
                    unReadTags.Add(tag);
                }
            }
            foreach (var tag in unReadTags)
            {
                tag.UpdateValue(null);
            }
            parameter.DigReadIds = _readDigitalTags.Select(t => t.Id).ToArray();
        }
예제 #8
0
        private void UpdateNumWriteData(RemapTagsParameter parameter)
        {
            var ids    = new List <int>();
            var values = new List <double>();

            foreach (var tag in _numericTags)
            {
                if (!tag.IsWritten)
                {
                    continue;
                }
                var value = tag.GetWrittenValue();
                if (!value.HasValue)
                {
                    continue;
                }
                ids.Add(tag.Id);
                values.Add(value.Value);
            }
            parameter.NumWriteIds    = ids.ToArray();
            parameter.NumWriteValues = values.ToArray();
        }
예제 #9
0
 protected override void EstablishContext()
 {
     base.EstablishContext();
     Parameter = new RemapTagsParameter();
     CommonCategory.Setup(d => d.IsRead()).Returns(true).Verifiable();
 }
예제 #10
0
 protected override void EstablishContext()
 {
     base.EstablishContext();
     Parameter = new RemapTagsParameter();
     IoDevice.Setup(d => d.CreateRemapParameter()).Returns(Parameter).Verifiable();
 }
예제 #11
0
 protected override void EstablishContext()
 {
     base.EstablishContext();
     Parameter = IoDevice.CreateRemapParameter();
 }