コード例 #1
0
        public override ModbusTCPMessage Process(IMemoryModel memory)
        {
            int address = Int16Extensions.FromBytes(PDU.Data.First(), PDU.Data.Skip(1).First());
            int length  = Int16Extensions.FromBytes(PDU.Data.Skip(2).First(), PDU.Data.Skip(3).First());

            try
            {
                var values           = memory.Read4x(address, length);
                ProtocolDataUnit pdu = PDU.ValidResponse(
                    new byte[]
                    { (byte)(values.Count() * 2) }
                    .Concat(values.SelectMany(v => v.GetBytes())));
                ModbusTCPMessage reply = Create(
                    MBAP.Create((byte)(pdu.GetBytes().Count() + 1), ApplicationHeader.UnitID),
                    pdu);
                return(reply);
            }
            catch
            {
                ProtocolDataUnit pdu   = PDU.ErrorResponse(new byte[] { 0x01 });
                ModbusTCPMessage reply = Create(
                    MBAP.Create((byte)(pdu.GetBytes().Count() + 1), ApplicationHeader.UnitID),
                    pdu);
                return(reply);
            }
        }
コード例 #2
0
 public MBTCPServer(IPAddress address, int port, IMemoryModel memoryModel)
 {
     _listener = new ConnectionListener(address, port);
     _listener.OnConnectionAccepted += _listener_OnConnectionAccepted;
     _receiveDataTask = _listener.StartAsync();
     _memoryModel     = memoryModel;
     Status           = ServerStatus.Connected;
 }
コード例 #3
0
        public override ModbusTCPMessage Process(IMemoryModel memory)
        {
            try
            {
                int address = StartAddress();
                var values  = ParseValues();

                memory.Write4x(address, values);

                var pdu   = PDU.ValidResponse(((Int16)values.Count()).GetBytes());
                var reply = Create(
                    MBAP.Create((byte)(pdu.GetBytes().Count() + 1), ApplicationHeader.UnitID),
                    pdu);
                return(reply);
            }
            catch
            {
                var pdu = PDU.ErrorResponse(new byte[] { 0x01 });
                ModbusTCPMessage reply = Create(
                    MBAP.Create((byte)(pdu.GetBytes().Count() + 1), ApplicationHeader.UnitID),
                    pdu);
                return(reply);
            }
        }
コード例 #4
0
 private void setMemoryModel(string mm)
 {
     memoryModel = MemoryModels.GetMemoryModel(mm);
 }
コード例 #5
0
 public virtual ModbusTCPMessage Process(IMemoryModel memory)
 {
     return(this);
 }