void IMODBUSResponseMessage.Initialize(byte[] frame, bool isExtendedUnitId, IMODBUSRequestMessage requestMessage)
        {
            base.Initialize(frame, isExtendedUnitId);

            var dataLength = isExtendedUnitId ? frame[3] : frame[2];

            var readStringRequest = requestMessage as ReadStringRequest;

            if (readStringRequest != null)
            {
                data = new byte[dataLength + 1];

                if (isExtendedUnitId)
                {
                    Buffer.BlockCopy(frame, 3, data, 0, dataLength + 1);
                }
                else
                {
                    Buffer.BlockCopy(frame, 2, data, 0, dataLength + 1);
                }

                this.StringRegister = readStringRequest.StringRegister;

                var stringData = new byte[StringRegister.Length];

                Buffer.BlockCopy(data, 1, stringData, 0, dataLength);

                this.StringRegister.Data = stringData;
            }
            else
            {
                throw new FormatException("Unable to create response message (request message null).");
            }
        }
        public Action BuildSearchLogix(RefID query)
        {
            Slot logix = mainSlot.AddSlot("Search logix");

            Network.GET_String getString = logix.AttachComponent <Network.GET_String>();
            StringRegister     url       = logix.AttachComponent <StringRegister>();

            url.Value.Value = "https://better-lightning-crate.glitch.me/";
            FormatString        formatString = logix.AttachComponent <FormatString>();
            ValueField <string> type         = logix.AttachComponent <ValueField <string> >();
            ValueField <string> format       = logix.AttachComponent <ValueField <string> >();

            format.Value.Value        = "{0}/{1}/{2}";
            formatString.Format.Value = format.Value.ReferenceID;
            formatString.Parameters.Add();
            formatString.Parameters.Add();
            formatString.Parameters.Add();
            formatString.Parameters[0].Value = url.Value.ReferenceID;
            formatString.Parameters[1].Value = type.Value.ReferenceID;
            formatString.Parameters[2].Value = query;
            getString.URL.Value = formatString.Str.ReferenceID;
            Actions.WriteValueNode <string> writeResponse = logix.AttachComponent <Actions.WriteValueNode <string> >();
            StringRegister response = logix.AttachComponent <StringRegister>();

            searchResponse              = response;
            writeResponse.Value.Value   = getString.Content.ReferenceID;
            writeResponse.Target.Value  = response.Value.ReferenceID;
            getString.OnResponse.Target = writeResponse.Write;
            //writeResponse.Target.OwnerNode.RemoveAllLogixBoxes();
            //LogixHelper.MoveUnder(writeResponse.Target.OwnerNode, logix, true);
            //getString.Request();
            return(getString.Request);
        }
示例#3
0
        public void ReadStringRegister(ushort?unitId, bool?isExtendedUnitId, ref StringRegister stringRegister)
        {
            var request  = new ReadStringRequest(unitId.HasValue ? unitId.Value : UnitId, stringRegister, isExtendedUnitId.HasValue ? isExtendedUnitId.Value : UseExtendedAddressing);
            var response = Transport.UnicastMessage <ReadStringResponse>(request);

            stringRegister = response.StringRegister;
        }
示例#4
0
 public static StringRegister ReadString(SqlString deviceName, StringRegister stringRegister)
 {
     //var deviceNameValue = deviceName.Value;
     // var stringRegisterValue = new Device.MODBUS.Data.StringRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(stringRegister.Address.RelativeAddress.Value), stringRegister.Address.IsZeroBased.Value), stringRegister.Length.Value);
     //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadStringRegister(null, null, ref stringRegisterValue);
     //stringRegister.Data = stringRegisterValue.Data;
     return(StringRegister.Null); // stringRegister;
 }
示例#5
0
 public ReadStringRequest(ushort unitId, StringRegister stringRegister, bool isExtendedUnitId)
     : base(unitId, Device.ReadHoldingRegisters)
 {
     this.StringRegister   = stringRegister;
     this.IsExtendedUnitId = isExtendedUnitId;
 }