1、发送给中控消息增加增加字符编码参数

2、增加报警弹框处理类
master
lhiven 2 years ago
parent 9ac66e349d
commit fd37f833db

@ -0,0 +1,53 @@
using Microsoft.SqlServer.Server;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json;
using Rs.MotionPlat.Flow;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Rs.MotionPlat.Commom.SchedulingAlarms;
using static Rs.MotionPlat.Commom.SchedulingMessageBox;
using System.Threading;
using Rs.MotionPlat.Entitys;
using Rs.Framework;
namespace Rs.MotionPlat.Commom
{
public class AlarmMsg
{
static ETipButton Show(AlarmItem alarmInfo)
{
SchedulingAlarms alarms = new SchedulingAlarms();
alarms.Alarms.Add(alarmInfo);
alarms.GroupID = 0;
alarms.TurnoverID = 0;
alarms.Instruction = EInstruction.SetAlarms;
string content = JsonConvert.SerializeObject(alarms, new StringEnumConverter());
TestCenter.Instance.Send(content, Encoding.UTF8,true);
//信息发出去只有就等待
while (true)
{
AlarmItem? alarm = TestCenter.Instance.GetAlarm(alarmInfo.NO);
if(alarm != null)
{
return alarm.Value.Button;
}
Thread.Sleep(500);
}
}
public static ETipButton Show(int no, AlarmEntity alarmInfo,ETipButton button, Dictionary<ETipButton, string> buttonText)
{
AlarmItem msg = new AlarmItem();
msg.NO = no;
msg.ZH = alarmInfo.CN;
msg.EN = alarmInfo.EN;
msg.KO = alarmInfo.KO;
msg.Button = button;
msg.ButtonContexts = buttonText;
return Show(msg);
}
}
}

@ -6,6 +6,8 @@ using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using static Rs.MotionPlat.Commom.SchedulingAlarms;
using static Rs.MotionPlat.Commom.SchedulingMessageBox;
namespace Rs.MotionPlat.Commom
{
@ -830,6 +832,159 @@ namespace Rs.MotionPlat.Commom
}
public interface IAlarmItem : IEquatable<IAlarmItem>
{
/// <summary>
/// 编号
/// </summary>
int NO { get; }
/// <summary>
/// 报警节点的UID
/// </summary>
long NodeUID { get; }
/// <summary>
/// 报警节点内的所有错误索引
/// </summary>
ISet<int> Indexes { get; }
/// <summary>
/// 标签
/// </summary>
string Tag { get; }
/// <summary>
/// 该报警是否会引发停机
/// </summary>
bool Pause { get; }
/// <summary>
/// 报警等级
/// </summary>
AlarmLevel Level { get; }
/// <summary>
/// 已在别的地方展示,只收录,不弹窗
/// </summary>
bool ShowElsewhere { get; }
/// <summary>
/// 获取报警信息
/// </summary>
/// <param name="culture">区域信息</param>
/// <returns></returns>
string GetMessage(CultureInfo culture);
}
public enum AlarmLevel
{
None, Warn, Alarm, Jam
}
/// <summary>
/// 排料报警
/// </summary>
public class SchedulingAlarms : Scheduling
{
/// <summary>
/// 报警项,如果item1 == item2 将会认作同一报警
/// </summary>
public IList<AlarmItem> Alarms { get; set; } = new List<AlarmItem>();
public struct AlarmItem : IAlarmItem
{
/// <summary>
/// 报警序号
/// </summary>
public int NO { get; set; }
/// <summary>
/// 引发报警的节点UID
/// </summary>
public long NodeUID { get; set; }
/// <summary>
/// 引发报警节点的穴位索引(如:周转盘穴位 3)
/// </summary>
public int? Index
{
get => Indexes?.LastOrDefault(null);
set
{
if (value == null) return;
if (Indexes == null)
Indexes = new HashSet<int>();
HashSet<int> list = Indexes;
if (!list.Contains(value.Value))
{
list.Add(value.Value);
}
}
}
public override bool Equals(object obj) => obj is IAlarmItem other && Equals(other);
/// <summary>
/// 相等比较方法
/// </summary>
/// <param name="other"></param>
/// <returns></returns>
public bool Equals(IAlarmItem other)
=> other != null && NO == other.NO && NodeUID == other.NodeUID && Tag == other.Tag;
/// <summary>
/// 引发报警的节点的穴位索引列表
/// </summary>
public HashSet<int> Indexes { get; set; }
/// <summary>
/// 报警标签
/// </summary>
public string Tag { get; set; }
/// <summary>
/// 该报警是否会造成停机
/// </summary>
public bool Pause { get; set; }
/// <summary>
/// 报警等级
/// </summary>
public AlarmLevel Level { get; set; }
/// <summary>
/// 触发报警(<see cref="EInstruction.SetAlarms"/>)时为报警弹窗显示的按钮,
/// 取消报警<see cref="EInstruction.CancelAlarms"/>时为通过该按钮取消的报警弹窗
/// </summary>
public ETipButton Button { get; set; }
/// <summary>
/// 定制弹窗按钮文本内容
/// </summary>
public Dictionary<ETipButton, string> ButtonContexts { get; set; }
/// <summary>
/// 已在别的地方展示,只收录,不弹窗
/// </summary>
public bool ShowElsewhere { get; set; }
/// <summary>
/// 报警消息英文版
/// </summary>
public string EN { get; set; }
/// <summary>
/// 报警消息中文版
/// </summary>
public string ZH { get; set; }
/// <summary>
/// 报警消息韩文版
/// </summary>
public string KO { get; set; }
ISet<int> IAlarmItem.Indexes => Indexes;
public string GetMessage(CultureInfo culture)
{
switch ((culture ?? CultureInfo.CurrentCulture)?.TwoLetterISOLanguageName.ToLower())
{
case "en": return EN;
case "ko": return string.IsNullOrEmpty(KO) ? KO : ZH;
default: return ZH;
}
}
}
public SchedulingAlarms() { }
public SchedulingAlarms(params AlarmItem[] items) => Alarms = items;
}
/// <summary>
/// 指令
/// </summary>

