跳到主要内容
版本:2.1

西门子S7协议

说明

本代码仅适用以下协议。

西门子S7协议

提示

封装较多,以下代码只摘录部分,如果需要全部代码,请查看开源地址

版权

该代码所有版权归Diego所有,使用时请务必注明。

代码



namespace ThingsGateway.Foundation.Adapter.Siemens;

/// <summary>
/// SiemensS7PLCDataHandleAdapter
/// </summary>
public class SiemensS7PLCDataHandleAdapter : ReadWriteDevicesTcpDataHandleAdapter<SiemensMessage>
{
/// <inheritdoc/>
public override byte[] PackCommand(byte[] command)
{
return command;
}

/// <summary>
/// <inheritdoc/>
/// </summary>
/// <returns></returns>
protected override SiemensMessage GetInstance()
{
return new SiemensMessage();
}

/// <inheritdoc/>
protected override FilterResult UnpackResponse(SiemensMessage request, byte[] send, byte[] body, byte[] response)
{
var result = new OperResult<byte[]>();
if (response[2] * 256 + response[3] == 7)
{
result = new OperResult<byte[]>(response);
}
else
{
//以请求方为准,分开返回类型校验
switch (send[17])
{
case 0x04:
result = SiemensHelper.AnalysisReadByte(send, response);
break;
case 0x05:
result = SiemensHelper.AnalysisWrite(response);
break;
}
}
request.ResultCode = result.ResultCode;
request.Message = result.Message;
request.Content = result.Content;
return FilterResult.Success;
}
}