Merge remote-tracking branch 'haiwei/dep' into dep

master
nodyang 1 year ago
commit 6ccb7b82f9

@ -308,7 +308,7 @@ namespace Mesnac.Action.ChemicalWeighing.Alarm
{ {
throw new Exception(Mesnac.Basic.LanguageHelper.DataBaseConnectError); throw new Exception(Mesnac.Basic.LanguageHelper.DataBaseConnectError);
} }
string sqlstr = "select Alarm_PLC, Alarm_Block, MIN(Alarm_Word) as Start, (MAX(Alarm_Word) - MIN(Alarm_Word) + 1) as Length from Pmt_Alarm group by Alarm_PLC, Alarm_Block"; string sqlstr = "select Alarm_PLC,Alarm_Word,Alarm_Bit, Alarm_Block, MIN(Alarm_Word) as Start, (MAX(Alarm_Word) - MIN(Alarm_Word) + 1) as Length from Pmt_Alarm group by Alarm_PLC, Alarm_Block,Alarm_Word,Alarm_Bit";
DataTable dt = dbHelper.GetDataTableBySql(sqlstr); DataTable dt = dbHelper.GetDataTableBySql(sqlstr);
return dt; return dt;
} }
@ -381,6 +381,8 @@ namespace Mesnac.Action.ChemicalWeighing.Alarm
entity.AlarmBlock = Mesnac.Basic.DataProcessor.RowValue(dr, "Alarm_Block", String.Empty); entity.AlarmBlock = Mesnac.Basic.DataProcessor.RowValue(dr, "Alarm_Block", String.Empty);
entity.Start = Mesnac.Basic.DataProcessor.RowValue(dr, "Start", 0); entity.Start = Mesnac.Basic.DataProcessor.RowValue(dr, "Start", 0);
entity.Length = Mesnac.Basic.DataProcessor.RowValue(dr, "Length", 0); entity.Length = Mesnac.Basic.DataProcessor.RowValue(dr, "Length", 0);
entity.AlarmWord = Mesnac.Basic.DataProcessor.RowValue(dr, "Alarm_Word", String.Empty);
entity.AlarmBit = Mesnac.Basic.DataProcessor.RowValue(dr, "Alarm_Bit", String.Empty);
return entity; return entity;
} }
return null; return null;

@ -56,6 +56,7 @@ namespace Mesnac.Action.ChemicalWeighing.Cache
newEntity.AlramPLC = entity.AlarmPLC; newEntity.AlramPLC = entity.AlarmPLC;
newEntity.AlarmBlock = entity.AlarmBlock; newEntity.AlarmBlock = entity.AlarmBlock;
newEntity.AlarmAddress = entity.AlarmAddress; newEntity.AlarmAddress = entity.AlarmAddress;
newEntity.AlarmBit = entity.AlarmBit.ToString();
_alarmBlockWordList.Add(newEntity); _alarmBlockWordList.Add(newEntity);
} }
} }

@ -17,7 +17,8 @@ namespace Mesnac.Action.ChemicalWeighing.Entity
private int _start; private int _start;
private int _length; private int _length;
private Int16[] _data; private Int16[] _data;
private string _alarmWord;
private string _alarmBit;
#endregion #endregion
#region 属性定义 #region 属性定义
@ -48,6 +49,18 @@ namespace Mesnac.Action.ChemicalWeighing.Entity
set { _data = value; } set { _data = value; }
} }
public string AlarmWord
{
get { return _alarmWord; }
set { _alarmWord = value; }
}
public string AlarmBit
{
get { return _alarmBit; }
set { _alarmBit = value; }
}
#endregion #endregion
} }
} }

