The SDK provides high-performance extensions to parse Hex strings (e.g., "0104AABB") often sent by serial devices.
using Proxus.SDK.BaseFunctions;
using Proxus.Common.Messages;
using Proxus.Common;
using System;
namespace MyProject.Functions
{
public class LegacyParser : FunctionBase
{
public LegacyParser(object sys, object log, object config) : base(sys, log, config) { }
protected override void OnMessageReceive(FunctionContext ctx)
{
if (ctx.Message is TransportData data)
{
// Raw Value: "000140400000"
string hexStr = data.GetPayloadValueByName<string>("RawData");
if (string.IsNullOrEmpty(hexStr)) return;
try
{
// 1. Extract Status (Short - 2 bytes) at Offset 0
short status = hexStr.ExtractValueFromHexString<short>(size: 2, startIndex: 0);
// 2. Extract Value (Float - 4 bytes) at Offset 2
float value = hexStr.ExtractValueFromHexString<float>(size: 4, startIndex: 2);
LogInformation($"Parsed: Status={status}, Value={value:F2}");
// 3. Publish Parsed Data
var cleanData = new TransportDataBuilder()
.WithTopic($"{data.Topic}/Parsed")
.WithPayload("Status", status)
.WithPayload("RealValue", value)
.Build();
BackToPipeline(cleanData);
}
catch (Exception ex)
{
LogError($"Parse Error: {ex.Message}");
}
}
}
}
}