|
|
|
@ -1,28 +1,34 @@
|
|
|
|
|
using Entity.DbModel.Station;
|
|
|
|
|
using Common.Const;
|
|
|
|
|
using Entity.DbModel.Station;
|
|
|
|
|
using HybirdFrameworkCore.Autofac.Attribute;
|
|
|
|
|
using HybirdFrameworkCore.Const;
|
|
|
|
|
using HybirdFrameworkDriver.ModbusTcpMaster;
|
|
|
|
|
using log4net;
|
|
|
|
|
using Repository.Station;
|
|
|
|
|
using Service.Plc.Msg;
|
|
|
|
|
|
|
|
|
|
namespace Service.Plc.Client;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
///
|
|
|
|
|
///
|
|
|
|
|
/// </summary>
|
|
|
|
|
[Scope]
|
|
|
|
|
public class PlcClient : ModbusTcpMaster
|
|
|
|
|
{
|
|
|
|
|
private BinInfoRepository _binInfoRepository;
|
|
|
|
|
|
|
|
|
|
public PlcClient(BinInfoRepository binInfoRepository)
|
|
|
|
|
private static readonly ILog Log = LogManager.GetLogger(typeof(PlcClient));
|
|
|
|
|
public BinInfoRepository BinInfoRepository { get; set; }
|
|
|
|
|
public EquipAlarmDefineRepository EquipAlarmDefineRepository { get; set; }
|
|
|
|
|
public EquipAlarmRecordRepository EquipAlarmRecordRepository { get; set; }
|
|
|
|
|
public EquipAlarmProcessRecordRepository EquipAlarmProcessRecordRepository { get; set; }
|
|
|
|
|
|
|
|
|
|
public PlcClient()
|
|
|
|
|
{
|
|
|
|
|
ReadAction = BatchRead;
|
|
|
|
|
Ip = "172.0.20.66";
|
|
|
|
|
Port = 502;
|
|
|
|
|
Duration = 1000;
|
|
|
|
|
AutoReConnect = true;
|
|
|
|
|
_binInfoRepository = binInfoRepository;
|
|
|
|
|
ByteSeq = EndingConst.ByteSeq.BA;
|
|
|
|
|
WordSeq= EndingConst.WordSeq.CD;
|
|
|
|
|
}
|
|
|
|
@ -60,16 +66,73 @@ public class PlcClient : ModbusTcpMaster
|
|
|
|
|
var bytes03 = master.BatchReadHolderRegister(701, 10);
|
|
|
|
|
if (bytes03 != null)
|
|
|
|
|
{
|
|
|
|
|
PlcMgr.LastPlcFaultData = PlcMgr.PlcFaultData;
|
|
|
|
|
PlcMgr.DataValidityTime = DateTime.Now;
|
|
|
|
|
ModbusDecoder.Decode<PlcFault>(bytes03, PlcMgr.PlcFaultData, EndingConst.ByteSeq.AB,
|
|
|
|
|
EndingConst.WordSeq.DC);
|
|
|
|
|
SaveAlarmInfo(PlcMgr.LastPlcFaultData.ErrorCode01.Value, PlcMgr.PlcFaultData.ErrorCode01.Value);
|
|
|
|
|
SaveAlarmInfo(PlcMgr.LastPlcFaultData.ErrorCode03.Value, PlcMgr.PlcFaultData.ErrorCode03.Value);
|
|
|
|
|
SaveAlarmInfo(PlcMgr.LastPlcFaultData.ErrorCode05.Value, PlcMgr.PlcFaultData.ErrorCode05.Value);
|
|
|
|
|
SaveAlarmInfo(PlcMgr.LastPlcFaultData.ErrorCode07.Value, PlcMgr.PlcFaultData.ErrorCode07.Value);
|
|
|
|
|
SaveAlarmInfo(PlcMgr.LastPlcFaultData.ErrorCode09.Value, PlcMgr.PlcFaultData.ErrorCode09.Value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SaveAlarmInfo(int lastErrorCode, int errorCode)
|
|
|
|
|
{
|
|
|
|
|
if (lastErrorCode == errorCode)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
string plc = "plc";
|
|
|
|
|
if (errorCode != 0)
|
|
|
|
|
{
|
|
|
|
|
EquipAlarmDefine? alarmDefine = EquipAlarmDefineRepository.SelectByEquipCodeAndErrorCode((int)EquipmentType.Plc, plc, errorCode.ToString());
|
|
|
|
|
if (alarmDefine == null)
|
|
|
|
|
{
|
|
|
|
|
Log.Error($"error code {errorCode} has no define");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EquipAlarmRecord record = new EquipAlarmRecord()
|
|
|
|
|
{
|
|
|
|
|
EquipTypeCode = alarmDefine.EquipTypeCode,
|
|
|
|
|
EquipCode = alarmDefine.EquipCode,
|
|
|
|
|
ErrorCode = alarmDefine.ErrorCode,
|
|
|
|
|
ErrorLevel = alarmDefine.ErrorLevel,
|
|
|
|
|
ErrorMsg = alarmDefine.ErrorMsg,
|
|
|
|
|
ProcessMethod = alarmDefine.ProcessMethod
|
|
|
|
|
};
|
|
|
|
|
EquipAlarmRecordRepository.Insert(record);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
EquipAlarmRecord? alarmRecord = EquipAlarmRecordRepository.SelectByEquipCodeAndErrorCode((int)EquipmentType.Plc, plc, errorCode.ToString());
|
|
|
|
|
if (alarmRecord != null)
|
|
|
|
|
{
|
|
|
|
|
EquipAlarmProcessRecord processRecord = new EquipAlarmProcessRecord()
|
|
|
|
|
{
|
|
|
|
|
EquipTypeCode = alarmRecord.EquipTypeCode,
|
|
|
|
|
EquipCode = alarmRecord.EquipCode,
|
|
|
|
|
ErrorCode =alarmRecord.EquipCode,
|
|
|
|
|
ErrorLevel = alarmRecord.ErrorLevel,
|
|
|
|
|
ErrorMsg = alarmRecord.ErrorMsg,
|
|
|
|
|
ProcessMethod = alarmRecord.ProcessMethod,
|
|
|
|
|
ProcessTime = DateTime.Now
|
|
|
|
|
};
|
|
|
|
|
EquipAlarmProcessRecordRepository.Insert(processRecord);
|
|
|
|
|
EquipAlarmRecordRepository.DeleteById(alarmRecord.Id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void UpdateBinInfo(int exists, string binNo)
|
|
|
|
|
{
|
|
|
|
|
if (exists == 0)
|
|
|
|
|
_binInfoRepository.Update(
|
|
|
|
|
BinInfoRepository.Update(
|
|
|
|
|
it =>
|
|
|
|
|
new BinInfo(){
|
|
|
|
|
Exists = 0,
|
|
|
|
@ -77,12 +140,12 @@ public class PlcClient : ModbusTcpMaster
|
|
|
|
|
Soc = (decimal)-1,
|
|
|
|
|
Soe = (decimal)-1,
|
|
|
|
|
Soh = (decimal)-1,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
it => it.No == binNo);
|
|
|
|
|
else
|
|
|
|
|
|
|
|
|
|
_binInfoRepository.Update(it => it.Exists == 1,
|
|
|
|
|
BinInfoRepository.Update(it => it.Exists == 1,
|
|
|
|
|
it => it.No == binNo);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|