@ -18,6 +18,7 @@ namespace Mesnac.Action.ChemicalWeighing.Entity
private int _alarmAddress; private int _alarmAddress;
private bool[] _isSaveAlarm = new bool[16] { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false }; //是否保存过报警记录 private bool[] _isSaveAlarm = new bool[16] { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false }; //是否保存过报警记录
private Int16 _alarmData = 0; private Int16 _alarmData = 0;
private string _alarmBit;
#endregion #endregion
@ -49,6 +50,12 @@ namespace Mesnac.Action.ChemicalWeighing.Entity
set { _alarmData = value; } set { _alarmData = value; }
} }
public string AlarmBit
{
get { return _alarmBit; }
set { _alarmBit = value; }
}
#endregion #endregion
} }
} }

@ -1,6 +1,10 @@
using Mesnac.PlcUtils; using DevExpress.Xpo.DB;
using HslCommunication;
using Mesnac.Codd.Session;
using Mesnac.PlcUtils;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@ -26,18 +30,15 @@ namespace Mesnac.Action.ChemicalWeighing.FinishBatch.SaveHelper
{ {
List<Entity.AlarmInfo> _alarmInfoList = Cache.CacheHelper.AlarmInfoList; List<Entity.AlarmInfo> _alarmInfoList = Cache.CacheHelper.AlarmInfoList;
List<Entity.SimpleAlarmInfo> _alarmBlockWordList = Cache.CacheHelper.BlockWordList; List<Entity.SimpleAlarmInfo> _alarmBlockWordList = Cache.CacheHelper.BlockWordList;
ICSharpCode.Core.LoggingService<AlarmSaveHelper>.Debug("报警参数-实时刷新自动保存报警..."); ICSharpCode.Core.LoggingService<AlarmSaveHelper>.Debug("报警参数-实时刷新自动保存报警...");
#region 读取PLC的报警数据 #region 读取PLC的报警数据 原方法 Delete By wenjy 2023-08-07 17:10:07
//foreach (Entity.AlarmInfo info in _alarmInfoList)
foreach (Entity.AlarmInfo info in _alarmInfoList)
{
Int16[] buff = null;
//if (BasePlcHelper.Instance.PlcRead(info.AlarmPLC, info.AlarmBlock, info.Start, info.Length, out buff))
//{ //{
// foreach(Entity.SimpleAlarmInfo sai in _alarmBlockWordList) // Int16[] buff = null;
// if (BasePlcHelper.Instance.PlcRead(info.AlarmPLC, info.AlarmBlock, info.Start, info.Length, out buff))
// {
// foreach (Entity.SimpleAlarmInfo sai in _alarmBlockWordList)
// { // {
// if (sai.AlramPLC == info.AlarmPLC && sai.AlarmBlock == info.AlarmBlock) //匹配数据块 // if (sai.AlramPLC == info.AlarmPLC && sai.AlarmBlock == info.AlarmBlock) //匹配数据块
// { // {
@ -45,52 +46,97 @@ namespace Mesnac.Action.ChemicalWeighing.FinishBatch.SaveHelper
// sai.AlarmData = Mesnac.Basic.DataProcessor.Swap(sai.AlarmData); //注意西门子PLC需要高低位转换 // sai.AlarmData = Mesnac.Basic.DataProcessor.Swap(sai.AlarmData); //注意西门子PLC需要高低位转换
// } // }
// } // }
//} // }
//else // else
//{ // {
// ICSharpCode.Core.LoggingService<AlarmSaveHelper>.Warn(String.Format("从PLC读取报警数据失败:PLC={0},Block={1},Start={2},Len={3}", info.AlarmPLC, info.AlarmBlock, info.Start, info.Length)); // ICSharpCode.Core.LoggingService<AlarmSaveHelper>.Warn(String.Format("从PLC读取报警数据失败:PLC={0},Block={1},Start={2},Len={3}", info.AlarmPLC, info.AlarmBlock, info.Start, info.Length));
//} // }
bool result = plcBusiness.readBoolValue("DB3.DBX2.2");
ICSharpCode.Core.LoggingService<AlarmSaveHelper>.Debug($"DB3.DBX2.2读取结果:{result}");
} //}
#endregion #endregion
#region 保存报警数据 #region 保存报警数据 原方法 Delete By wenjy 2023-08-07 18:05:06
//foreach (Entity.SimpleAlarmInfo sai in _alarmBlockWordList)
//{
// int[] binaryAlarmData = Mesnac.Basic.DataProcessor.ParseBinaryValue(sai.AlarmData, WordLength);
// for (int i = 0; i < WordLength; i++)
// {
// if (sai.IsSaveAlarm[i] == true && binaryAlarmData[i] == 0)
// {
// //更新报警状态
// Entity.PmtAlarmInfo alarmInfo = Cache.CacheHelper.GetPmtAlarmInfoFromCache(sai.AlramPLC, sai.AlarmBlock, sai.AlarmAddress, i);
// if (alarmInfo != null)
// {
// Alarm.AlarmHelper.UpdateAlarmLogData(alarmInfo.Alarm_ID,DateTime.Now.ToString());
// //清除显示的报警列表信息
// if(Global.PublicVar.Instance.AlarmStrList.Exists(x => x == alarmInfo.AlarmName))
// {
// Global.PublicVar.Instance.AlarmStrList.Remove(alarmInfo.AlarmName);
// Global.PublicVar.Instance.isFlashFlag = true;
// Global.PublicVar.Instance.isFlashFlagExtend = true;
// }
// }
// }
// if (binaryAlarmData[i] == 0)
// {
// sai.IsSaveAlarm[i] = false;
// }
// if (sai.IsSaveAlarm[i] == false && binaryAlarmData[i] == 1)
// {
// sai.IsSaveAlarm[i] = true;
// //数据保存
// Entity.PmtAlarmInfo alarmInfo = Cache.CacheHelper.GetPmtAlarmInfoFromCache(sai.AlramPLC, sai.AlarmBlock, sai.AlarmAddress, i);
// if (alarmInfo != null)
// {
// Entity.LR_Alarmlog alarmLogData = new Entity.LR_Alarmlog();
// alarmLogData.Equip_Code = alarmInfo.Equip_Code;
// alarmLogData.Alarm_ID = alarmInfo.Alarm_ID;
// alarmLogData.Alarm_OccurTime = DateTime.Now.ToString();
// alarmLogData.Alarm_ClearTime = String.Empty;
// alarmLogData.Alarm_Status = 1;
// alarmLogData.Alarm_GUID = Guid.NewGuid().ToString().ToUpper();
// Alarm.AlarmHelper.InsertAlarmLogData(alarmLogData);
// Global.PublicVar.Instance.AlarmStrList.Add(alarmInfo.AlarmName);
// Global.PublicVar.Instance.isFlashFlag = true;
// Global.PublicVar.Instance.isFlashFlagExtend = true;
// }
// }
// }
//}
#endregion
foreach(Entity.SimpleAlarmInfo sai in _alarmBlockWordList) foreach (Entity.AlarmInfo info in _alarmInfoList)
{
string address = $"DB{info.AlarmBlock}.DBX{info.AlarmWord}.{info.AlarmBit}";
OperateResult<bool> result = plcBusiness.readBoolValue(address);
ICSharpCode.Core.LoggingService<AlarmSaveHelper>.Debug(string.Format("{0}读取{1}", address, result.IsSuccess == true ? $"成功;读取结果:{result.Content}" : "失败"));
if (result.IsSuccess == true)
{
if (result.Content)
{ {
int[] binaryAlarmData = Mesnac.Basic.DataProcessor.ParseBinaryValue(sai.AlarmData, WordLength); foreach (Entity.SimpleAlarmInfo sai in _alarmBlockWordList)
for (int i = 0; i < WordLength; i++)
{ {
if (sai.IsSaveAlarm[i] == true && binaryAlarmData[i] == 0) if (sai.AlramPLC == info.AlarmPLC && sai.AlarmBlock == info.AlarmBlock && sai.AlarmBit == info.AlarmBit) //匹配数据块
{ {
sai.AlarmData = Convert.ToInt16(result.Content); //对起始字偏移,为当前字的报警值
//更新报警状态 //更新报警状态
Entity.PmtAlarmInfo alarmInfo = Cache.CacheHelper.GetPmtAlarmInfoFromCache(sai.AlramPLC, sai.AlarmBlock, sai.AlarmAddress, i); Entity.PmtAlarmInfo alarmInfo = Cache.CacheHelper.GetPmtAlarmInfoFromCache(sai.AlramPLC, sai.AlarmBlock, sai.AlarmAddress, Convert.ToInt32(sai.AlarmBit));
if (alarmInfo != null) if (alarmInfo != null)
{ {
Alarm.AlarmHelper.UpdateAlarmLogData(alarmInfo.Alarm_ID,DateTime.Now.ToString()); Alarm.AlarmHelper.UpdateAlarmLogData(alarmInfo.Alarm_ID, DateTime.Now.ToString());
//清除显示的报警列表信息 //清除显示的报警列表信息
if(Global.PublicVar.Instance.AlarmStrList.Exists(x => x == alarmInfo.AlarmName)) if (Global.PublicVar.Instance.AlarmStrList.Exists(x => x == alarmInfo.AlarmName))
{ {
Global.PublicVar.Instance.AlarmStrList.Remove(alarmInfo.AlarmName); Global.PublicVar.Instance.AlarmStrList.Remove(alarmInfo.AlarmName);
Global.PublicVar.Instance.isFlashFlag = true; Global.PublicVar.Instance.isFlashFlag = true;
Global.PublicVar.Instance.isFlashFlagExtend = true; Global.PublicVar.Instance.isFlashFlagExtend = true;
} }
}
} //保存报警信息
if (binaryAlarmData[i] == 0)
{
sai.IsSaveAlarm[i] = false;
}
if (sai.IsSaveAlarm[i] == false && binaryAlarmData[i] == 1)
{
sai.IsSaveAlarm[i] = true;
//数据保存
Entity.PmtAlarmInfo alarmInfo = Cache.CacheHelper.GetPmtAlarmInfoFromCache(sai.AlramPLC, sai.AlarmBlock, sai.AlarmAddress, i);
if (alarmInfo != null)
{
Entity.LR_Alarmlog alarmLogData = new Entity.LR_Alarmlog(); Entity.LR_Alarmlog alarmLogData = new Entity.LR_Alarmlog();
alarmLogData.Equip_Code = alarmInfo.Equip_Code; alarmLogData.Equip_Code = alarmInfo.Equip_Code;
alarmLogData.Alarm_ID = alarmInfo.Alarm_ID; alarmLogData.Alarm_ID = alarmInfo.Alarm_ID;
@ -98,7 +144,10 @@ namespace Mesnac.Action.ChemicalWeighing.FinishBatch.SaveHelper
alarmLogData.Alarm_ClearTime = String.Empty; alarmLogData.Alarm_ClearTime = String.Empty;
alarmLogData.Alarm_Status = 1; alarmLogData.Alarm_Status = 1;
alarmLogData.Alarm_GUID = Guid.NewGuid().ToString().ToUpper(); alarmLogData.Alarm_GUID = Guid.NewGuid().ToString().ToUpper();
Alarm.AlarmHelper.InsertAlarmLogData(alarmLogData);
Alarm.AlarmHelper.InsertAlarmLogData(alarmLogData); //这里保存数据库有问题
ICSharpCode.Core.LoggingService<AlarmSaveHelper>.Error("这里保存数据库有问题");
Global.PublicVar.Instance.AlarmStrList.Add(alarmInfo.AlarmName); Global.PublicVar.Instance.AlarmStrList.Add(alarmInfo.AlarmName);
Global.PublicVar.Instance.isFlashFlag = true; Global.PublicVar.Instance.isFlashFlag = true;
Global.PublicVar.Instance.isFlashFlagExtend = true; Global.PublicVar.Instance.isFlashFlagExtend = true;
@ -107,6 +156,9 @@ namespace Mesnac.Action.ChemicalWeighing.FinishBatch.SaveHelper
} }
} }
}
}
#region 触发事件 #region 触发事件
if (OnAlarmSave != null && Global.PublicVar.Instance.isFlashFlag) if (OnAlarmSave != null && Global.PublicVar.Instance.isFlashFlag)
@ -119,8 +171,6 @@ namespace Mesnac.Action.ChemicalWeighing.FinishBatch.SaveHelper
} }
#endregion #endregion
#endregion
} }
} }
} }