@ -123,5 +123,13 @@ namespace Rs.MotionPlat.Entitys
/// 韩文
/// </summary>
public string KO { get; set; }
public AlarmEntity Transform(params string[] args)
{
CN = string.Format(CN, args);
EN = string.Format(EN, args);
KO = string.Format(KO, args);
return this;
}
}
}

@ -592,7 +592,7 @@ namespace Rs.MotionPlat.Flow
{
LoadAndUnloadTask.Instance.TestloadTaskArrived = false;
string reportStr = LoadAndUnloadTask.Instance.GetTestLoadString();
TestCenter.Instance.Send(reportStr);
TestCenter.Instance.Send(reportStr,Encoding.ASCII);
LoadAndUnloadTask.Instance.Clear(1);
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
MessageQueue.Instance.Insert("通知中控周转载盘产品已取走,可以继续排料");

@ -13,6 +13,7 @@ using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using static Rs.MotionPlat.Commom.SchedulingAlarms;
using static Rs.MotionPlat.Commom.SchedulingSilo;
using static System.Windows.Forms.AxHost;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
@ -24,6 +25,7 @@ namespace Rs.MotionPlat.Flow
TcpClientHelper client = new TcpClientHelper("127.0.0.1",2048);
SchedulingResult schedulResult = new SchedulingResult();
SchedulingMaterial sm;
Dictionary<int, AlarmItem> alarmInfos = new Dictionary<int, AlarmItem>();
public event Action<string> ReciveTaskEvent;
public event Action<string> ReplayTaskEvent;
private TestCenter() {
@ -244,6 +246,17 @@ namespace Rs.MotionPlat.Flow
case EInstruction.SetAlarms:
break;
case EInstruction.CancelAlarms:
SchedulingAlarms alarms= JsonConvert.DeserializeObject<SchedulingAlarms>(msg);
if(alarms!=null&&alarms.Alarms!=null&&alarms.Alarms.Count>0)
{
foreach (AlarmItem alarm in alarms.Alarms)
{
if(!alarmInfos.ContainsKey(alarm.NO))
{
alarmInfos.Add(alarm.NO, alarm);
}
}
}
break;
case EInstruction.TakingError:
break;
@ -262,6 +275,18 @@ namespace Rs.MotionPlat.Flow
}
public AlarmItem? GetAlarm(int no)
{
AlarmItem? ret = null;
if (alarmInfos.ContainsKey(no))
{
ret = alarmInfos[no];
alarmInfos.Remove(no);
}
return ret;
}
/// <summary>
/// 重排
/// </summary>
@ -484,30 +509,34 @@ namespace Rs.MotionPlat.Flow
public bool LoadResult()
{
string content = LoadAndUnloadTask.Instance.GetLoadString();
return Send(content) > 0;
return Send(content, Encoding.ASCII) > 0;
}
public bool LoadTestLoadResult()
{
string content = LoadAndUnloadTask.Instance.GetTestLoadString();
return Send(content) > 0;
return Send(content, Encoding.ASCII) > 0;
}
public bool LoadTestUnLoadResult()
{
string content = LoadAndUnloadTask.Instance.GetTestUnLoadString();
return Send(content) > 0;
return Send(content, Encoding.ASCII) > 0;
}
public int Send(string content,bool writeLog=true)
public int Send(string content,Encoding encode,bool writeLog=true)
{
int len = client.Send(content);
if(len>0 && writeLog)
while (true)
{
LogHelper.Debug(" <<< " + content);
return len;
int len = client.Send(content, encode);
if (len > 0 && writeLog)
{
LogHelper.Debug(" <<< " + content);
return len;
}
Thread.Sleep(1000);
}
return 0;
}
/// <summary>
/// 上报信息给中控
@ -519,12 +548,12 @@ namespace Rs.MotionPlat.Flow
if(scheduing.Instruction== EInstruction.InquireStatus)
{
string content = JsonConvert.SerializeObject(scheduing, new StringEnumConverter());
return Send(content,false);
return Send(content, Encoding.ASCII,false);
}
else
{
string content = JsonConvert.SerializeObject(scheduing, new StringEnumConverter());
return Send(content);
return Send(content, Encoding.ASCII);
}
}
@ -533,7 +562,7 @@ namespace Rs.MotionPlat.Flow
Scheduling s = new Scheduling();
s.Instruction = EInstruction.EndInput;
string content = JsonConvert.SerializeObject(s, new StringEnumConverter());
Send(content);
Send(content, Encoding.ASCII);
}

