public override ModbusFunction ReadCoils(ReadCoilsRequest request) { var coilArray = ReadCoilsOrInputs(request.Quantity); var response = new ReadCoilsResponse(coilArray); return(response); }
public void ReadCoilsRequestToString() { // Arrange var request = new ReadCoilsRequest(5, 1, 10); // Act/Assert Assert.Equal("Read 10 coils starting at address 1 from slave 5", request.ToString()); }
public async Task <bool[]> ReadCoilsAsync(byte slaveAddress, ushort startAddress, ushort numberOfPoints, CancellationToken token = default) { ValidateNumberOfPoints(numberOfPoints, 2000); var request = new ReadCoilsRequest(slaveAddress, startAddress, numberOfPoints); using (var response = await Transport.SendAsync <ReadCoilsResponse>(request, token).ConfigureAwait(false)) { return(response.Data.Slice(0, request.NumberOfPoints).ToArray()); } }
public ReadCoilsResponse ReadCoils(ushort startingAddress, ushort quantity) { var function = new ReadCoilsRequest(startingAddress, quantity); return(CallModbusFunctionSync <ReadCoilsResponse>(function)); }
public ushort ReadCoilsAsync(ushort startingAddress, ushort quantity) { var function = new ReadCoilsRequest(startingAddress, quantity); return(CallModbusFunction(function)); }
public abstract ModbusFunction ReadCoils(ReadCoilsRequest request);
// folosit la primul test cu placuta void Modbus_ReadCoilsResponse(ReadCoilsRequest RCRequest) { Array.Clear(g_aucCoils, 0, g_aucCoils.Length); if (g_ReadCoilsReq.m_ucAddress == 0xEC) { if (0x0001 <= RCRequest.m_unNumberOfCoils && RCRequest.m_unNumberOfCoils <= 0x07D0) { if ((RCRequest.m_unStartingAddress >= 0x0000 && RCRequest.m_unStartingAddress <= 0xFFFF) && (RCRequest.m_unStartingAddress + RCRequest.m_unNumberOfCoils <= 0xFFFF)) { if (RCRequest.m_unNumberOfCoils % 8 == 0) { g_ReadCoilsResp.m_ucByteCount = (byte)(RCRequest.m_unNumberOfCoils / 8); } else { g_ReadCoilsResp.m_ucByteCount = (byte)(RCRequest.m_unNumberOfCoils / 8 + 1); } g_ReadCoilsResp.m_ucAddress = MODBUS_ADDRESS; g_ReadCoilsResp.m_ucFunctionCode = RCRequest.m_ucFunctionCode; ushort i, j; //printf("byte count: %d\n", g_ReadCoilsResp.m_ucByteCount); for (i = 0; i < g_ReadCoilsResp.m_ucByteCount; i++) { for (j = 0; j < 8; j++) { if (i * 8 + j >= RCRequest.m_unNumberOfCoils) { break; } g_ReadCoilsResp.m_aucCoilsVal[i] += (byte)(g_aucCoils[i * 8 + j] << j); //printf("gauc coils: %x\t", g_aucCoils[i * 8 + j]); //printf("response coils: %x\n", g_ReadCoilsResp.m_ucCoilStatus[i]); } } // copiere in adu <- response //memcpy(g_aucTxADU, &g_ReadCoilsResp, (3 + g_ReadCoilsResp.m_ucByteCount)); g_aucTxADU[0] = g_ReadCoilsResp.m_ucAddress; g_aucTxADU[1] = g_ReadCoilsResp.m_ucFunctionCode; g_aucTxADU[2] = g_ReadCoilsResp.m_ucByteCount; Array.Copy(g_aucTxADU, 3, g_ReadCoilsResp.m_aucCoilsVal, 0, g_ReadCoilsResp.m_ucByteCount); _serialPort.Write(g_aucTxADU, 0, 3 + g_ReadCoilsResp.m_ucByteCount); } else { g_ExceptionResp.m_ucExceptionCode = 0x02; g_ExceptionResp.m_ucExceptionFunctionCode = (byte)(RCRequest.m_ucFunctionCode + 0x80); g_aucTxADU[0] = MODBUS_ADDRESS; g_aucTxADU[1] = g_ExceptionResp.m_ucExceptionFunctionCode; g_aucTxADU[2] = g_ExceptionResp.m_ucExceptionCode; _serialPort.Write(g_aucTxADU, 0, 3); //printf("out of bounds"); } } else { g_ExceptionResp.m_ucExceptionCode = 0x03; g_ExceptionResp.m_ucExceptionFunctionCode = (byte)(RCRequest.m_ucFunctionCode + 0x80); g_aucTxADU[0] = MODBUS_ADDRESS; g_aucTxADU[1] = g_ExceptionResp.m_ucExceptionFunctionCode; g_aucTxADU[2] = g_ExceptionResp.m_ucExceptionCode; _serialPort.Write(g_aucTxADU, 0, 3); //printf("coils > 2000"); } } }
static void TestMessage() { ModbusMessage fc01Req = new ReadCoilsRequest(0x13, 0x13); ModbusMessage fc01Res = new ReadCoilsResponse(true, false, true, true, false, false, true, true, true, true, false, true, false, true, true, false, true, false, true, false); ModbusMessage fc02Req = new ReadDiscreteInputsRequest(0xc4, 0x16); ModbusMessage fc02Res = new ReadDiscreteInputsResponse(false, false, true, true, false, true, false, true, true, true, false, true, true, false, true, true, true, false, true, false, true, true); ModbusMessage fc03Req = new ReadHoldingRegistersRequest(0x6b, 0x03); ModbusMessage fc03Res = new ReadHoldingRegistersResponse(0x022b, 0x0000, 0x0064); ModbusMessage fc04Req = new ReadInputRegistersRequest(0x08, 0x01); ModbusMessage fc04Res = new ReadInputRegistersResponse(0x000a); ModbusMessage fc05Req = new WriteSingleCoilRequest(0xac, true); ModbusMessage fc05Res = new WriteSingleCoilResponse(0xac, true); ModbusMessage fc06Req = new WriteSingleRegisterRequest(0x01, 0x0003); ModbusMessage fc06Res = new WriteSingleRegisterResponse(0x01, 0x0003); ModbusMessage fc0fReq = new WriteMultipleCoilsRequest(0x13, true, false, true, true, false, false, true, true, true, false); ModbusMessage fc0fRes = new WriteMultipleCoilsResponse(0x13, 0x0a); ModbusMessage fc10Req = new WriteMultipleRegistersRequest(0x01, 0x000a, 0x0102); ModbusMessage fc10Res = new WriteMultipleRegistersResponse(0x01, 0x02); PrintMessagePDU(fc01Req); PrintMessagePDU(fc01Res); PrintMessagePDU(fc02Req); PrintMessagePDU(fc02Res); PrintMessagePDU(fc03Req); PrintMessagePDU(fc03Res); PrintMessagePDU(fc04Req); PrintMessagePDU(fc04Res); PrintMessagePDU(fc05Req); PrintMessagePDU(fc05Res); PrintMessagePDU(fc06Req); PrintMessagePDU(fc06Res); PrintMessagePDU(fc0fReq); PrintMessagePDU(fc0fRes); PrintMessagePDU(fc10Req); PrintMessagePDU(fc10Res); Assert(MessagePDU(fc01Req) == "Req.: 01 00 13 00 13", $"{nameof(fc01Req)} Fail"); Assert(MessagePDU(fc01Res) == "Res.: 01 03 cd 6b 05", $"{nameof(fc01Res)} Fail"); Assert(MessagePDU(fc02Req) == "Req.: 02 00 c4 00 16", $"{nameof(fc02Req)} Fail"); Assert(MessagePDU(fc02Res) == "Res.: 02 03 ac db 35", $"{nameof(fc02Res)} Fail"); Assert(MessagePDU(fc03Req) == "Req.: 03 00 6b 00 03", $"{nameof(fc03Req)} Fail"); Assert(MessagePDU(fc03Res) == "Res.: 03 06 02 2b 00 00 00 64", $"{nameof(fc03Res)} Fail"); Assert(MessagePDU(fc04Req) == "Req.: 04 00 08 00 01", $"{nameof(fc04Req)} Fail"); Assert(MessagePDU(fc04Res) == "Res.: 04 02 00 0a", $"{nameof(fc04Res)} Fail"); Assert(MessagePDU(fc05Req) == "Req.: 05 00 ac ff 00", $"{nameof(fc05Req)} Fail"); Assert(MessagePDU(fc05Res) == "Res.: 05 00 ac ff 00", $"{nameof(fc05Res)} Fail"); Assert(MessagePDU(fc06Req) == "Req.: 06 00 01 00 03", $"{nameof(fc06Req)} Fail"); Assert(MessagePDU(fc06Res) == "Res.: 06 00 01 00 03", $"{nameof(fc06Res)} Fail"); Assert(MessagePDU(fc0fReq) == "Req.: 0f 00 13 00 0a 02 cd 01", $"{nameof(fc0fReq)} Fail"); Assert(MessagePDU(fc0fRes) == "Res.: 0f 00 13 00 0a", $"{nameof(fc0fRes)} Fail"); Assert(MessagePDU(fc10Req) == "Req.: 10 00 01 00 02 04 00 0a 01 02", $"{nameof(fc10Req)} Fail"); Assert(MessagePDU(fc10Res) == "Res.: 10 00 01 00 02", $"{nameof(fc10Res)} Fail"); Assert(fc01Req.FunctionCode == (FunctionCode)0x01); Assert(fc01Res.FunctionCode == (FunctionCode)0x01); Assert(fc02Req.FunctionCode == (FunctionCode)0x02); Assert(fc02Res.FunctionCode == (FunctionCode)0x02); Assert(fc03Req.FunctionCode == (FunctionCode)0x03); Assert(fc03Res.FunctionCode == (FunctionCode)0x03); Assert(fc04Req.FunctionCode == (FunctionCode)0x04); Assert(fc04Res.FunctionCode == (FunctionCode)0x04); Assert(fc05Req.FunctionCode == (FunctionCode)0x05); Assert(fc05Res.FunctionCode == (FunctionCode)0x05); Assert(fc06Req.FunctionCode == (FunctionCode)0x06); Assert(fc06Res.FunctionCode == (FunctionCode)0x06); Assert(fc0fReq.FunctionCode == (FunctionCode)0x0f); Assert(fc0fRes.FunctionCode == (FunctionCode)0x0f); Assert(fc10Req.FunctionCode == (FunctionCode)0x10); Assert(fc10Res.FunctionCode == (FunctionCode)0x10); }