@ -110,6 +110,10 @@
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\A3Lib\FastReport\FastReport.VSDesign.dll</HintPath> <HintPath>..\..\..\A3Lib\FastReport\FastReport.VSDesign.dll</HintPath>
</Reference> </Reference>
<Reference Include="HslCommunication, Version=11.0.6.0, Culture=neutral, PublicKeyToken=3d72ad3b6b5ec0e3, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>Z:\Desktop\日常代码\榄菊项目\程序设计\lj_plc\PlugInPlatform\HslCommunication.dll</HintPath>
</Reference>
<Reference Include="ICSharpCode.Core, Version=4.3.0.9338, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="ICSharpCode.Core, Version=4.3.0.9338, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\PlugInPlatform\ICSharpCode.Core.dll</HintPath> <HintPath>..\..\..\PlugInPlatform\ICSharpCode.Core.dll</HintPath>

@ -1,4 +1,5 @@
using System; using HslCommunication;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@ -100,7 +101,7 @@ namespace Mesnac.PlcUtils
/// </summary> /// </summary>
/// <param name="address"></param> /// <param name="address"></param>
/// <returns></returns> /// <returns></returns>
bool readBoolByAddress(string address); OperateResult<bool> readBoolByAddress(string address);
/// <summary> /// <summary>
/// 通过PLC地址写入Bool类型数据 /// 通过PLC地址写入Bool类型数据

