| 1234567891011121314151617181920212223242526272829303132 | using FreeRedis;namespace WCS.Core;public class VitrualRedisPLC : IPLCAccessor{    private readonly int dbLen = 50000;    private readonly PLCInfo plcInfo;    private readonly RedisClient redis;    public VitrualRedisPLC(PLCInfo plcInfo, string redisConnStr)    {        this.plcInfo = plcInfo;        redis = new RedisClient(redisConnStr);    }    public byte[] ReadBytes(ushort db, ushort address, ushort length)    {        var key = $"{plcInfo.IP}-{db}";        if (!redis.Exists(key)) redis.SetRange(key, 0, new byte[dbLen]);        var res = redis.GetRange<byte[]>(key, address, address + length - 1);        return res;    }    public void WriteBytes(ushort db, ushort address, byte[] data)    {        var key = $"{plcInfo.IP}-{db}";        if (!redis.Exists(key)) redis.SetRange(key, 0, new byte[dbLen]);        redis.SetRange(key, address, data);    }}
 |