@ -133,6 +133,7 @@
</Compile>
<Compile Include="Commom\ActiveForms.cs" />
<Compile Include="Commom\AlarmManager.cs" />
<Compile Include="Commom\AlarmMsg.cs" />
<Compile Include="Commom\AxisAlias.cs" />
<Compile Include="Commom\BarCodeManager.cs" />
<Compile Include="Commom\Enums.cs" />

@ -69,7 +69,7 @@ namespace Rs.MotionPlat.SysConfig
s.Message = "hello";
s.Button = SchedulingMessageBox.ETipButton.RetrySkip;
string content = JsonConvert.SerializeObject(s, new StringEnumConverter());
TestCenter.Instance.Send(content);
TestCenter.Instance.Send(content, Encoding.ASCII);
}
}
}

@ -59,6 +59,7 @@
this.button23 = new System.Windows.Forms.Button();
this.button24 = new System.Windows.Forms.Button();
this.button25 = new System.Windows.Forms.Button();
this.button26 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// btnTurnoverSlotException
@ -371,11 +372,22 @@
this.button25.UseVisualStyleBackColor = true;
this.button25.Click += new System.EventHandler(this.button25_Click);
//
// button26
//
this.button26.Location = new System.Drawing.Point(271, 585);
this.button26.Name = "button26";
this.button26.Size = new System.Drawing.Size(173, 42);
this.button26.TabIndex = 3;
this.button26.Text = "报警弹框测试";
this.button26.UseVisualStyleBackColor = true;
this.button26.Click += new System.EventHandler(this.button26_Click);
//
// TestFrm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1336, 854);
this.Controls.Add(this.button26);
this.Controls.Add(this.button24);
this.Controls.Add(this.button23);
this.Controls.Add(this.button14);
@ -446,5 +458,6 @@
private System.Windows.Forms.Button button23;
private System.Windows.Forms.Button button24;
private System.Windows.Forms.Button button25;
private System.Windows.Forms.Button button26;
}
}

@ -251,5 +251,10 @@ namespace Rs.MotionPlat
}
LogHelper.Debug("已到上方");
}
private void button26_Click(object sender, EventArgs e)
{
AlarmMsg.Show(1001, AlarmCollection.Get(1001).Transform("3", "4"), ETipButton.Yes,null);
}
}
}

Loading…
Cancel
Save