@ -359,7 +359,7 @@ namespace Mesnac.PlcUtils.Impl
/// <param name="address"></param> /// <param name="address"></param>
/// <returns></returns> /// <returns></returns>
/// <exception cref="NotImplementedException"></exception> /// <exception cref="NotImplementedException"></exception>
public bool readBoolByAddress(string address) public OperateResult<bool> readBoolByAddress(string address)
{ {
//ICSharpCode.Core.LoggingService<OmronNJPlc>.Debug(String.Format("开始通过PLC地址{0}读取bool类型数据", address)); //ICSharpCode.Core.LoggingService<OmronNJPlc>.Debug(String.Format("开始通过PLC地址{0}读取bool类型数据", address));
try try
@ -368,17 +368,17 @@ namespace Mesnac.PlcUtils.Impl
if (read.IsSuccess) if (read.IsSuccess)
{ {
ICSharpCode.Core.LoggingService<OmronNJPlc>.Debug(String.Format("通过PLC地址{0}读取bool类型数据成功{1}", address, read.Content)); ICSharpCode.Core.LoggingService<OmronNJPlc>.Debug(String.Format("通过PLC地址{0}读取bool类型数据成功{1}", address, read.Content));
return read.Content;
} }
else
{
ICSharpCode.Core.LoggingService<OmronNJPlc>.Debug(String.Format("通过PLC地址{0}读取bool类型数据失败", address)); ICSharpCode.Core.LoggingService<OmronNJPlc>.Debug(String.Format("通过PLC地址{0}读取bool类型数据失败", address));
this.IsConnected = false; }
return false; return read;
} }
catch (Exception ex) catch (Exception ex)
{ {
ICSharpCode.Core.LoggingService<OmronNJPlc>.Error("通过PLC地址读取int32类型数据异常", ex); ICSharpCode.Core.LoggingService<OmronNJPlc>.Error("通过PLC地址读取bool类型数据失败", ex);
this.IsConnected = false; return new OperateResult<bool>() { IsSuccess = false, Content = false };
return false;
} }
} }

