/*using HslCommunication.Profinet.Siemens;
using HslCommunication;
using Newtonsoft.Json;
using Quartz;
using WCS.DeviceProtocol;
using WCS.Entitys;
using WCS.Model;
using WCS.Services;
using WCS.Utils;
using StackExchange.Redis;
namespace WCS.Service.Impl
{
public class JobService : IJob
{
private readonly IConnectionMultiplexer _redis;
private readonly IDeviceService _deviceService;
private readonly IWcsTagValueService _wcsTagValueService;
private string wcs_redis_key = "WCS:";
private string LOG_TITLE_S7 = "S7采集";
public JobService(IConnectionMultiplexer redisService, IDeviceService deviceService)
{
this._redis = redisService;
this._deviceService = deviceService;
}
public async Task Execute(IJobExecutionContext context)
{
try
{
Console.WriteLine($"Job executed at {DateTime.Now}");
await this.getDeviceList();
}
catch (Exception ex)
{
// 记录异常
Console.WriteLine($"An error occurred: {ex.Message}");
// 你可以选择记录到日志文件或其他日志系统
}
}
///
/// 采集数据S7
///
///
public async Task DataCollectS7Job()
{
try
{
List deviceList = await getDeviceList();
deviceList = deviceList.Where(x => x.ProtocolType.Equals(ProtocalTypeEnum.S7_1500.ToString()) && x.State).ToList();
foreach (WcsDevice device in deviceList)
{
List tagValues = new List();
string redis_key = "WCS:" + device.Ip + ":" + device.ProtocolType;
var data = await _redis.GetDatabase().StringGetAsync(redis_key);
if (data.IsNullOrEmpty)
{
WcsTagValue tagQuery = new WcsTagValue();
tagQuery.ProtocolType = device.ProtocolType;
tagQuery.Ip = device.Ip;
tagValues = _wcsTagValueService.GetList(tagQuery);
//首次设置redis
if (tagValues != null && tagValues.Count > 0)
{
await _redis.GetDatabase().StringSetAsync(redis_key, JsonConvert.SerializeObject(tagValues));
}
}
else
{
tagValues = JsonConvert.DeserializeObject>(data);
}
if (tagValues != null && tagValues.Count > 0)
{
tagValues = JsonConvert.DeserializeObject>(data);
List changTagValues = new List();
//Plc s7 = DevicePlcS7.S7(device.ServerUrl, ProtocalTypeEnum.S7_1500.ToString());
SiemensS7Net s7 = DevicePlcS7.SiemensS7(device.Ip);
OperateResult ConnectionResult = s7.ConnectServer();
if (!ConnectionResult.IsSuccess)
{
device.State = false;
await _deviceService.UpdateDevice(device);
s7.ConnectClose();
Log.Instance.WriteLogAdd("S7采集异常,plc连不上==>" + device.Ip, LOG_TITLE_S7);
return "采集失败,plc连不上";
}
else
{
foreach (WcsTagValue tagValueData in tagValues)
{
string operateResult = "";
if (tagValueData.Type.Equals(TagValueReadTypeEnum.BOOL.ToString()))
{
operateResult = s7.ReadBool(tagValueData.Address).Content.ToString();
}
else if (tagValueData.Type.Equals(TagValueReadTypeEnum.SHORT.ToString()))
{
operateResult = s7.ReadInt16(tagValueData.Address).Content.ToString();
}
else if (tagValueData.Type.Equals(TagValueReadTypeEnum.String.ToString()))
{
operateResult = s7.ReadString(tagValueData.Address).Content.ToString();
}
else if (tagValueData.Type.Equals(TagValueReadTypeEnum.Array.ToString()))
{
operateResult = ToolUtils.ReturnStringByBytes(s7.Read(tagValueData.Address, 40).Content);
}
if (!string.IsNullOrEmpty(operateResult) && tagValueData.TagValue != operateResult)
{
tagValueData.TagValue = operateResult.ToString();
tagValueData.UpdateTime = DateTime.Now;
changTagValues.Add(tagValueData);
Log.Instance.WriteLogAdd("S7采集,Ip:" + tagValueData.Ip + " 地址:" + tagValueData.Address + ",值:" + tagValueData.TagValue + ",发生变化", LOG_TITLE_S7);
//有变化更新数据库
await _wcsTagValueService.Update(tagValueData);
}
Thread.Sleep(50);
}
s7.ConnectClose();
//值有变化,重新设置一次redis
if (changTagValues != null && changTagValues.Count > 0)
{
await _redis.GetDatabase().StringSetAsync(redis_key, JsonConvert.SerializeObject(tagValues));
}
//存储采集数据
CollectDataLog.Instance.WriteLogAdd(data, LOG_TITLE_S7);
}
}
}
return "S7采集成功";
}
catch (Exception ex)
{
Log.Instance.WriteLogAdd("S7采集异常===>>" + ex.Message, LOG_TITLE_S7);
return "S7采集失败";
}
}
///
/// 获取redis 设备在线列表
///
///
///
private async Task> getDeviceList()
{
List deviceList = new List();
var deviceListData = await _redis.GetDatabase().StringGetAsync(wcs_redis_key + RedisKeyEnum.DeviceList);
if (deviceListData.IsNullOrEmpty || deviceListData.Length() == 0)
{
deviceList = _deviceService.GetDeviceList();
await _redis.GetDatabase().StringSetAsync(wcs_redis_key + RedisKeyEnum.DeviceList, JsonConvert.SerializeObject(deviceList));
}
else
{
deviceList = JsonConvert.DeserializeObject>(deviceListData);
}
return deviceList;
}
}
}
*/