/// <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); }
public void Write(HJ212Message message) { _streamResource.DiscardInBuffer(); byte[] frame = BuildMessageFrame(message); _streamResource.Write(frame, 0, frame.Length); }
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(); }
private bool WriteFrame(DataFrame frame, IStreamResource port) { try { port.Write(frame.Data, 0, frame.Data.Count()); return(true); } catch (InvalidOperationException) { return(false); } }
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); }
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 } }
private static bool WriteFrame(DataFrame frame, IStreamResource port) { port.Write(frame.Data, 0, frame.Data.Count()); return(true); }