@ -21,11 +21,12 @@ namespace Mesnac.PlcUtils.Impl
public SiemensPlc() public SiemensPlc()
{ {
if (!HslCommunication.Authorization.SetAuthorizationCode("30c15272-3960-4853-9fab-3087392ee5cd")) if (!HslCommunication.Authorization.SetAuthorizationCode("ed1415f8-e06a-43ad-95f7-c04f7ae93b41"))
{ {
ICSharpCode.Core.LoggingService<OmronNJPlc>.Error("HslCommunication激活失败"); ICSharpCode.Core.LoggingService<OmronNJPlc>.Error("HslCommunication 11.0.6.0激活失败...");
return; return;
} }
ICSharpCode.Core.LoggingService<OmronNJPlc>.Debug("HslCommunication 11.0.6.0激活成功");
} }
public bool IsConnected { get; set; } public bool IsConnected { get; set; }
@ -348,7 +349,7 @@ namespace Mesnac.PlcUtils.Impl
/// <param name="address"></param> /// <param name="address"></param>
/// <returns></returns> /// <returns></returns>
/// <exception cref="NotImplementedException"></exception> /// <exception cref="NotImplementedException"></exception>
public bool readBoolByAddress(string address) public OperateResult<bool> readBoolByAddress(string address)
{ {
//ICSharpCode.Core.LoggingService<OmronNJPlc>.Debug(String.Format("开始通过PLC地址{0}读取bool类型数据", address)); //ICSharpCode.Core.LoggingService<OmronNJPlc>.Debug(String.Format("开始通过PLC地址{0}读取bool类型数据", address));
try try
@ -357,17 +358,17 @@ namespace Mesnac.PlcUtils.Impl
if (read.IsSuccess) if (read.IsSuccess)
{ {
ICSharpCode.Core.LoggingService<OmronNJPlc>.Debug(String.Format("通过PLC地址{0}读取bool类型数据成功{1}", address, read.Content)); ICSharpCode.Core.LoggingService<OmronNJPlc>.Debug(String.Format("通过PLC地址{0}读取bool类型数据成功{1}", address, read.Content));
return read.Content;
} }
else
{
ICSharpCode.Core.LoggingService<OmronNJPlc>.Debug(String.Format("通过PLC地址{0}读取bool类型数据失败", address)); ICSharpCode.Core.LoggingService<OmronNJPlc>.Debug(String.Format("通过PLC地址{0}读取bool类型数据失败", address));
this.IsConnected = false; }
return false; return read;
} }
catch (Exception ex) catch (Exception ex)
{ {
ICSharpCode.Core.LoggingService<OmronNJPlc>.Error("通过PLC地址读取int32类型数据异常", ex); ICSharpCode.Core.LoggingService<OmronNJPlc>.Error("通过PLC地址读取int32类型数据异常", ex);
this.IsConnected = false; return new OperateResult<bool>() { IsSuccess = false, Content = false };
return false;
} }
} }

@ -1,4 +1,5 @@
using Mesnac.PlcUtils.common; using HslCommunication;
using Mesnac.PlcUtils.common;
using Mesnac.PlcUtils.enumInfo; using Mesnac.PlcUtils.enumInfo;
using Mesnac.PlcUtils.Impl; using Mesnac.PlcUtils.Impl;
using System; using System;
@ -69,7 +70,7 @@ namespace Mesnac.PlcUtils
} }
public bool readBoolValue(string address) public OperateResult<bool> readBoolValue(string address)
{ {
if(plcInstance != null) if(plcInstance != null)
{ {
@ -77,7 +78,10 @@ namespace Mesnac.PlcUtils
} }
else else
{ {
return false; return new OperateResult<bool>() {
IsSuccess = false,
Content = false
};
} }
} }

Loading…
Cancel
Save