@@ -1,11 +1,15 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||
<PropertyGroup> | <PropertyGroup> | ||||
<TargetFramework>net6.0</TargetFramework> | |||||
<ImplicitUsings>enable</ImplicitUsings> | |||||
<TargetFramework>net6.0-windows</TargetFramework> | |||||
<ImplicitUsings>enable</ImplicitUsings> | |||||
<Nullable>enable</Nullable> | <Nullable>enable</Nullable> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | |||||
<ProjectReference Include="..\BPASmartClient.MessageName\BPASmartClient.MessageName.csproj" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | <ItemGroup> | ||||
<Reference Include="Antlr3.Runtime"> | <Reference Include="Antlr3.Runtime"> | ||||
<HintPath>DLL\Antlr3.Runtime.dll</HintPath> | <HintPath>DLL\Antlr3.Runtime.dll</HintPath> | ||||
@@ -1,5 +1,7 @@ | |||||
using System; | |||||
using BPASmartClient.MessageName.接收消息Model; | |||||
using System; | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Collections.ObjectModel; | |||||
using System.Linq; | using System.Linq; | ||||
using System.Text; | using System.Text; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
@@ -20,5 +22,9 @@ namespace BPASmartClient.Compiler | |||||
/// 控件类型 | /// 控件类型 | ||||
/// </summary> | /// </summary> | ||||
string ControlType { get; } | string ControlType { get; } | ||||
///// <summary> | |||||
///// 消息名称 | |||||
///// </summary> | |||||
//ObservableCollection<EventReceiveMessage> EventNameList { get; } | |||||
} | } | ||||
} | } |
@@ -1,13 +1,16 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||
<PropertyGroup> | <PropertyGroup> | ||||
<TargetFramework>net6.0</TargetFramework> | |||||
<TargetFramework>net6.0-windows</TargetFramework> | |||||
<ImplicitUsings>enable</ImplicitUsings> | <ImplicitUsings>enable</ImplicitUsings> | ||||
<Nullable>enable</Nullable> | <Nullable>enable</Nullable> | ||||
<UseWPF>true</UseWPF> | |||||
<UseWindowsForms>true</UseWindowsForms> | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<Folder Include="发送消息Model\" /> | |||||
<PackageReference Include="System.Reflection" Version="4.3.0" /> | |||||
<PackageReference Include="System.Reflection.Emit" Version="4.7.0" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
</Project> | </Project> |
@@ -1,29 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.ComponentModel; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmartClient.MessageName | |||||
{ | |||||
/// <summary> | |||||
/// 数据订阅主题管理中心 | |||||
/// </summary> | |||||
public class DataName | |||||
{ | |||||
#region XX数据 | |||||
/// <summary> | |||||
/// xxx消息 | |||||
/// </summary> | |||||
[Category("测试"), Description("消息备注"), Browsable(true)] | |||||
public static string xxx = "xxx"; | |||||
/// <summary> | |||||
/// xxx消息 | |||||
/// </summary> | |||||
[Category("测试"), Description("消息备注1"), Browsable(true)] | |||||
public static string 测试 = "测试"; | |||||
#endregion | |||||
} | |||||
} |
@@ -0,0 +1,105 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.ComponentModel; | |||||
using System.Linq; | |||||
using System.Reflection; | |||||
using System.Reflection.Emit; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
using System.Windows.Controls; | |||||
namespace BPASmartClient.MessageName.EnumHelp | |||||
{ | |||||
/// <summary> | |||||
/// 枚举 | |||||
/// </summary> | |||||
public static class EnumExtensions | |||||
{ | |||||
public static int jishu = 0; | |||||
/// <summary> | |||||
/// 根据控件-》创建枚举类型 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
public static Type CreatEnumType(UIElementCollection list) | |||||
{ | |||||
var currentDomain = AppDomain.CurrentDomain; | |||||
var assembly = Assembly.GetExecutingAssembly(); | |||||
var assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assembly!.GetName(), AssemblyBuilderAccess.Run); | |||||
var moduleBuilder = assemblyBuilder.DefineDynamicModule(assembly.GetName().Name!); | |||||
var em = moduleBuilder.DefineEnum($"Control_{((Convert.ToInt32(jishu) + 1).ToString().PadLeft(4, '0'))}", TypeAttributes.Public, typeof(string)); | |||||
foreach (var item in list) | |||||
{ | |||||
if (item is System.Windows.Controls.Control e) | |||||
{ | |||||
if (e.Tag != null) | |||||
{ | |||||
em.DefineLiteral(e.Tag.ToString(), e.Tag.ToString()); | |||||
} | |||||
} | |||||
} | |||||
em.DefineLiteral("空", "空"); | |||||
Type finished = em.CreateType()!; | |||||
return finished; | |||||
//foreach (object o in Enum.GetValues(finished)) | |||||
//{ | |||||
// Console.WriteLine($"{finished}.{o} = {(int)o};"); | |||||
//} | |||||
} | |||||
/// <summary> | |||||
/// 根据枚举int值获取枚举名称 | |||||
/// </summary> | |||||
/// <typeparam name="T">枚举类型</typeparam> | |||||
/// <param name="status">枚举值</param> | |||||
/// <returns></returns> | |||||
public static string GetEnumName<T>(this int status) | |||||
{ | |||||
return Enum.GetName(typeof(T), status); | |||||
} | |||||
/// <summary> | |||||
/// 获取枚举变量值的 Description 属性 | |||||
/// </summary> | |||||
/// <param name="obj">枚举变量</param> | |||||
/// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns> | |||||
public static string GetDescription(this Enum obj) | |||||
{ | |||||
return GetDescription(obj, false); | |||||
} | |||||
/// <summary> | |||||
/// 获取枚举变量值的 Description 属性 | |||||
/// </summary> | |||||
/// <param name="obj">枚举变量</param> | |||||
/// <param name="isTop">是否改变为返回该类、枚举类型的头 Description 属性,而不是当前的属性或枚举变量值的 Description 属性</param> | |||||
/// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns> | |||||
public static string GetDescription(this Enum obj, bool isTop) | |||||
{ | |||||
if (obj == null) | |||||
{ | |||||
return string.Empty; | |||||
} | |||||
Type enumType = obj.GetType(); | |||||
DescriptionAttribute dna; | |||||
if (isTop) | |||||
{ | |||||
dna = (DescriptionAttribute)Attribute.GetCustomAttribute(enumType, typeof(DescriptionAttribute)); | |||||
} | |||||
else | |||||
{ | |||||
FieldInfo fi = enumType.GetField(System.Enum.GetName(enumType, obj)); | |||||
dna = (DescriptionAttribute)Attribute.GetCustomAttribute( | |||||
fi, typeof(DescriptionAttribute)); | |||||
} | |||||
if ((dna != null) | |||||
&& (string.IsNullOrEmpty(dna.Description) == false)) | |||||
{ | |||||
return dna.Description; | |||||
} | |||||
return obj.ToString(); | |||||
} | |||||
} | |||||
} |
@@ -4,7 +4,7 @@ using System.Linq; | |||||
using System.Text; | using System.Text; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
namespace BPASmartClient.MessageName.Enum.运行状态 | |||||
namespace BPASmartClient.MessageName.EnumHelp | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 运行状态-枚举 | /// 运行状态-枚举 |
@@ -1,4 +1,6 @@ | |||||
using System.ComponentModel; | using System.ComponentModel; | ||||
using System.Reflection; | |||||
using System.Reflection.Emit; | |||||
namespace BPASmartClient.MessageName | namespace BPASmartClient.MessageName | ||||
{ | { | ||||
@@ -71,9 +73,39 @@ namespace BPASmartClient.MessageName | |||||
/// </summary> | /// </summary> | ||||
ConveyorBeltRunStatus, | ConveyorBeltRunStatus, | ||||
} | |||||
/// <summary> | |||||
/// 消息基类 | |||||
/// </summary> | |||||
public class MessageBase | |||||
{ | |||||
/// <summary> | |||||
/// 消息号 | |||||
/// </summary> | |||||
public string MeaageID { get; set; } | |||||
// <summary> | |||||
/// 消息名称:枚举 | |||||
/// </summary> | |||||
public MessageNameEnum MeaageName { get; set; } | |||||
public MessageBase() | |||||
{ | |||||
MeaageID = GetMessageID.GetID(); | |||||
} | |||||
} | } | ||||
/// <summary> | |||||
/// 四位消息号 | |||||
/// </summary> | |||||
public static class GetMessageID | |||||
{ | |||||
public static int i = 0; | |||||
public static string GetID() | |||||
{ | |||||
i++; | |||||
return ((Convert.ToInt32(i) + 1).ToString().PadLeft(8, '0')); | |||||
} | |||||
} | |||||
} | } |
@@ -0,0 +1,61 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmartClient.MessageName.发送消息Model | |||||
{ | |||||
/// <summary> | |||||
/// 事件消息【发送端】Model配置 | |||||
/// </summary> | |||||
public class EventSendMessage: MessageBase | |||||
{ | |||||
/// <summary> | |||||
/// 控件类型 | |||||
/// </summary> | |||||
public ControlEventType EventType { get; set; } | |||||
/// <summary> | |||||
/// 控件名称 | |||||
/// </summary> | |||||
public object ControlName { get; set; } | |||||
/// <summary> | |||||
/// 控件标题 | |||||
/// </summary> | |||||
public string ControlTitle { get; set; } | |||||
/// <summary> | |||||
/// 控件触发源 | |||||
/// </summary> | |||||
public string ControlSource { get; set; } | |||||
/// <summary> | |||||
/// 控件状态 | |||||
/// </summary> | |||||
public string ControlStatus { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// 控件类型 | |||||
/// </summary> | |||||
public enum ControlEventType | |||||
{ | |||||
/// <summary> | |||||
/// 单击 | |||||
/// </summary> | |||||
Click, | |||||
/// <summary> | |||||
/// 左键按下 | |||||
/// </summary> | |||||
MouseLeftButtonDown, | |||||
/// <summary> | |||||
/// 文本改变事件 | |||||
/// </summary> | |||||
TextChanged, | |||||
/// <summary> | |||||
/// 选中 | |||||
/// </summary> | |||||
Checked, | |||||
/// <summary> | |||||
/// 取消选中 | |||||
/// </summary> | |||||
Unchecked, | |||||
} | |||||
} |
@@ -7,43 +7,17 @@ using System.Threading.Tasks; | |||||
namespace BPASmartClient.MessageName.接收消息Model | namespace BPASmartClient.MessageName.接收消息Model | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 事件消息Model:配置 | |||||
/// 事件消息[接收端]Model:配置 | |||||
/// </summary> | /// </summary> | ||||
public class EventReceiveMessage | |||||
public class EventReceiveMessage: MessageBase | |||||
{ | { | ||||
/// <summary> | |||||
/// 消息号 | |||||
/// </summary> | |||||
public string MeaageID { get; set; } | |||||
/// <summary> | |||||
/// 消息名称:枚举 | |||||
/// </summary> | |||||
public MessageNameEnum Name { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 空:保留 | /// 空:保留 | ||||
/// </summary> | /// </summary> | ||||
public string Value { get; set; } | public string Value { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 消息标题 | |||||
/// 消息标题:标志控件说明 | |||||
/// </summary> | /// </summary> | ||||
public string Title { get; set; } | public string Title { get; set; } | ||||
public EventReceiveMessage() | |||||
{ | |||||
MeaageID=GetMessageID.GetID(); | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// 四位消息号 | |||||
/// </summary> | |||||
public static class GetMessageID | |||||
{ | |||||
public static int i = 0; | |||||
public static string GetID() | |||||
{ | |||||
i++; | |||||
return ((Convert.ToInt32(i) + 1).ToString().PadLeft(4, '0')); | |||||
} | |||||
} | } | ||||
} | } |
@@ -3,11 +3,14 @@ | |||||
<PropertyGroup> | <PropertyGroup> | ||||
<TargetFramework>net6.0-windows</TargetFramework> | <TargetFramework>net6.0-windows</TargetFramework> | ||||
<Nullable>enable</Nullable> | <Nullable>enable</Nullable> | ||||
<UseWPF>true</UseWPF> | |||||
<UseWPF>true</UseWPF> | |||||
<UseWindowsForms>true</UseWindowsForms> | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<None Remove="Images\借出.png" /> | |||||
<None Remove="Images\光柱.png" /> | <None Remove="Images\光柱.png" /> | ||||
<None Remove="Images\退出.png" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
@@ -32,7 +35,9 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<Resource Include="Images\借出.png" /> | |||||
<Resource Include="Images\光柱.png" /> | <Resource Include="Images\光柱.png" /> | ||||
<Resource Include="Images\退出.png" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
</Project> | </Project> |
@@ -2,7 +2,7 @@ | |||||
using BPASmartClient.MessageCommunication; | using BPASmartClient.MessageCommunication; | ||||
using BPASmartClient.MessageCommunication.MsgControl; | using BPASmartClient.MessageCommunication.MsgControl; | ||||
using BPASmartClient.MessageName; | using BPASmartClient.MessageName; | ||||
using BPASmartClient.MessageName.Enum.运行状态; | |||||
using BPASmartClient.MessageName.EnumHelp; | |||||
using BPASmartClient.MessageName.接收消息Model; | using BPASmartClient.MessageName.接收消息Model; | ||||
using BPASmartClient.MessageName.接收消息Model.滚动线; | using BPASmartClient.MessageName.接收消息Model.滚动线; | ||||
using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
@@ -347,7 +347,7 @@ namespace BPASmartClient.SCADAControl | |||||
{ | { | ||||
EventNameList?.ToList().ForEach(x => | EventNameList?.ToList().ForEach(x => | ||||
{ | { | ||||
Class_InnerMessageBus.GetInstance().ListenMessage(this, x.Name.ToString(), "EventHandler"); | |||||
Class_InnerMessageBus.GetInstance().ListenMessage(this, x.MeaageName.ToString(), "EventHandler"); | |||||
}); | }); | ||||
} | } | ||||
} | } | ||||
@@ -361,7 +361,7 @@ namespace BPASmartClient.SCADAControl | |||||
if (e.obj_MessageObj is RunEnumModel)//接收到运行消息 | if (e.obj_MessageObj is RunEnumModel)//接收到运行消息 | ||||
{ | { | ||||
RunEnumModel mode = (RunEnumModel)e.obj_MessageObj; | RunEnumModel mode = (RunEnumModel)e.obj_MessageObj; | ||||
var msg = EventNameList?.ToList().Find(par => par.Name.ToString() == e.str_MessageStr && par.MeaageID == mode.MessageID); | |||||
var msg = EventNameList?.ToList().Find(par => par.MeaageName.ToString() == e.str_MessageStr && par.MeaageID == mode.MessageID); | |||||
//必对消息号: | //必对消息号: | ||||
if (msg != null) | if (msg != null) | ||||
{ | { | ||||
@@ -371,7 +371,7 @@ namespace BPASmartClient.SCADAControl | |||||
else if (e.obj_MessageObj is ConveyorBeltMessageModel)//接收到数据模型 | else if (e.obj_MessageObj is ConveyorBeltMessageModel)//接收到数据模型 | ||||
{ | { | ||||
ConveyorBeltMessageModel mode = (ConveyorBeltMessageModel)e.obj_MessageObj; | ConveyorBeltMessageModel mode = (ConveyorBeltMessageModel)e.obj_MessageObj; | ||||
var msg = EventNameList?.ToList().Find(par => par.Name.ToString() == e.str_MessageStr && par.MeaageID == mode.MessageID); | |||||
var msg = EventNameList?.ToList().Find(par => par.MeaageName.ToString() == e.str_MessageStr && par.MeaageID == mode.MessageID); | |||||
//必对消息号: | //必对消息号: | ||||
if (msg != null) | if (msg != null) | ||||
{ | { | ||||
@@ -5,7 +5,7 @@ | |||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | ||||
xmlns:local="clr-namespace:BPASmartClient.SCADAControl" | xmlns:local="clr-namespace:BPASmartClient.SCADAControl" | ||||
mc:Ignorable="d" | mc:Ignorable="d" | ||||
d:DesignHeight="270" d:DesignWidth="180" > | |||||
d:DesignHeight="270" d:DesignWidth="180" > | |||||
<Grid> | <Grid> | ||||
<Grid.RowDefinitions> | <Grid.RowDefinitions> | ||||
<RowDefinition /> | <RowDefinition /> | ||||
@@ -18,7 +18,7 @@ d:DesignHeight="270" d:DesignWidth="180" > | |||||
FontSize="20" | FontSize="20" | ||||
Foreground="#FF1FD622" | Foreground="#FF1FD622" | ||||
Tag="出料控制" | Tag="出料控制" | ||||
Text="出料中..." Visibility="Collapsed" /> | |||||
Text="出料中..." Visibility="Collapsed"/> | |||||
<Ellipse Grid.Row="0" Tag="出料圆" Margin="0,40,0,0" Visibility="Collapsed" StrokeThickness="60" Width="150" Height="70" RenderTransformOrigin="0.5,0.5" VerticalAlignment="Top"> | <Ellipse Grid.Row="0" Tag="出料圆" Margin="0,40,0,0" Visibility="Collapsed" StrokeThickness="60" Width="150" Height="70" RenderTransformOrigin="0.5,0.5" VerticalAlignment="Top"> | ||||
<Ellipse.RenderTransform> | <Ellipse.RenderTransform> | ||||
<TransformGroup> | <TransformGroup> | ||||
@@ -37,6 +37,8 @@ d:DesignHeight="270" d:DesignWidth="180" > | |||||
</LinearGradientBrush> | </LinearGradientBrush> | ||||
</Ellipse.Stroke> | </Ellipse.Stroke> | ||||
</Ellipse> | </Ellipse> | ||||
<TextBlock | <TextBlock | ||||
HorizontalAlignment="Center" | HorizontalAlignment="Center" | ||||
VerticalAlignment="Bottom" | VerticalAlignment="Bottom" | ||||
@@ -69,6 +71,12 @@ d:DesignHeight="270" d:DesignWidth="180" > | |||||
Grid.RowSpan="2" | Grid.RowSpan="2" | ||||
Source="/BPASmartClient.SCADAControl;component/Images/光柱.png" | Source="/BPASmartClient.SCADAControl;component/Images/光柱.png" | ||||
Stretch="Fill" /> | Stretch="Fill" /> | ||||
<ListBox Visibility="Collapsed" ItemsSource="{Binding EventNameList,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></ListBox> | |||||
<StackPanel Tag="ControlEvent" HorizontalAlignment="Left" Orientation="Horizontal" Grid.Row="1" VerticalAlignment="Bottom" > | |||||
<Image Margin="10,10,0,0" Tag="出料" Source="/BPASmartClient.SCADAControl;component/Images/借出.png" Cursor="Hand" ToolTip="出料" Width="24" ></Image> | |||||
<Image Margin="10,10,0,0" Tag="停止出料" Source="/BPASmartClient.SCADAControl;component/Images/退出.png" Cursor="Hand" Width="24" ToolTip="停止出料"></Image> | |||||
<Button Margin="10,10,0,0" Tag="出料">出料</Button> | |||||
<TextBox Width="50" Tag="文本改变" TextChanged="TextBox_TextChanged" ></TextBox> | |||||
<CheckBox Checked="CheckBox_Checked" Tag="是否选中" Unchecked="CheckBox_Unchecked"></CheckBox> | |||||
</StackPanel> | |||||
</Grid> | </Grid> | ||||
</UserControl> | </UserControl> |
@@ -2,7 +2,8 @@ | |||||
using BPASmartClient.MessageCommunication; | using BPASmartClient.MessageCommunication; | ||||
using BPASmartClient.MessageCommunication.MsgControl; | using BPASmartClient.MessageCommunication.MsgControl; | ||||
using BPASmartClient.MessageName; | using BPASmartClient.MessageName; | ||||
using BPASmartClient.MessageName.Enum.运行状态; | |||||
using BPASmartClient.MessageName.EnumHelp; | |||||
using BPASmartClient.MessageName.发送消息Model; | |||||
using BPASmartClient.MessageName.接收消息Model; | using BPASmartClient.MessageName.接收消息Model; | ||||
using BPASmartClient.MessageName.接收消息Model.物料仓; | using BPASmartClient.MessageName.接收消息Model.物料仓; | ||||
using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
@@ -11,6 +12,7 @@ using System.Collections; | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Collections.ObjectModel; | using System.Collections.ObjectModel; | ||||
using System.ComponentModel; | using System.ComponentModel; | ||||
using System.Drawing.Design; | |||||
using System.Linq; | using System.Linq; | ||||
using System.Text; | using System.Text; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
@@ -42,6 +44,8 @@ namespace BPASmartClient.SCADAControl | |||||
Ellipse ellipseControl = null; | Ellipse ellipseControl = null; | ||||
Storyboard storyboard = new Storyboard(); | Storyboard storyboard = new Storyboard(); | ||||
object typeName; | |||||
#endregion | #endregion | ||||
public Silos() | public Silos() | ||||
@@ -53,10 +57,27 @@ namespace BPASmartClient.SCADAControl | |||||
this.Loaded += Silos_Loaded; | this.Loaded += Silos_Loaded; | ||||
} | } | ||||
private void Silos_Loaded(object sender, RoutedEventArgs e) | private void Silos_Loaded(object sender, RoutedEventArgs e) | ||||
{ | { | ||||
Silos_SizeChanged(null, null); | |||||
Loading(); | |||||
EventNameList.CollectionChanged += EventNameList_CollectionChanged; | EventNameList.CollectionChanged += EventNameList_CollectionChanged; | ||||
EventSendNameList.CollectionChanged += EventSendNameList_CollectionChanged; | |||||
} | |||||
private void EventSendNameList_CollectionChanged(object? sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) | |||||
{ | |||||
if (EventSendNameList.Count > 0) | |||||
{ | |||||
try | |||||
{ | |||||
EventSendNameListStr = JsonConvert.SerializeObject(EventSendNameList); | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
} | |||||
} | |||||
} | } | ||||
private void EventNameList_CollectionChanged(object? sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) | private void EventNameList_CollectionChanged(object? sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) | ||||
@@ -97,7 +118,7 @@ namespace BPASmartClient.SCADAControl | |||||
/// </summary> | /// </summary> | ||||
/// <param name="sender"></param> | /// <param name="sender"></param> | ||||
/// <param name="e"></param> | /// <param name="e"></param> | ||||
private void Silos_SizeChanged(object sender, SizeChangedEventArgs e) | |||||
public void Loading() | |||||
{ | { | ||||
//查找 | //查找 | ||||
if (ellipseControl == null) | if (ellipseControl == null) | ||||
@@ -136,6 +157,39 @@ namespace BPASmartClient.SCADAControl | |||||
} | } | ||||
} | } | ||||
} | } | ||||
foreach (StackPanel tb in FindVisualChildren<StackPanel>(this)) | |||||
{ | |||||
// do something with tb here | |||||
if (tb.Tag != null) | |||||
{ | |||||
if (tb.Tag.ToString() == "ControlEvent") | |||||
{ | |||||
foreach (var item in tb.Children) | |||||
{ | |||||
if (item is Image) | |||||
{ | |||||
(item as Image).MouseLeftButtonDown += Image_MouseLeftButtonDown; | |||||
} | |||||
else if (item is Button) | |||||
{ | |||||
(item as Button).Click += Button_Click; | |||||
} | |||||
else if (item is TextBox) | |||||
{ | |||||
(item as TextBox).TextChanged += TextBox_TextChanged; | |||||
} | |||||
else if (item is CheckBox) | |||||
{ | |||||
(item as CheckBox).Checked += CheckBox_Checked; | |||||
(item as CheckBox).Unchecked += CheckBox_Unchecked; | |||||
} | |||||
} | |||||
//Type _typeName =EnumExtensions.CreatEnumType(tb.Children); | |||||
//typeName = _typeName.Assembly.CreateInstance(_typeName.FullName); | |||||
} | |||||
} | |||||
} | |||||
} | } | ||||
storyboard.RepeatBehavior = RepeatBehavior.Forever; | storyboard.RepeatBehavior = RepeatBehavior.Forever; | ||||
DoubleAnimationUsingKeyFrames animation = new DoubleAnimationUsingKeyFrames(); | DoubleAnimationUsingKeyFrames animation = new DoubleAnimationUsingKeyFrames(); | ||||
@@ -146,6 +200,8 @@ namespace BPASmartClient.SCADAControl | |||||
animation.KeyFrames.Add(new EasingDoubleKeyFrame(360, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2)))); | animation.KeyFrames.Add(new EasingDoubleKeyFrame(360, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2)))); | ||||
storyboard.Children.Add(animation); | storyboard.Children.Add(animation); | ||||
} | } | ||||
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject | public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject | ||||
{ | { | ||||
if (depObj != null) | if (depObj != null) | ||||
@@ -196,16 +252,16 @@ namespace BPASmartClient.SCADAControl | |||||
public static readonly DependencyProperty TitleProperty = | public static readonly DependencyProperty TitleProperty = | ||||
DependencyProperty.Register("Title", typeof(string), typeof(Silos), new PropertyMetadata(new PropertyChangedCallback(onTargetChanged))); | DependencyProperty.Register("Title", typeof(string), typeof(Silos), new PropertyMetadata(new PropertyChangedCallback(onTargetChanged))); | ||||
[Category("消息名称")] | |||||
public string EventNameListStr | |||||
[Category("名称[自动生成]")] | |||||
private string EventNameListStr | |||||
{ | { | ||||
get { return (string)GetValue(EventNameListStrProperty); } | get { return (string)GetValue(EventNameListStrProperty); } | ||||
set { SetValue(EventNameListStrProperty, value); } | set { SetValue(EventNameListStrProperty, value); } | ||||
} | } | ||||
public static readonly DependencyProperty EventNameListStrProperty = | |||||
private static readonly DependencyProperty EventNameListStrProperty = | |||||
DependencyProperty.Register("EventNameListStr", typeof(string), typeof(Silos), new PropertyMetadata(string.Empty)); | DependencyProperty.Register("EventNameListStr", typeof(string), typeof(Silos), new PropertyMetadata(string.Empty)); | ||||
[Category("消息名称集合")] | |||||
[Category("消息接收名称集合")] | |||||
public ObservableCollection<EventReceiveMessage> EventNameList | public ObservableCollection<EventReceiveMessage> EventNameList | ||||
{ | { | ||||
get { return (ObservableCollection<EventReceiveMessage>)GetValue(EventNameListProperty); } | get { return (ObservableCollection<EventReceiveMessage>)GetValue(EventNameListProperty); } | ||||
@@ -215,6 +271,24 @@ namespace BPASmartClient.SCADAControl | |||||
DependencyProperty.Register("EventNameList", typeof(ObservableCollection<EventReceiveMessage>), typeof(Silos), new PropertyMetadata(new ObservableCollection<EventReceiveMessage>(), new PropertyChangedCallback(onEventNameListChanged))); | DependencyProperty.Register("EventNameList", typeof(ObservableCollection<EventReceiveMessage>), typeof(Silos), new PropertyMetadata(new ObservableCollection<EventReceiveMessage>(), new PropertyChangedCallback(onEventNameListChanged))); | ||||
private static void onEventNameListChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => (d as Silos)?.DataNameRefresh(); | private static void onEventNameListChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => (d as Silos)?.DataNameRefresh(); | ||||
[Category("名称[自动生成]")] | |||||
private string EventSendNameListStr | |||||
{ | |||||
get { return (string)GetValue(EventSendNameListStrProperty); } | |||||
set { SetValue(EventSendNameListStrProperty, value); } | |||||
} | |||||
private static readonly DependencyProperty EventSendNameListStrProperty = | |||||
DependencyProperty.Register("EventSendNameListStr", typeof(string), typeof(Silos), new PropertyMetadata(string.Empty)); | |||||
[Category("消息发送名称集合")] | |||||
public ObservableCollection<EventSendMessage> EventSendNameList | |||||
{ | |||||
get { return (ObservableCollection<EventSendMessage>)GetValue(EventSendNameListProperty); } | |||||
set { SetValue(EventSendNameListProperty, value); } | |||||
} | |||||
public static readonly DependencyProperty EventSendNameListProperty = | |||||
DependencyProperty.Register("EventSendNameList", typeof(ObservableCollection<EventSendMessage>), typeof(Silos), new PropertyMetadata(new ObservableCollection<EventSendMessage>(), new PropertyChangedCallback(onEventNameListChanged))); | |||||
[Category("值设定")] | [Category("值设定")] | ||||
public int Direction | public int Direction | ||||
{ | { | ||||
@@ -244,7 +318,6 @@ namespace BPASmartClient.SCADAControl | |||||
} | } | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 值变化刷新 | /// 值变化刷新 | ||||
/// </summary> | /// </summary> | ||||
@@ -309,9 +382,21 @@ namespace BPASmartClient.SCADAControl | |||||
{ | { | ||||
EventNameList?.ToList().ForEach(x => | EventNameList?.ToList().ForEach(x => | ||||
{ | { | ||||
Class_InnerMessageBus.GetInstance().ListenMessage(this, x.Name.ToString(), "EventHandler"); | |||||
Class_InnerMessageBus.GetInstance().ListenMessage(this, x.MeaageName.ToString(), "EventHandler"); | |||||
}); | }); | ||||
} | } | ||||
if (!string.IsNullOrEmpty(EventSendNameListStr)) | |||||
{ | |||||
try | |||||
{ | |||||
EventSendNameList = JsonConvert.DeserializeObject<ObservableCollection<EventSendMessage>>(EventSendNameListStr); | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
} | |||||
} | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 统一事件消息处理中心 | /// 统一事件消息处理中心 | ||||
@@ -327,7 +412,7 @@ namespace BPASmartClient.SCADAControl | |||||
if (e.obj_MessageObj is RunEnumModel)//接收到运行消息 | if (e.obj_MessageObj is RunEnumModel)//接收到运行消息 | ||||
{ | { | ||||
RunEnumModel mode = (RunEnumModel)e.obj_MessageObj; | RunEnumModel mode = (RunEnumModel)e.obj_MessageObj; | ||||
var msg = EventNameList?.ToList().Find(par => par.Name.ToString() == e.str_MessageStr && par.MeaageID == mode.MessageID); | |||||
var msg = EventNameList?.ToList().Find(par => par.MeaageName.ToString() == e.str_MessageStr && par.MeaageID == mode.MessageID); | |||||
//必对消息号: | //必对消息号: | ||||
if (msg!=null) | if (msg!=null) | ||||
{ | { | ||||
@@ -336,7 +421,7 @@ namespace BPASmartClient.SCADAControl | |||||
}else if (e.obj_MessageObj is SilosMessageModel)//接收到数据模型 | }else if (e.obj_MessageObj is SilosMessageModel)//接收到数据模型 | ||||
{ | { | ||||
SilosMessageModel mode = (SilosMessageModel)e.obj_MessageObj; | SilosMessageModel mode = (SilosMessageModel)e.obj_MessageObj; | ||||
var msg = EventNameList?.ToList().Find(par => par.Name.ToString() == e.str_MessageStr && par.MeaageID == mode.MessageID); | |||||
var msg = EventNameList?.ToList().Find(par => par.MeaageName.ToString() == e.str_MessageStr && par.MeaageID == mode.MessageID); | |||||
//必对消息号: | //必对消息号: | ||||
if (msg != null) | if (msg != null) | ||||
{ | { | ||||
@@ -353,6 +438,67 @@ namespace BPASmartClient.SCADAControl | |||||
} | } | ||||
#endregion | #endregion | ||||
} | |||||
#region 发送消息事件 | |||||
/// <summary> | |||||
/// 按钮按下 | |||||
/// </summary> | |||||
/// <param name="sender"></param> | |||||
/// <param name="e"></param> | |||||
private void Image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) | |||||
{ | |||||
try | |||||
{ | |||||
Image image = sender as Image; | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// 按钮类型 | |||||
/// </summary> | |||||
/// <param name="sender"></param> | |||||
/// <param name="e"></param> | |||||
private void Button_Click(object sender, RoutedEventArgs e) | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 值改变 | |||||
/// </summary> | |||||
/// <param name="sender"></param> | |||||
/// <param name="e"></param> | |||||
private void TextBox_TextChanged(object sender, TextChangedEventArgs e) | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 选中 | |||||
/// </summary> | |||||
/// <param name="sender"></param> | |||||
/// <param name="e"></param> | |||||
private void CheckBox_Checked(object sender, RoutedEventArgs e) | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 取消选中 | |||||
/// </summary> | |||||
/// <param name="sender"></param> | |||||
/// <param name="e"></param> | |||||
private void CheckBox_Unchecked(object sender, RoutedEventArgs e) | |||||
{ | |||||
} | |||||
#endregion | |||||
} | |||||
} | } |
@@ -1,6 +1,7 @@ | |||||
using BPASmartClient.MessageCommunication; | using BPASmartClient.MessageCommunication; | ||||
using BPASmartClient.MessageName; | using BPASmartClient.MessageName; | ||||
using BPASmartClient.MessageName.Enum.运行状态; | |||||
using BPASmartClient.MessageName.EnumHelp; | |||||
using BPASmartClient.MessageName.接收消息Model; | |||||
using BPASmartClient.MessageName.接收消息Model.物料仓; | using BPASmartClient.MessageName.接收消息Model.物料仓; | ||||
using Microsoft.Win32; | using Microsoft.Win32; | ||||
using System; | using System; | ||||
@@ -27,7 +28,14 @@ namespace SCADA.Test | |||||
/// </summary> | /// </summary> | ||||
public partial class MainWindow : Window | public partial class MainWindow : Window | ||||
{ | { | ||||
/// <summary> | |||||
/// 控件集合 | |||||
/// </summary> | |||||
List<FrameworkElement> Children = new List<FrameworkElement>(); | List<FrameworkElement> Children = new List<FrameworkElement>(); | ||||
/// <summary> | |||||
/// 接收消息集合 | |||||
/// </summary> | |||||
List<EventReceiveMessage> eventReceiveMessages = new List<EventReceiveMessage>(); | |||||
public MainWindow() | public MainWindow() | ||||
{ | { | ||||
@@ -61,7 +69,7 @@ namespace SCADA.Test | |||||
} | } | ||||
if (Children.Count > 0) | if (Children.Count > 0) | ||||
{ | { | ||||
runCanvas.Run(Children); | |||||
eventReceiveMessages = runCanvas.Run(Children); | |||||
} | } | ||||
} | } | ||||
@@ -1,4 +1,5 @@ | |||||
using BPASmartClient.Compiler; | using BPASmartClient.Compiler; | ||||
using BPASmartClient.MessageName.接收消息Model; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Linq; | using System.Linq; | ||||
@@ -41,8 +42,9 @@ namespace SCADA.Test | |||||
} | } | ||||
} | } | ||||
public void Run(List<FrameworkElement> canvas) | |||||
public List<EventReceiveMessage> Run(List<FrameworkElement> canvas) | |||||
{ | { | ||||
List<EventReceiveMessage> messages=new List<EventReceiveMessage>(); | |||||
RootCanvas.Children.Clear(); | RootCanvas.Children.Clear(); | ||||
foreach (FrameworkElement element in canvas) | foreach (FrameworkElement element in canvas) | ||||
{ | { | ||||
@@ -52,11 +54,17 @@ namespace SCADA.Test | |||||
} | } | ||||
if (element is IExecutable executable) | if (element is IExecutable executable) | ||||
{ | |||||
executable.IsExecuteState = true; | executable.IsExecuteState = true; | ||||
//if (executable.EventNameList != null && executable.EventNameList.Count > 0) | |||||
//{ | |||||
// messages.AddRange(executable.EventNameList); | |||||
//} | |||||
} | |||||
RootCanvas.Children.Add(element); | RootCanvas.Children.Add(element); | ||||
RegisterJsName(element); | RegisterJsName(element); | ||||
} | } | ||||
return messages; | |||||
} | } | ||||
// 注册名称到Js | // 注册名称到Js | ||||
@@ -152,7 +152,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BPASmartClient.Compiler", " | |||||
EndProject | EndProject | ||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "4.界面加载实例", "4.界面加载实例", "{309D579E-DDA8-4B01-A0AA-0F381BC37801}" | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "4.界面加载实例", "4.界面加载实例", "{309D579E-DDA8-4B01-A0AA-0F381BC37801}" | ||||
EndProject | EndProject | ||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SCADA.Test", "SCADA.Test\SCADA.Test.csproj", "{1696D557-C908-4136-A5F2-FF59D69E642C}" | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SCADA.Test", "SCADA.Test\SCADA.Test.csproj", "{1696D557-C908-4136-A5F2-FF59D69E642C}" | |||||
EndProject | EndProject | ||||
Global | Global | ||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||