Esempio n. 1
0
 /// <summary>
 /// 发送指定数量的字节数据
 /// </summary>
 /// <param name="buf"></param>
 /// <param name="offset"></param>
 /// <param name="count"></param>
 private void Write(byte[] buf, int offset, int count)
 {
     // 清接收缓冲区
     commProxy.DiscardInBuffer();
     // 发送数据
     commProxy.Write(buf, offset, count);
 }
Esempio n. 2
0
        public void Write(HJ212Message message)
        {
            _streamResource.DiscardInBuffer();

            byte[] frame = BuildMessageFrame(message);
            _streamResource.Write(frame, 0, frame.Length);
        }
Esempio n. 3
0
        public void UnicastMessage_PurgeReceiveBuffer()
        {
            var             mock           = new Mock <IStreamResource>(MockBehavior.Strict);
            IStreamResource serialResource = mock.Object;
            var             factory        = new ModbusFactory();
            var             transport      = new ModbusRtuTransport(serialResource, factory, NullModbusLogger.Instance);

            mock.Setup(s => s.DiscardInBuffer());
            mock.Setup(s => s.Write(It.IsAny <byte[]>(), 0, 0));

            serialResource.DiscardInBuffer();
            serialResource.Write(null, 0, 0);

            // mangled response
            mock.Setup(s => s.Read(It.Is <byte[]>(x => x.Length == 4), 0, 4)).Returns(4);

            serialResource.DiscardInBuffer();
            serialResource.Write(null, 0, 0);

            // normal response
            var response = new ReadCoilsInputsResponse(ModbusFunctionCodes.ReadCoils, 2, 1, new DiscreteCollection(true, false, true, false, false, false, false, false));

            // write request
            mock.Setup(s => s.Write(It.Is <byte[]>(x => x.Length == 8), 0, 8));

            // read header
            mock.Setup(s => s.Read(It.Is <byte[]>(x => x.Length == 4), 0, 4))
            .Returns((byte[] buf, int offset, int count) =>
            {
                Array.Copy(response.MessageFrame, 0, buf, 0, 4);
                return(4);
            });

            // read remainder
            mock.Setup(s => s.Read(It.Is <byte[]>(x => x.Length == 2), 0, 2))
            .Returns((byte[] buf, int offset, int count) =>
            {
                Array.Copy(ModbusUtility.CalculateCrc(response.MessageFrame), 0, buf, 0, 2);
                return(2);
            });

            var request = new ReadCoilsInputsRequest(ModbusFunctionCodes.ReadCoils, 2, 3, 4);
            ReadCoilsInputsResponse actualResponse = transport.UnicastMessage <ReadCoilsInputsResponse>(request);

            ModbusMessageFixture.AssertModbusMessagePropertiesAreEqual(response, actualResponse);
            mock.VerifyAll();
        }
        public void UnicastMessage_PurgeReceiveBuffer()
        {
            MockRepository        mocks          = new MockRepository();
            IStreamResource       serialResource = mocks.StrictMock <IStreamResource>();
            ModbusSerialTransport transport      = new ModbusRtuTransport(serialResource);

            serialResource.DiscardInBuffer();
            serialResource.Write(null, 0, 0);
            LastCall.IgnoreArguments();

            // mangled response
            Expect.Call(serialResource.Read(new byte[] { 0, 0, 0, 0 }, 0, 4)).Return(4);

            serialResource.DiscardInBuffer();
            serialResource.Write(null, 0, 0);
            LastCall.IgnoreArguments();

            // normal response
            ReadCoilsInputsResponse response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 2, 1,
                                                                           new DiscreteCollection(true, false, true, false, false, false, false, false));

            // read header
            Expect.Call(serialResource.Read(new byte[] { 0, 0, 0, 0 }, 0, 4))
            .Do(((Func <byte[], int, int, int>) delegate(byte[] buf, int offset, int count)
            {
                Array.Copy(response.MessageFrame, 0, buf, 0, 4);
                return(4);
            }));

            // read remainder
            Expect.Call(serialResource.Read(new byte[] { 0, 0 }, 0, 2))
            .Do(((Func <byte[], int, int, int>) delegate(byte[] buf, int offset, int count)
            {
                Array.Copy(ModbusUtility.CalculateCrc(response.MessageFrame), 0, buf, 0, 2);
                return(2);
            }));

            mocks.ReplayAll();

            ReadCoilsInputsRequest request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 2, 3, 4);

            transport.UnicastMessage <ReadCoilsInputsResponse>(request);

            mocks.VerifyAll();
        }
Esempio n. 5
0
 private bool WriteFrame(DataFrame frame, IStreamResource port)
 {
     try
     {
         port.Write(frame.Data, 0, frame.Data.Count());
         return(true);
     }
     catch (InvalidOperationException)
     {
         return(false);
     }
 }
Esempio n. 6
0
        public void TestReadCoils()
        {
            IModbusMessage request;

            byte[] sendBytes = _modbusMaster.BuildReadCoilsCommand(slaveId, startAddress, numRegisters, out request);
            _sr.Write(sendBytes, 0, sendBytes.Length);

            byte[] readBuffer = new byte[1024];
            int    num        = _sr.Read(readBuffer, 0, readBuffer.Length);

            byte[] readBytes = new byte[num];
            Buffer.BlockCopy(readBuffer, 0, readBytes, 0, num);

            bool[] response = _modbusMaster.GetReadCoilsResponse(readBytes, numRegisters, request);
        }
Esempio n. 7
0
 private void TrySendData()
 {
     try
     {
         if (_queue.Count() == 0)
         {
             Thread.Sleep(CommunicationTasks.TrasmitingTaskSleepTime);
         }
         else
         {
             var message = _queue.Dequeue();
             var packet  = _messageGenerator.Generate(message);
             _streamResource.Write(packet, 0, packet.Length);
         }
     }
     catch (Exception e)
     {
         Logger.Error("Sender task exception: " + e.Message);
         Stop(); // probably the serial port is not opened or not created, there is no reason to continue this task
     }
 }
Esempio n. 8
0
 private static bool WriteFrame(DataFrame frame, IStreamResource port)
 {
     port.Write(frame.Data, 0, frame.Data.Count());
     return(true);
 }