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);
- }
- }
|