Skip to main content

General

Örnek: Hex Ayrıştırma

Legacy PLC'lerden gelen hex/binary payload'ları ayrıştırma.

SDK, seri cihazlardan gelen Hex string'leri (örn. "0104AABB") ayrıştırmak için yüksek performanslı extension'lar içerir.

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. Offset 0'da Status (Short - 2 byte)
                    short status = hexStr.ExtractValueFromHexString<short>(size: 2, startIndex: 0);

                    // 2. Offset 2'de Value (Float - 4 byte)
                    float value = hexStr.ExtractValueFromHexString<float>(size: 4, startIndex: 2);

                    LogInformation($"Parsed: Status={status}, Value={value:F2}");

                    // 3. Ayrıştırılmış veriyi yayınla
                    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}");
                }
            }
        }
    }
}