@@ -22,6 +22,7 @@ | |||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.5" /> | |||
<PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" /> | |||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> | |||
<PackageReference Include="System.Data.OleDb" Version="6.0.0" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
@@ -0,0 +1,151 @@ | |||
using BPASmartClient.Message; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Data; | |||
using System.Data.OleDb; | |||
using System.IO; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading; | |||
using System.Threading.Tasks; | |||
namespace BPASmartClient.Helper | |||
{ | |||
public class ExcelHelper | |||
{ | |||
public DataTable GetExcelToDataTableBySheet(string FileFullPath, string SheetName) | |||
{ | |||
//此连接只能操作Excel2007之前(.xls)文件 | |||
//string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + FileFullPath + ";Extended Properties='Excel 8.0; HDR=NO; IMEX=1'"; | |||
//此连接可以操作.xls与.xlsx文件 | |||
string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + FileFullPath + ";Extended Properties='Excel 12.0; HDR=NO; IMEX=1'"; | |||
OleDbConnection conn = new OleDbConnection(strConn); | |||
conn.Open(); | |||
DataSet ds = new DataSet(); | |||
OleDbDataAdapter odda = new OleDbDataAdapter(string.Format("SELECT * FROM [{0}]", SheetName), conn); | |||
//OleDbDataAdapter odda = new OleDbDataAdapter(string.Format("select * from [Sheet1$]", conn),conn); | |||
odda.Fill(ds, SheetName); | |||
conn.Close(); | |||
return ds.Tables[0]; | |||
} | |||
//根据Excel物理路径获取Excel文件中所有表名 | |||
public String[] GetExcelSheetNames(string excelFile) | |||
{ | |||
OleDbConnection objConn = null; | |||
System.Data.DataTable dt = null; | |||
try | |||
{ | |||
//此连接只能操作Excel2007之前(.xls)文件 | |||
//string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + excelFile + ";Extended Properties='Excel 8.0; HDR=NO; IMEX=1'"; | |||
//此连接可以操作.xls与.xlsx文件 | |||
string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + excelFile + ";Extended Properties='Excel 12.0; HDR=NO; IMEX=1'"; | |||
objConn = new OleDbConnection(strConn); | |||
objConn.Open(); | |||
dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); | |||
if (dt == null) | |||
{ | |||
return null; | |||
} | |||
String[] excelSheets = new String[dt.Rows.Count]; | |||
int i = 0; | |||
foreach (DataRow row in dt.Rows) | |||
{ | |||
excelSheets[i] = row["TABLE_NAME"].ToString(); | |||
i++; | |||
} | |||
return excelSheets; | |||
} | |||
catch | |||
{ | |||
return null; | |||
} | |||
finally | |||
{ | |||
if (objConn != null) | |||
{ | |||
objConn.Close(); | |||
objConn.Dispose(); | |||
} | |||
if (dt != null) | |||
{ | |||
dt.Dispose(); | |||
} | |||
} | |||
} | |||
public static DataTable ReadDataFromCSV( string file) | |||
{ | |||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); | |||
DataTable dt = null; | |||
if(File.Exists(file)) | |||
{ | |||
dt = new DataTable(); | |||
FileStream fs = new FileStream(file, FileMode.Open,FileAccess.Read); | |||
StreamReader sr; | |||
try | |||
{ | |||
Encoding encoding = Encoding.Default; | |||
using (sr = new StreamReader(fs, Encoding.GetEncoding("GB2312"))) | |||
{ | |||
string head = sr.ReadLine(); | |||
string[] headNames = head.Split(','); | |||
for (int i = 0; i < headNames.Length; i++) | |||
{ | |||
dt.Columns.Add(headNames[i], typeof(string)); | |||
} | |||
while (!sr.EndOfStream) | |||
{ | |||
string lineStr = sr.ReadLine(); | |||
if (lineStr != null) | |||
{ | |||
string[] lines = lineStr.Split(','); | |||
DataRow dr = dt.NewRow(); | |||
for (int i = 0; i < lines.Length; i++) | |||
{ | |||
dr[i] = lines[i]; | |||
} | |||
dt.Rows.Add(dr); | |||
} | |||
} | |||
sr.Close(); | |||
fs.Close(); | |||
} | |||
} | |||
catch (Exception ex) | |||
{ | |||
MessageLog.GetInstance.ShowEx($"读取csv文件异常:{ex.Message}"); | |||
} | |||
} | |||
return dt; | |||
} | |||
} | |||
} | |||
@@ -0,0 +1,17 @@ | |||
<Project Sdk="Microsoft.NET.Sdk"> | |||
<PropertyGroup> | |||
<TargetFramework>net6.0</TargetFramework> | |||
<ImplicitUsings>enable</ImplicitUsings> | |||
<Nullable>enable</Nullable> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<PackageReference Include="NModbus.Serial" Version="3.0.72" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="..\BPASmartClient.SerialPort\BPASmartClient.SerialPort.csproj" /> | |||
</ItemGroup> | |||
</Project> |
@@ -0,0 +1,7 @@ | |||
namespace BPASmartClient.KHKJ | |||
{ | |||
public class Class1 | |||
{ | |||
} | |||
} |
@@ -0,0 +1,120 @@ | |||
using BPASmartClient.Helper; | |||
using BPASmartClient.Message; | |||
using BPASmartClient.SerialPort; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPASmartClient.KHKJ | |||
{ | |||
public class KHKJMachine | |||
{ | |||
//通讯代理 | |||
SerialPortClient commProxy = null; | |||
//数据仓库 | |||
private DataStorage<byte> dataStorage = new DataStorage<byte>(); | |||
//是否下发指令,主线程等待 | |||
private bool free = false; | |||
//状态询问指令 | |||
private byte[] cmdAsk; | |||
public KHKJMachine() | |||
{ | |||
MainLoop(); | |||
} | |||
public void Communication(string serialPort) | |||
{ | |||
commProxy = new SerialPortClient(serialPort, BaudRates.BR_9600); | |||
commProxy.SetDataStorage(dataStorage); | |||
commProxy.Start(); | |||
free = true; | |||
} | |||
private void MainLoop() | |||
{ | |||
ThreadManage.GetInstance().StartLong(new Action(() => | |||
{ | |||
if (!free) | |||
{ | |||
commProxy.SendData(cmdAsk); | |||
} | |||
Thread.Sleep(500); | |||
}), "KHKJ询问线程"); | |||
ThreadManage.GetInstance().StartLong(new Action(() => | |||
{ | |||
ResolveMsg(); | |||
}), "KHKJ解析线程"); | |||
} | |||
private void ResolveMsg() | |||
{ | |||
List<byte> temp = new List<byte>(); | |||
//一系列解包 | |||
while (dataStorage.GetSize() > 0) | |||
{ | |||
byte item = dataStorage.GetData(); | |||
List<byte> data = new List<byte>() { item }; | |||
if (Encoding.ASCII.GetString(data.ToArray()) == ":") | |||
{ | |||
temp.Add(item); | |||
while (dataStorage.GetSize() < 32) { Thread.Sleep(5); } | |||
while (temp.Count < 32) | |||
{ | |||
temp.Add(dataStorage.GetData()); | |||
} | |||
List<byte> vs = new List<byte>() { temp[temp.Count - 4], temp[temp.Count - 3], temp[temp.Count - 2], temp[temp.Count - 1] }; | |||
string t = Encoding.ASCII.GetString(vs.ToArray()).ToLower(); | |||
var package = Encoding.ASCII.GetString(temp.ToArray()); | |||
//if (package.Contains("\\r\\n")) | |||
//{ | |||
// ProcessMsg(package); | |||
//} | |||
temp.Clear(); | |||
} | |||
continue; | |||
} | |||
Thread.Sleep(500); | |||
} | |||
public void Stop() | |||
{ | |||
try | |||
{ | |||
commProxy.Stop(); | |||
free = true; | |||
} | |||
catch (Exception ex) | |||
{ | |||
MessageLog.GetInstance.ShowEx($"BPASmartClient.KLMCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); | |||
} | |||
} | |||
/// <summary> | |||
/// 16进制转字节数组 | |||
/// </summary> | |||
/// <param name="hexstring"></param> | |||
/// <returns></returns> | |||
public byte[] HexStringToByteArray( string hexstring) | |||
{ | |||
var byteArray = new byte[hexstring.Length/2]; | |||
for (int i = 0; i < byteArray.Length; i++) | |||
{ | |||
var x = Convert.ToInt32(hexstring.Substring(i * 2, 2), 16); | |||
byteArray[i] = (byte)x; | |||
} | |||
return byteArray; | |||
} | |||
} | |||
} |
@@ -83,7 +83,7 @@ | |||
<Setter Property="Foreground" Value="DarkSlateGray" /> | |||
<Setter Property="FontSize" Value="18" /> | |||
<Setter Property="Cursor" Value="Hand" /> | |||
<Setter Property="Background" Value="White"/> | |||
<Setter Property="Background" Value="#D3D3D3"/> | |||
<Setter Property="Template"> | |||
<Setter.Value> | |||
<ControlTemplate TargetType="DataGridColumnHeader"> | |||
@@ -93,9 +93,9 @@ | |||
<ColumnDefinition Width="*" /> | |||
</Grid.ColumnDefinitions> | |||
<ContentPresenter Margin="0,0,0,0" VerticalAlignment="Center" | |||
HorizontalAlignment="Center" /> | |||
HorizontalAlignment="Center" /> | |||
<Path x:Name="SortArrow" Visibility="Collapsed" Data="M0,0 L1,0 0.5,1 z" Stretch="Fill" | |||
Grid.Column="0" Width="8" Height="6" Fill="White" Margin="0,0,50,0" | |||
Grid.Column="0" Width="8" Height="6" Fill="#D3D3D3" Margin="0,0,50,0" | |||
VerticalAlignment="Center" RenderTransformOrigin="1,1" /> | |||
<Rectangle Width="1" Fill="Black" HorizontalAlignment="Right" Grid.ColumnSpan="1" /> | |||
</Grid> | |||
@@ -191,6 +191,38 @@ | |||
<Setter Property="Template"> | |||
<Setter.Value> | |||
<ControlTemplate TargetType="{x:Type Expander}"> | |||
<ControlTemplate.Resources> | |||
<Storyboard x:Key="STHide"> | |||
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" | |||
Storyboard.TargetName="ExpandSite"> | |||
<EasingDoubleKeyFrame KeyTime="0:0:0.0" | |||
Value="1" /> | |||
<EasingDoubleKeyFrame KeyTime="0:0:0.5" | |||
Value="0" /> | |||
</DoubleAnimationUsingKeyFrames> | |||
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" | |||
Storyboard.TargetName="ExpandSite"> | |||
<EasingDoubleKeyFrame KeyTime="0:0:0.5" | |||
Value="1" /> | |||
</DoubleAnimationUsingKeyFrames> | |||
</Storyboard> | |||
<Storyboard x:Key="STShow"> | |||
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" | |||
Storyboard.TargetName="ExpandSite"> | |||
<EasingDoubleKeyFrame KeyTime="0" | |||
Value="0" /> | |||
<EasingDoubleKeyFrame KeyTime="0:0:0.3" | |||
Value="1" /> | |||
</DoubleAnimationUsingKeyFrames> | |||
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" | |||
Storyboard.TargetName="ExpandSite"> | |||
<EasingDoubleKeyFrame KeyTime="0" | |||
Value="0" /> | |||
<EasingDoubleKeyFrame KeyTime="0:0:0.6" | |||
Value="1" /> | |||
</DoubleAnimationUsingKeyFrames> | |||
</Storyboard> | |||
</ControlTemplate.Resources> | |||
<Grid> | |||
<Grid.RowDefinitions> | |||
<RowDefinition Height="auto"></RowDefinition> | |||
@@ -204,8 +236,10 @@ | |||
<ColumnDefinition Width="50"/> | |||
</Grid.ColumnDefinitions> | |||
<ContentPresenter ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" VerticalAlignment="Center"/> | |||
<ToggleButton x:Name="HeaderSite" Grid.Column="1" Background="Transparent" | |||
<ContentPresenter ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" VerticalAlignment="Center"> | |||
</ContentPresenter> | |||
<ToggleButton x:Name="HeaderSite" Grid.Column="0" Grid.ColumnSpan="2" Background="Transparent" HorizontalAlignment="Right" HorizontalContentAlignment="Right" Width="200" | |||
ContentTemplateSelector="{TemplateBinding HeaderTemplateSelector}" | |||
IsChecked="{Binding IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" | |||
Style="{DynamicResource ExpanderToggleButtonStyle}" /> | |||
@@ -213,9 +247,28 @@ | |||
</Border> | |||
<ContentPresenter x:Name="ExpandSite" Grid.Row="1" | |||
ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" | |||
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" Visibility="Collapsed" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> | |||
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" Visibility="Collapsed" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> | |||
<ContentPresenter.LayoutTransform> | |||
<TransformGroup> | |||
<ScaleTransform /> | |||
<SkewTransform /> | |||
<RotateTransform /> | |||
<TranslateTransform /> | |||
</TransformGroup> | |||
</ContentPresenter.LayoutTransform> | |||
</ContentPresenter> | |||
</Grid> | |||
<ControlTemplate.Triggers> | |||
<EventTrigger RoutedEvent="FrameworkElement.Loaded"> | |||
<BeginStoryboard Storyboard="{StaticResource STHide}" /> | |||
</EventTrigger> | |||
<EventTrigger RoutedEvent="Expander.Expanded"> | |||
<BeginStoryboard x:Name="STShow_BeginStoryboard" | |||
Storyboard="{StaticResource STShow}" /> | |||
</EventTrigger> | |||
<EventTrigger RoutedEvent="Expander.Collapsed"> | |||
<BeginStoryboard Storyboard="{StaticResource STHide}" /> | |||
</EventTrigger> | |||
<Trigger Property="IsMouseOver" Value="True"> | |||
<Setter Property="Background" Value=" #E1FFFF"/> | |||
</Trigger> | |||
@@ -247,15 +300,15 @@ | |||
Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> | |||
<Canvas x:Name="canvNormal" Visibility="Visible" | |||
Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" | |||
Background="{TemplateBinding Background}" SnapsToDevicePixels="True" Canvas.Left="-30"> | |||
<Path Data="M 0 0 L 6 6 12 0 " Stroke="#FF37A0EA" StrokeThickness="2" Canvas.Left="5" Canvas.Top="10"/> | |||
<Path Data="M 0 0 L 6 6 12 0 " Stroke="#FF37A0EA" StrokeThickness="2" Canvas.Left="5" Canvas.Top="15"/> | |||
Background="{TemplateBinding Background}" SnapsToDevicePixels="True" Canvas.Right="30"> | |||
<Path Data="M 0 0 L 6 6 12 0 " Stroke="#FF37A0EA" StrokeThickness="2" Canvas.Right="5" Canvas.Top="10"/> | |||
<Path Data="M 0 0 L 6 6 12 0 " Stroke="#FF37A0EA" StrokeThickness="2" Canvas.Right="5" Canvas.Top="15"/> | |||
</Canvas> | |||
<Canvas x:Name="canvChecked" Visibility="Hidden" | |||
Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" | |||
Background="{TemplateBinding Background}" SnapsToDevicePixels="True" Canvas.Left="-30"> | |||
<Path Data="M 0 0 L 6 -6 12 0 " Stroke="#FF37A0EA" StrokeThickness="2" Canvas.Left="5" Canvas.Top="15"/> | |||
<Path Data="M 0 0 L 6 -6 12 0 " Stroke="#FF37A0EA" StrokeThickness="2" Canvas.Left="5" Canvas.Top="20"/> | |||
Background="{TemplateBinding Background}" SnapsToDevicePixels="True" Canvas.Right="30"> | |||
<Path Data="M 0 0 L 6 -6 12 0 " Stroke="#FF37A0EA" StrokeThickness="2" Canvas.Right="5" Canvas.Top="15"/> | |||
<Path Data="M 0 0 L 6 -6 12 0 " Stroke="#FF37A0EA" StrokeThickness="2" Canvas.Right="5" Canvas.Top="20"/> | |||
</Canvas> | |||
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" | |||
@@ -263,7 +316,6 @@ | |||
RecognizesAccessKey="True" | |||
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" | |||
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> | |||
</Canvas> | |||
<ControlTemplate.Triggers> | |||
@@ -392,7 +444,7 @@ | |||
<Setter Property="Template"> | |||
<Setter.Value> | |||
<ControlTemplate TargetType="{x:Type ComboBox}"> | |||
<Border BorderThickness="0" CornerRadius="3" Width="{TemplateBinding Width}" Height="30" Background="{TemplateBinding Background}" > | |||
<Border BorderThickness="1" BorderBrush="#CDC9C9 " CornerRadius="3" Width="{TemplateBinding Width}" Height="30" Background="{TemplateBinding Background}" > | |||
<Grid > | |||
<Grid.ColumnDefinitions> | |||
<ColumnDefinition Width="3*"/> | |||
@@ -585,7 +637,40 @@ | |||
</Setter.Value> | |||
</Setter> | |||
</Style> | |||
<Storyboard x:Key="Move0"> | |||
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" | |||
Storyboard.TargetName="contentRegion"> | |||
<EasingDoubleKeyFrame KeyTime="0:0:0" Value="900"> | |||
</EasingDoubleKeyFrame> | |||
<EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> | |||
</EasingDoubleKeyFrame> | |||
</DoubleAnimationUsingKeyFrames> | |||
</Storyboard> | |||
<Storyboard x:Key="Move1"> | |||
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" | |||
Storyboard.TargetName="contentRegion"> | |||
<EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="40"> | |||
<EasingDoubleKeyFrame.EasingFunction> | |||
<BackEase EasingMode="EaseInOut"/> | |||
</EasingDoubleKeyFrame.EasingFunction> | |||
</EasingDoubleKeyFrame> | |||
</DoubleAnimationUsingKeyFrames> | |||
</Storyboard> | |||
<Storyboard x:Key="Move2"> | |||
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" | |||
Storyboard.TargetName="contentRegion"> | |||
<EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="80"> | |||
<EasingDoubleKeyFrame.EasingFunction> | |||
<BackEase EasingMode="EaseInOut"/> | |||
</EasingDoubleKeyFrame.EasingFunction> | |||
</EasingDoubleKeyFrame> | |||
</DoubleAnimationUsingKeyFrames> | |||
</Storyboard> | |||
</Application.Resources> | |||
</Application> |
@@ -1,4 +1,5 @@ | |||
using System; | |||
using BPASmartClient.Helper; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Configuration; | |||
using System.Data; | |||
@@ -13,5 +14,11 @@ namespace BPASmartClient.MilkWithTea | |||
/// </summary> | |||
public partial class App : Application | |||
{ | |||
protected override void OnStartup(StartupEventArgs e) | |||
{ | |||
base.OnStartup(e); | |||
SystemHelper.GetInstance.CreateDesktopShortcut(); | |||
} | |||
} | |||
} |
@@ -5,8 +5,14 @@ | |||
<TargetFramework>net6.0-windows</TargetFramework> | |||
<Nullable>enable</Nullable> | |||
<UseWPF>true</UseWPF> | |||
<PackageIcon>hbl.ico</PackageIcon> | |||
<ApplicationIcon>hbl.ico</ApplicationIcon> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<Content Include="hbl.ico" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="..\BPASmartClient.Business\BPASmartClient.Business.csproj" /> | |||
<ProjectReference Include="..\BPASmartClient.CustomResource\BPASmartClient.CustomResource.csproj" /> | |||
@@ -22,6 +28,10 @@ | |||
<None Update="DeviceInfo.xml"> | |||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | |||
</None> | |||
<None Update="hbl.ico"> | |||
<Pack>True</Pack> | |||
<PackagePath>\</PackagePath> | |||
</None> | |||
</ItemGroup> | |||
</Project> |
@@ -7,6 +7,7 @@ | |||
xmlns:ccontrols="http://schemas.microsoft.com/expression/2010/drawing" | |||
mc:Ignorable="d" x:Name="circularProgress" | |||
Height="100" Width="100"> | |||
<Grid x:Name="layout" Width="{Binding RelativeSource={RelativeSource Self}, Path=Width}" Height="100" > | |||
<Ellipse Width="{Binding ElementName=layout, Path=Width}" | |||
Height="{Binding ElementName=layout, Path=Height}" | |||
@@ -19,6 +20,14 @@ | |||
<Path.Effect> | |||
<DropShadowEffect Color="WhiteSmoke" ShadowDepth="0" BlurRadius="5"/> | |||
</Path.Effect> | |||
<Path.RenderTransform > | |||
<RotateTransform CenterX="50" CenterY="50" x:Name="rotate"> | |||
</RotateTransform> | |||
</Path.RenderTransform> | |||
</Path> | |||
<Viewbox Margin="20"> | |||
@@ -10,6 +10,7 @@ using System.Windows.Data; | |||
using System.Windows.Documents; | |||
using System.Windows.Input; | |||
using System.Windows.Media; | |||
using System.Windows.Media.Animation; | |||
using System.Windows.Media.Imaging; | |||
using System.Windows.Navigation; | |||
using System.Windows.Shapes; | |||
@@ -53,7 +54,7 @@ namespace BPASmartClient.MilkWithTea.Control | |||
{ | |||
if (angle > 360) return; | |||
if (angle <= 0) return; | |||
if (angle < 0) return; | |||
int offset = 5; | |||
if (angle > 359) angle = 359.8; | |||
@@ -65,12 +66,33 @@ namespace BPASmartClient.MilkWithTea.Control | |||
double startPositionX = radius + offset; | |||
double startPositionY = offset; | |||
if (angle > 180) | |||
Storyboard sb = new Storyboard(); | |||
DoubleAnimation yd1 = new DoubleAnimation();//实例化浮点动画 | |||
cyclePath.RenderTransform = new RotateTransform();//设置为旋转动画 | |||
cyclePath.RenderTransformOrigin = new Point(0.5, 0.5);//设置旋转的中心 | |||
yd1.From = 0;//动画的起始值 | |||
yd1.To = 360;//动画的结束值 | |||
yd1.Duration = TimeSpan.FromSeconds(3);//动画的播放时间 | |||
yd1.RepeatBehavior = RepeatBehavior.Forever;//设置动画循环播放 | |||
Storyboard.SetTarget(yd1, cyclePath);//给故事板绑定动画 | |||
Storyboard.SetTargetProperty(yd1, new PropertyPath("RenderTransform.Angle"));//动画的依赖属性 | |||
sb.Children.Add(yd1);//故事板添加动画 | |||
if (angle == 0) | |||
{ | |||
string Data = string.Format("M {0} {1} A {2} {2} 0 1 1 {3} {4}", startPositionX, startPositionY, radius, Math.Round(x, 2) + offset, Math.Round(y, 2) + offset); | |||
this.cyclePath.Data = Geometry.Parse(Data); | |||
sb.Begin();//播放动画 | |||
} | |||
else if (angle > 180) | |||
{ | |||
//string Data = string.Format("M {0} 0 A {0} {0} 0 1 1 {1} {2}", radius, Math.Round(x, 2), Math.Round(y, 2)); | |||
string Data = string.Format("M {0} {1} A {2} {2} 0 1 1 {3} {4}", startPositionX, startPositionY, radius, Math.Round(x, 2) + offset, Math.Round(y, 2) + offset); | |||
this.cyclePath.Data = Geometry.Parse(Data); | |||
sb.Stop(); | |||
} | |||
else | |||
{ | |||
@@ -80,7 +102,10 @@ namespace BPASmartClient.MilkWithTea.Control | |||
string Data = string.Format("M {0} {1} A {2} {2} 0 0 1 {3} {4}", startPositionX, startPositionY, radius, Math.Round(x, 2) + offset, Math.Round(y, 2) + offset); | |||
this.cyclePath.Data = Geometry.Parse(Data); | |||
sb.Stop(); | |||
} | |||
} | |||
} | |||
@@ -1,4 +1,5 @@ | |||
using Model; | |||
using BPASmartClient.Model; | |||
using Model; | |||
using Newtonsoft.Json; | |||
using System; | |||
using System.Collections.Generic; | |||
@@ -19,6 +20,10 @@ namespace BPASmartClient.MilkWithTea | |||
public static bool makeEnable = false; | |||
public static ObservableCollection<LocalTeaWithMilkConfig> MaterialRecipes { get; set; } = new ObservableCollection<LocalTeaWithMilkConfig>(); | |||
/// <summary> | |||
/// 设备信息列表 | |||
/// </summary> | |||
public static ObservableCollection<DeviceConfigModelJson> deviceConfig { get; set; } = new ObservableCollection<DeviceConfigModelJson>(); | |||
/// <summary> | |||
@@ -12,6 +12,7 @@ | |||
<vm:MainWindowVeiwModel/> | |||
</Window.DataContext> | |||
<Window.Resources> | |||
<Style x:Key="menuButtonTemplate" TargetType="{x:Type Button}"> | |||
<Setter Property="Focusable" Value="False"/> | |||
<Setter Property="Background" Value="Transparent"/> | |||
@@ -27,7 +28,7 @@ | |||
<Setter Property="FontFamily" Value="/BPASmartClient.CustomResource;component/Fonts/MT/#iconfont"/> | |||
<Setter Property="Template"> | |||
<Setter.Value> | |||
<ControlTemplate TargetType="{x:Type Button}"> | |||
<ControlTemplate TargetType="{x:Type Button}" > | |||
<Border x:Name="border" CornerRadius="10" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> | |||
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> | |||
</Border> | |||
@@ -54,7 +55,9 @@ | |||
</Trigger> | |||
</ControlTemplate.Triggers> | |||
</ControlTemplate> | |||
</Setter.Value> | |||
</Setter> | |||
</Style> | |||
@@ -96,6 +99,7 @@ | |||
<TextBlock Text="" Margin="5,0"/> | |||
<TextBlock Text="主页"/> | |||
</StackPanel> | |||
</Button> | |||
<Button Grid.Row="3" Style="{StaticResource menuButtonTemplate}" Click="NavButton_Click" Tag="MessageLogInfo" Margin="0,20,0,20"> | |||
<StackPanel Orientation="Horizontal"> | |||
@@ -126,9 +130,10 @@ | |||
IsChecked="{Binding AutoStart}"/> | |||
</Grid> | |||
<Border Grid.Column="1" Grid.RowSpan="3" Background="Transparent"> | |||
<Border Background="White" CornerRadius="20" BorderThickness="0"> | |||
<Border Background="White" CornerRadius="20" BorderThickness="0" > | |||
<Grid> | |||
<ContentControl x:Name="contentRegion"> | |||
<local:MessageLogInfo/> | |||
</ContentControl> | |||
</Grid> | |||
@@ -20,6 +20,7 @@ using System.Windows.Data; | |||
using System.Windows.Documents; | |||
using System.Windows.Input; | |||
using System.Windows.Media; | |||
using System.Windows.Media.Animation; | |||
using System.Windows.Media.Imaging; | |||
using System.Windows.Navigation; | |||
using System.Windows.Shapes; | |||
@@ -40,6 +41,10 @@ namespace BPASmartClient.MilkWithTea | |||
} | |||
Storyboard sb = new Storyboard(); | |||
DoubleAnimation yd1 = new DoubleAnimation();//实例化浮点动画 | |||
DoubleAnimation yd2 = new DoubleAnimation(); | |||
private void Initialize() | |||
{ | |||
@@ -196,6 +201,8 @@ namespace BPASmartClient.MilkWithTea | |||
private void NavButton_Click(object sender, RoutedEventArgs e) | |||
{ | |||
FadeInOut(0, 1, 750, 0); | |||
try | |||
{ | |||
if (sender is Button bt ) | |||
@@ -203,6 +210,7 @@ namespace BPASmartClient.MilkWithTea | |||
Type type = Type.GetType($"BPASmartClient.MilkWithTea.View.{bt.Tag?.ToString()}"); | |||
ConstructorInfo cti = type.GetConstructor(System.Type.EmptyTypes); | |||
contentRegion.Content = (FrameworkElement)cti.Invoke(null); | |||
sb.Begin(); | |||
} | |||
} | |||
catch (Exception ex) | |||
@@ -210,5 +218,23 @@ namespace BPASmartClient.MilkWithTea | |||
MessageLog.GetInstance.ShowEx($"BPASmartClient 中引发错误,MainWindow.xaml.cs 类MenuItem_Click(),描述:[{ex.Message}]"); | |||
} | |||
} | |||
private void FadeInOut(double opactityFrom ,double opactityTo,double yForm,double yTo) | |||
{ | |||
contentRegion.RenderTransform = new TranslateTransform(); | |||
yd1.From = opactityFrom;//动画的起始值 | |||
yd1.To = opactityTo;//动画的结束值 | |||
yd1.Duration = TimeSpan.FromSeconds(0.8); | |||
Storyboard.SetTarget(yd1, contentRegion);//给故事板绑定动画 | |||
Storyboard.SetTargetProperty(yd1, new PropertyPath("Opacity"));//动画的依赖属性 | |||
yd2.From = yForm;//动画的起始值 | |||
yd2.To = yTo;//动画的结束值 | |||
yd2.Duration = TimeSpan.FromSeconds(0.5); | |||
Storyboard.SetTarget(yd2, contentRegion);//给故事板绑定动画 | |||
Storyboard.SetTargetProperty(yd2, new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.Y)"));//动画的依赖属性 | |||
sb.Children.Add(yd1);//故事板添加动画 | |||
sb.Children.Add(yd2); | |||
} | |||
} | |||
} |
@@ -14,7 +14,6 @@ | |||
<Style TargetType="{x:Type DataGridCell}"> | |||
<Setter Property="FocusVisualStyle" Value="{x:Null}"/> | |||
<Setter Property="TextBlock.FontSize" Value="13" /> | |||
<Setter Property="Padding" Value="10" /> | |||
<Setter Property="Background" Value="Transparent"/> | |||
<Setter Property="BorderBrush" Value="Transparent"/> | |||
<Setter Property="BorderThickness" Value="0"/> | |||
@@ -31,24 +30,6 @@ | |||
</Setter.Value> | |||
</Setter> | |||
<Style.Triggers> | |||
<Trigger Property="IsKeyboardFocusWithin" Value="True"> | |||
<Setter Property="BorderBrush" Value="Black"/> | |||
</Trigger> | |||
<MultiTrigger> | |||
<MultiTrigger.Conditions> | |||
<Condition Property="IsSelected" Value="True"/> | |||
<Condition Property="Selector.IsSelectionActive" Value="False"/> | |||
</MultiTrigger.Conditions> | |||
<Setter Property="Background" Value="Black"/> | |||
</MultiTrigger> | |||
<MultiTrigger> | |||
<MultiTrigger.Conditions> | |||
<Condition Property="IsSelected" Value="True"/> | |||
<Condition Property="Selector.IsSelectionActive" Value="True"/> | |||
</MultiTrigger.Conditions> | |||
<Setter Property="Foreground" Value="#666666"/> | |||
<Setter Property="Background" Value="Black" /> | |||
</MultiTrigger> | |||
<Trigger Property="IsEnabled" Value="False"> | |||
<Setter Property="Opacity" Value=".56"/> | |||
</Trigger> | |||
@@ -68,7 +49,7 @@ | |||
</Trigger> | |||
<Trigger Property="IsMouseOver" Value="True"> | |||
<Setter Property="Background" Value="#F0FFFF" /> | |||
<Setter Property="Background" Value="#87CEFA" /> | |||
</Trigger> | |||
</Style.Triggers> | |||
</Style> | |||
@@ -97,11 +78,9 @@ | |||
</Setter.Value> | |||
</Setter> | |||
</Style> | |||
</UserControl.Resources> | |||
<Grid Background="#F3F6F9" Margin="20"> | |||
<ScrollViewer VerticalScrollBarVisibility="Auto"> | |||
<ScrollViewer VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible"> | |||
<StackPanel> | |||
<!--奶茶配方录入--> | |||
<Expander Style="{StaticResource ExpanderStyle}"> | |||
@@ -121,7 +100,7 @@ | |||
<Button Content="保存" Margin="10,0" Width="80" Command="{Binding SaveRecipeCommand}" Style="{StaticResource buttonNormal}"/> | |||
<Button Content="清空" Margin="10,0" Width="80" Command="{Binding RecipeCancelCommand}" Style="{StaticResource buttonNormal}"/> | |||
</StackPanel> | |||
<DataGrid Grid.Row="1" Margin="100,5,100,20" AutoGenerateColumns="False" RowHeight="30" ItemsSource="{Binding materialRecipes}" | |||
<DataGrid Grid.Row="1" Margin="100,5,100,20" AutoGenerateColumns="False" RowHeight="32" ItemsSource="{Binding materialRecipes}" | |||
x:Name="recipeDataGrid" | |||
FrozenColumnCount="1" | |||
VerticalAlignment="Center" HorizontalAlignment="Center" | |||
@@ -141,9 +120,10 @@ | |||
<DataGridTemplateColumn Header="配料" Width="200"> | |||
<DataGridTemplateColumn.CellTemplate > | |||
<DataTemplate> | |||
<ComboBox x:Name="combox" FontSize="16" Width="100" | |||
<ComboBox x:Name="combox" FontSize="16" Width="100" VerticalContentAlignment="Top" | |||
ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.MaterailList}" | |||
IsReadOnly="True" Style="{StaticResource cmbstyle}" Height="30" | |||
SelectedIndex="1" | |||
SelectedValue="{Binding Material ,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> | |||
</DataTemplate> | |||
</DataGridTemplateColumn.CellTemplate> | |||
@@ -190,13 +170,13 @@ | |||
<ColumnDefinition Width="*"/> | |||
<ColumnDefinition Width="*"/> | |||
</Grid.ColumnDefinitions> | |||
<Button Content="更新物料位置名称" Grid.ColumnSpan="2" Style="{StaticResource buttonNormal}" Height="34" Width="200" Command="{Binding UpdateMaterialPosionCommand}"/> | |||
<DataGrid Grid.Row="1" Margin="100,5" AutoGenerateColumns="False" ItemsSource="{Binding materail1,Mode=TwoWay}" | |||
FrozenColumnCount="1" RowHeight="30" | |||
VerticalAlignment="Top" HorizontalAlignment="Center" | |||
IsReadOnly="True" | |||
CanUserResizeColumns="False" CanUserResizeRows="False" SelectionMode="Single" | |||
CanUserReorderColumns="False" AlternationCount="2" RowHeaderWidth="0" CanUserAddRows="False"> | |||
<Button Content="保存物料位置名称" Grid.ColumnSpan="2" Style="{StaticResource buttonNormal}" Height="34" Width="200" Command="{Binding UpdateMaterialPosionCommand}"/> | |||
<DataGrid Grid.Row="1" Margin="50,5" AutoGenerateColumns="False" ItemsSource="{Binding materail1,Mode=TwoWay}" | |||
FrozenColumnCount="1" RowHeight="34" | |||
VerticalAlignment="Top" HorizontalAlignment="Right" | |||
IsReadOnly="True" | |||
CanUserResizeColumns="False" CanUserResizeRows="False" SelectionMode="Single" | |||
CanUserReorderColumns="False" AlternationCount="2" RowHeaderWidth="0" CanUserAddRows="False"> | |||
<DataGrid.Columns> | |||
<DataGridTemplateColumn Header="物料位置" Width="170"> | |||
<DataGridTemplateColumn.CellTemplate> | |||
@@ -214,16 +194,17 @@ | |||
<DataTemplate> | |||
<TextBox Text="{Binding MaterialName ,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" | |||
VerticalAlignment="Center" HorizontalContentAlignment="Center" | |||
Margin="2" | |||
Width="160" FontSize="16"/> | |||
VerticalContentAlignment="Center" | |||
Margin="2" FontSize="16" | |||
Width="160" Height="28" /> | |||
</DataTemplate> | |||
</DataGridTemplateColumn.CellTemplate> | |||
</DataGridTemplateColumn> | |||
</DataGrid.Columns> | |||
</DataGrid> | |||
<DataGrid Grid.Row="1" Grid.Column="1" Margin="100,5" AutoGenerateColumns="False" ItemsSource="{Binding materail2,Mode=TwoWay}" | |||
FrozenColumnCount="1" RowHeight="30" | |||
VerticalAlignment="Top" HorizontalAlignment="Center" | |||
<DataGrid Grid.Row="1" Grid.Column="1" Margin="50,5" AutoGenerateColumns="False" ItemsSource="{Binding materail2,Mode=TwoWay}" | |||
FrozenColumnCount="1" RowHeight="34" | |||
VerticalAlignment="Top" HorizontalAlignment="Left" | |||
IsReadOnly="True" | |||
CanUserResizeColumns="False" CanUserResizeRows="False" SelectionMode="Single" | |||
CanUserReorderColumns="False" AlternationCount="2" RowHeaderWidth="0" CanUserAddRows="False"> | |||
@@ -243,8 +224,9 @@ | |||
<DataGridTemplateColumn.CellTemplate> | |||
<DataTemplate> | |||
<TextBox Text="{Binding MaterialName ,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" | |||
VerticalAlignment="Center" HorizontalContentAlignment="Center" | |||
Margin="2" | |||
VerticalAlignment="Center" HorizontalContentAlignment="Center" | |||
VerticalContentAlignment="Center" | |||
Margin="2" Height="28" | |||
Width="160" FontSize="16"/> | |||
</DataTemplate> | |||
</DataGridTemplateColumn.CellTemplate> | |||
@@ -260,7 +242,7 @@ | |||
<TextBlock Text="本地奶茶配方"/> | |||
</Expander.Header> | |||
<Expander.Content> | |||
<DataGrid Grid.Row="4" Margin="100,5" AutoGenerateColumns="False" RowHeight="30" ItemsSource="{Binding localMaterialRecipes}" Width="500" | |||
<DataGrid Grid.Row="4" Margin="100,5" AutoGenerateColumns="False" RowHeight="32" ItemsSource="{Binding localMaterialRecipes}" Width="500" | |||
FrozenColumnCount="1" | |||
VerticalAlignment="Top" | |||
IsReadOnly="True" | |||
@@ -59,17 +59,14 @@ | |||
<Style TargetType="DataGridRow"> | |||
<Setter Property="FontSize" Value="16"/> | |||
<Setter Property="VerticalAlignment" Value="Center"/> | |||
<Setter Property="Height" Value="28"/> | |||
<Setter Property="Height" Value="28"/> | |||
<Style.Triggers> | |||
<!-- 隔行换色 --> | |||
<Trigger Property="AlternationIndex" Value="0"> | |||
<Setter Property="Background" Value="#FFFAFAFA" /> | |||
<Trigger Property="IsSelected" Value="True"> | |||
<Setter Property="Foreground" Value="Black"/> | |||
</Trigger> | |||
<Trigger Property="AlternationIndex" Value="1"> | |||
<Setter Property="Background" Value="#FFF5F5F7" /> | |||
</Trigger> | |||
<Trigger Property="IsMouseOver" Value="True"> | |||
<Setter Property="Foreground" Value="White"/> | |||
<Setter Property="Background" Value="#4fade8" /> | |||
</Trigger> | |||
</Style.Triggers> | |||
@@ -77,10 +74,6 @@ | |||
</ResourceDictionary> | |||
</UserControl.Resources> | |||
<Grid Background="#F3F6F9" Margin="20"> | |||
<Grid.ColumnDefinitions> | |||
@@ -98,7 +91,7 @@ | |||
<DataGrid ItemsSource="{Binding orderStatusLists}" | |||
Grid.Row="1" AutoGenerateColumns="False" RowHeight="250" | |||
FrozenColumnCount="1" Margin="30,5" | |||
VerticalAlignment="Top" | |||
VerticalAlignment="Top" ForceCursor="False" | |||
IsReadOnly="True" | |||
CanUserResizeColumns="False" CanUserResizeRows="False" SelectionMode="Single" | |||
CanUserReorderColumns="False" RowHeaderWidth="0" CanUserAddRows="False"> | |||
@@ -106,11 +99,11 @@ | |||
<DataGridTextColumn Header="取餐号" Binding="{Binding OrderPush.SortNum}" Width="*" | |||
Foreground="{Binding OrderStatus, Converter={StaticResource ColorConverter}}"> | |||
</DataGridTextColumn> | |||
<DataGridTextColumn Header="商品名" Binding="{Binding OrderPush.GoodsName}" Width="2*" /> | |||
<DataGridTextColumn Header="开始时间" Binding="{Binding StartDate}" Width="2*"/> | |||
<DataGridTextColumn Header="结束时间" Binding="{Binding EndDate}" Width="2*"/> | |||
<DataGridTextColumn Header="制作状态" Binding="{Binding OrderStatus, Converter={StaticResource TextConverter}}" Width="2*"/> | |||
<DataGridTextColumn Header="完成时间" Binding="{Binding CompleteDate}" Width="2*" /> | |||
<DataGridTextColumn Header="商品名" Binding="{Binding OrderPush.GoodsName}" Width="2*" Foreground="Black" /> | |||
<DataGridTextColumn Header="开始时间" Binding="{Binding StartDate}" Width="2*" Foreground="Black"/> | |||
<DataGridTextColumn Header="结束时间" Binding="{Binding EndDate}" Width="2*" Foreground="Black"/> | |||
<DataGridTextColumn Header="制作状态" Binding="{Binding OrderStatus, Converter={StaticResource TextConverter}}" Width="2*" Foreground="Black"/> | |||
<DataGridTextColumn Header="完成时间" Binding="{Binding CompleteDate}" Width="2*" Foreground="Black" /> | |||
</DataGrid.Columns> | |||
</DataGrid> | |||
</GroupBox> | |||
@@ -172,7 +165,7 @@ | |||
</Border> | |||
</Border> | |||
<TextBlock Text="奶茶" Grid.Row="2" Margin="20,10" FontSize="22" /> | |||
<TextBlock Text="配方" Grid.Row="2" Grid.Column="1" Margin="10" FontSize="22"/> | |||
<TextBlock Text="配方" Grid.Row="2" Grid.Column="1" Margin="10" FontSize="22" /> | |||
<Border BorderBrush="#D5DFE5" BorderThickness="4" Grid.Row="3" Margin="20,0,0,0"> | |||
<ListBox ItemsSource="{Binding localTeaWithMilks}" SelectionChanged="ListBox_SelectionChanged" IsEnabled="{Binding MakeEnable}" | |||
Foreground="LightSlateGray"> | |||
@@ -192,12 +185,15 @@ | |||
Width="200" HorizontalAlignment="Left" Foreground="LightSlateGray"> | |||
<ListBox.ItemTemplate> | |||
<DataTemplate > | |||
<Grid> | |||
<StackPanel Orientation="Horizontal"> | |||
<TextBlock Text="{Binding Material}" Margin="20,10"/> | |||
<TextBlock Text="{Binding MaterialWeight}" Margin="20,10,0,10"/> | |||
<TextBlock Text="g" Margin="0,10"/> | |||
</StackPanel> | |||
<Grid Width="180"> | |||
<Grid.ColumnDefinitions> | |||
<ColumnDefinition Width="*"/> | |||
<ColumnDefinition Width="40"/> | |||
<ColumnDefinition Width="15"/> | |||
</Grid.ColumnDefinitions> | |||
<TextBlock Text="{Binding Material}" Margin="20,10" FontSize="16"/> | |||
<TextBlock Text="{Binding MaterialWeight}" Margin="5,10,0,10" Grid.Column="1" HorizontalAlignment="Left" /> | |||
<TextBlock Text="g" Margin="0,10" HorizontalAlignment="Right" Grid.Column="2"/> | |||
</Grid> | |||
</DataTemplate> | |||
</ListBox.ItemTemplate> | |||
@@ -6,7 +6,7 @@ | |||
xmlns:local="clr-namespace:BPASmartClient.MilkWithTea.View" | |||
xmlns:vm="clr-namespace:BPASmartClient.MilkWithTea.ViewModel" | |||
mc:Ignorable="d" | |||
d:DesignHeight="800" d:DesignWidth="1400" Background="Transparent" > | |||
d:DesignHeight="900" d:DesignWidth="1400" Background="Transparent" > | |||
<UserControl.DataContext> | |||
<vm:PatrameterSettiongViewModel/> | |||
</UserControl.DataContext> | |||
@@ -25,10 +25,11 @@ | |||
<ColumnDefinition Width="*"/> | |||
</Grid.ColumnDefinitions> | |||
<Grid.RowDefinitions> | |||
<RowDefinition Height="300"/> | |||
<RowDefinition Height="*"/> | |||
<RowDefinition Height="*"/> | |||
<RowDefinition Height="*"/> | |||
</Grid.RowDefinitions> | |||
<GroupBox Grid.ColumnSpan="2" Header="参数调试" FontSize="20" Style="{StaticResource GroupBoxStyle1}" Padding="40,20"> | |||
<GroupBox Grid.ColumnSpan="2" Header="参数调试" FontSize="20" Style="{StaticResource GroupBoxStyle1}" Padding="40,20" Margin="20,10"> | |||
<GroupItem> | |||
<Grid> | |||
<Grid.RowDefinitions> | |||
@@ -37,29 +38,29 @@ | |||
<RowDefinition Height="*"/> | |||
</Grid.RowDefinitions> | |||
<StackPanel Orientation="Horizontal"> | |||
<TextBlock Text="通道口:"/> | |||
<ComboBox ItemsSource="{Binding materialPosions}" | |||
<TextBlock Text="通道口:"/> | |||
<ComboBox ItemsSource="{Binding materialPosions}" | |||
SelectedIndex="{Binding MaterialID ,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" | |||
Margin="10,0" Width="120 " Style="{StaticResource cmbstyle}"/> | |||
<TextBlock Text="出料量:" Margin="10,0,0,0" /> | |||
<TextBox Text="{Binding OutMaterailWeight}" Width="60" Margin="10,0" VerticalContentAlignment="Center"/> | |||
<TextBlock Text="g" Margin="2,0"/> | |||
<Button Content="出料" Style="{StaticResource buttonNormal}" Height="36" Width="100" Margin="30,0" Command="{Binding OutMaterailCommad}"/> | |||
<TextBlock Text="转盘位置:" Margin="60,0,10,0"/> | |||
<ComboBox ItemsSource="{Binding TurntablePosion}" | |||
<TextBlock Text="出料量:" Margin="10,0,0,0" /> | |||
<TextBox Text="{Binding OutMaterailWeight}" Width="60" Margin="10,0" VerticalContentAlignment="Center"/> | |||
<TextBlock Text="g" Margin="2,0"/> | |||
<Button Content="出料" Style="{StaticResource buttonNormal}" Height="36" Width="100" Margin="30,0" Command="{Binding OutMaterailCommad}"/> | |||
<TextBlock Text="转盘位置:" Margin="60,0,10,0"/> | |||
<ComboBox ItemsSource="{Binding TurntablePosion}" | |||
SelectedIndex="{Binding TurntableID,Mode=TwoWay ,UpdateSourceTrigger=PropertyChanged}" | |||
Margin="10,0" Width="100 " Style="{StaticResource cmbstyle}"/> | |||
<Button Content="转动" Style="{StaticResource buttonNormal}" Height="36" Width="80" Margin="30,0" | |||
<Button Content="转动" Style="{StaticResource buttonNormal}" Height="36" Width="80" Margin="30,0" | |||
Command="{Binding TurntableCommad}"/> | |||
</StackPanel> | |||
</StackPanel> | |||
<CheckBox Grid.Row="2" Content="禁用本地奶茶下单" HorizontalAlignment="Left" Margin="0,10" | |||
HorizontalContentAlignment="Center" VerticalContentAlignment="Center" | |||
IsChecked="{Binding IsEnable}"/> | |||
</Grid> | |||
</GroupItem> | |||
</GroupBox> | |||
<GroupBox Grid.ColumnSpan="2" Grid.Row="1" Header="通道矫正" FontSize="20" BorderThickness="10" Style="{StaticResource GroupBoxStyle1}"> | |||
<GroupBox Grid.ColumnSpan="2" Grid.Row="1" Header="通道矫正" FontSize="20" BorderThickness="10" Style="{StaticResource GroupBoxStyle1}" Margin="20,10"> | |||
<GroupItem> | |||
<Grid Margin="20"> | |||
<Grid.RowDefinitions> | |||
@@ -109,5 +110,49 @@ | |||
</Grid> | |||
</GroupItem> | |||
</GroupBox> | |||
<GroupBox Grid.ColumnSpan="2" Grid.Row="2" Header="设备配置" FontSize="20" BorderThickness="10" Style="{StaticResource GroupBoxStyle1}" Margin="20,10"> | |||
<Grid Margin="30,5"> | |||
<Grid.ColumnDefinitions> | |||
<ColumnDefinition Width="100"/> | |||
<ColumnDefinition Width="90"/> | |||
<ColumnDefinition Width="110"/> | |||
<ColumnDefinition Width="90"/> | |||
<ColumnDefinition Width="60"/> | |||
<ColumnDefinition Width="60"/> | |||
<ColumnDefinition/> | |||
</Grid.ColumnDefinitions> | |||
<Grid.RowDefinitions> | |||
<RowDefinition Height="*"/> | |||
<RowDefinition Height="*"/> | |||
<RowDefinition Height="*"/> | |||
<RowDefinition Height="*"/> | |||
</Grid.RowDefinitions> | |||
<TextBlock Text="店铺名称:" Grid.ColumnSpan="2" FontSize="22" Height="28" Width="94" HorizontalAlignment="Left" Margin="20,0"/> | |||
<TextBox Text="{Binding ShopName}" Grid.Column="2" Grid.ColumnSpan="2" Margin="-20,10,30,10" VerticalContentAlignment="Center"/> | |||
<TextBlock Text="店铺ID:" Grid.Row="1" Height="23" Width="60" HorizontalAlignment="Left" Margin="20,0"/> | |||
<TextBlock Text="设备ID:" Grid.Column="2" Grid.Row="1" Height="23" Width="60" /> | |||
<TextBlock Text="PLC地址:" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2" Height="23" Width="72" HorizontalAlignment="Left" Margin="20,0"/> | |||
<TextBox Text="{Binding ShopID}" Width="60" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Left" VerticalContentAlignment="Center" Margin="0,12"/> | |||
<TextBox Text="{Binding DeviceID}" Width="60" Grid.Column="3" Grid.Row="1" HorizontalAlignment="Left" VerticalContentAlignment="Center" Margin="0,12"/> | |||
<TextBox Text="{Binding PLCAdress}" Grid.Column="2" Grid.Row="2" Grid.ColumnSpan="2" Margin="-20,10,30,10" | |||
VerticalContentAlignment="Center"/> | |||
<Button Style="{StaticResource buttonNormal}" | |||
Grid.Column="4" Grid.ColumnSpan="2" Grid.Row="0" Grid.RowSpan="3" | |||
Height="130" Width="80" | |||
Command="{Binding SaveDevicesCommand}"> | |||
<Grid> | |||
<Grid.RowDefinitions> | |||
<RowDefinition Height="*"/> | |||
<RowDefinition Height="10"/> | |||
<RowDefinition Height="*"/> | |||
</Grid.RowDefinitions> | |||
<TextBlock Text="保存" TextWrapping="Wrap" Foreground="White" FontSize="20" /> | |||
<TextBlock Text="配置" TextWrapping="Wrap" Foreground="White" FontSize="20" Grid.Row="2"/> | |||
</Grid> | |||
</Button> | |||
</Grid> | |||
</GroupBox> | |||
</Grid> | |||
</UserControl> |
@@ -39,12 +39,14 @@ namespace BPASmartClient.MilkWithTea.ViewModel | |||
/// 当前正在制作的奶茶 | |||
/// </summary> | |||
public string CurrentGood { get { return _currentGood; } set { _currentGood = value; OnPropertyChanged(); } } | |||
private string _currentGood = "无"; | |||
private string _currentGood = "茉莉花茶"; | |||
/// <summary> | |||
/// 奶茶制作百分比 | |||
/// </summary> | |||
public string MakePercent { get { return _makePercent; } set { _makePercent = value; OnPropertyChanged(); } } | |||
private string _makePercent = "100"; | |||
private string _makePercent = "0"; | |||
/// <summary> | |||
/// 当前正在制作的奶茶 | |||
@@ -56,6 +58,8 @@ namespace BPASmartClient.MilkWithTea.ViewModel | |||
/// </summary> | |||
public RelayCommand MakeGoodCommand { get; set; } | |||
public MainControlViewModel() | |||
{ | |||
MakeGoodCommand = new RelayCommand(new Action(() => | |||
@@ -63,32 +67,34 @@ namespace BPASmartClient.MilkWithTea.ViewModel | |||
})); | |||
Init(); | |||
MorkOrderPush morkOrderPush = new MorkOrderPush() { GoodsName = "水果奶茶", SortNum = 1 }; | |||
MorkOrderPush morkOrderPush = new MorkOrderPush() { GoodsName = "珍珠奶茶", SortNum = 1 }; | |||
MorkOrderPush morkOrderPush1 = new MorkOrderPush() { GoodsName = "茉莉花茶", SortNum = 2 }; | |||
MorkOrderPush morkOrderPush2 = new MorkOrderPush() { GoodsName = "芝芝梅梅", SortNum = 3 }; | |||
orderStatusLists.Add(new MorkOrder() | |||
{ | |||
StartDate = "11",EndDate ="15",CompleteDate ="4",OrderStatus = ORDER_STATUS.COOKING, | |||
StartDate = "11:20",EndDate ="11:24",CompleteDate ="4",OrderStatus = ORDER_STATUS.COMPLETED_COOK, | |||
OrderPush = morkOrderPush | |||
}); | |||
orderStatusLists.Add(new MorkOrder() | |||
{ | |||
StartDate = "11", | |||
EndDate = "15", | |||
StartDate = "11:36", | |||
EndDate = "11:40", | |||
CompleteDate = "4", | |||
OrderStatus = ORDER_STATUS.COOKING, | |||
OrderPush = morkOrderPush | |||
OrderPush = morkOrderPush1 | |||
}); | |||
orderStatusLists.Add(new MorkOrder() | |||
{ | |||
StartDate = "11", | |||
EndDate = "15", | |||
CompleteDate = "4", | |||
OrderStatus = ORDER_STATUS.COOKING, | |||
OrderPush = morkOrderPush | |||
StartDate = "10:33", | |||
EndDate = "10:28", | |||
CompleteDate = "5", | |||
OrderStatus = ORDER_STATUS.COMPLETED_TAKE, | |||
OrderPush = morkOrderPush2 | |||
}); | |||
@@ -1,4 +1,5 @@ | |||
using BPASmartClient.Helper; | |||
using BPASmartClient.Model; | |||
using Microsoft.Toolkit.Mvvm.ComponentModel; | |||
using Model; | |||
using System; | |||
@@ -31,6 +32,7 @@ namespace BPASmartClient.MilkWithTea.ViewModel | |||
GLobal.posionPath = Path.Combine(path, "MaterialPosion.json"); | |||
GLobal.MaterialRecipes = GLobal.GetJsonToT<LocalTeaWithMilkConfig>(GLobal.recipePath); | |||
GLobal.deviceConfig = GLobal.GetJsonToT<DeviceConfigModelJson>($"{LocaPath.GetInstance().GetDeviceConfigPath}奶茶味魔方.json"); | |||
} | |||
} | |||
@@ -1,10 +1,14 @@ | |||
using BPASmartClient.Helper; | |||
using BPASmartClient.Message; | |||
using BPASmartClient.Model; | |||
using BPASmartClient.MorkTM; | |||
using Microsoft.Toolkit.Mvvm.ComponentModel; | |||
using Microsoft.Toolkit.Mvvm.Input; | |||
using Newtonsoft.Json; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Collections.ObjectModel; | |||
using System.IO; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
@@ -80,21 +84,39 @@ namespace BPASmartClient.MilkWithTea.ViewModel | |||
/// </summary> | |||
public RelayCommand CheckMaterailWeightCommand { get; set; } | |||
public PatrameterSettiongViewModel() | |||
{ | |||
foreach(MaterialPosion materialPosion in Enum.GetValues(typeof(MaterialPosion))) | |||
{ | |||
materialPosions.Add(materialPosion); | |||
} | |||
#region 设备配置 | |||
/// <summary> | |||
/// 店铺名称 | |||
/// </summary> | |||
public string ShopName { get { return _shopName; } set { _shopName = value; OnPropertyChanged(); } } | |||
private string _shopName; | |||
/// <summary> | |||
/// 店铺ID | |||
/// </summary> | |||
public string ShopID { get { return _shopID; } set { _shopID = value; OnPropertyChanged(); } } | |||
private string _shopID; | |||
/// <summary> | |||
/// 设备ID | |||
/// </summary> | |||
public string DeviceID { get { return _deviceID; } set { _deviceID = value; OnPropertyChanged(); } } | |||
private string _deviceID; | |||
/// <summary> | |||
/// PLC地址 | |||
/// </summary> | |||
public string PLCAdress { get { return _pLCAdress; } set { _pLCAdress = value; OnPropertyChanged(); } } | |||
private string _pLCAdress; | |||
foreach(OutMaterialPosion outMaterialPosion in Enum.GetValues(typeof(OutMaterialPosion))) | |||
{ | |||
TurntablePosion.Add(outMaterialPosion); | |||
} | |||
public RelayCommand SaveDevicesCommand { get; set; } | |||
#endregion | |||
public PatrameterSettiongViewModel() | |||
{ | |||
OutMaterailCommad = new RelayCommand(new Action(() => | |||
{ | |||
ActionManage.GetInstance.Send("通道口出料", new object[] { MaterialID +1, OutMaterailWeight }); | |||
})); | |||
TurntableCommad = new RelayCommand(new Action(() => | |||
@@ -118,6 +140,39 @@ namespace BPASmartClient.MilkWithTea.ViewModel | |||
ActionManage.GetInstance.Send("矫正重量", new object[] { CorrectPassway + 1, CorrectMatetailWeight }); | |||
})); | |||
SaveDevicesCommand = new RelayCommand(SaveDeviceMessage); | |||
init(); | |||
} | |||
private void init() | |||
{ | |||
foreach (MaterialPosion materialPosion in Enum.GetValues(typeof(MaterialPosion))) | |||
{ | |||
materialPosions.Add(materialPosion); | |||
} | |||
foreach (OutMaterialPosion outMaterialPosion in Enum.GetValues(typeof(OutMaterialPosion))) | |||
{ | |||
TurntablePosion.Add(outMaterialPosion); | |||
} | |||
ShopName = GLobal.deviceConfig.ElementAt(0).ShopName; | |||
ShopID = GLobal.deviceConfig.ElementAt(0).ShopId; | |||
DeviceID = GLobal.deviceConfig.ElementAt(0).deviceModels.ElementAt(0).DeviceId; | |||
PLCAdress = GLobal.deviceConfig.ElementAt(0).deviceModels.ElementAt(0).communicationDevcies.ElementAt(0).communicationPar.IPAddress; | |||
} | |||
private void SaveDeviceMessage() | |||
{ | |||
if (GLobal.deviceConfig.Count > 0) | |||
{ | |||
GLobal.deviceConfig.ElementAt(0).ShopName = ShopName; | |||
GLobal.deviceConfig.ElementAt(0).ShopId = ShopID; | |||
GLobal.deviceConfig.ElementAt(0).deviceModels.ElementAt(0).DeviceId = DeviceID; | |||
GLobal.deviceConfig.ElementAt(0).deviceModels.ElementAt(0).Id = Guid.NewGuid().ToString(); | |||
GLobal.deviceConfig.ElementAt(0).deviceModels.ElementAt(0).communicationDevcies.ElementAt(0).communicationPar.IPAddress = PLCAdress; | |||
File.WriteAllText($"{LocaPath.GetInstance().GetDeviceConfigPath}奶茶味魔方.json", JsonConvert.SerializeObject(GLobal.deviceConfig)); | |||
} | |||
} | |||
} | |||
} |
@@ -6,6 +6,7 @@ | |||
<ItemGroup> | |||
<PackageReference Include="NModbus" Version="3.0.72" /> | |||
<PackageReference Include="System.IO.Ports" Version="6.0.0" /> | |||
<PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" /> | |||
</ItemGroup> | |||
@@ -0,0 +1,225 @@ | |||
using NModbus; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.IO.Ports; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPASmartClient.Modbus | |||
{ | |||
public class ModbusRTU | |||
{ | |||
#region 参数配置 | |||
private static IModbusMaster master; | |||
private static IModbusSerialMaster serialMaster; | |||
private static ModbusFactory factory; | |||
private static SerialPort port; | |||
//写线圈或写寄存器数组 | |||
private bool[] coilsBuffer; | |||
private ushort[] registerBuffer; | |||
//功能码 | |||
private string functionCode; | |||
//串口参数 | |||
private string portName; | |||
private int baudRate; | |||
private Parity parity; | |||
private int dataBits; | |||
private StopBits stopBits; | |||
#endregion | |||
#region 串口配置 | |||
/// <summary> | |||
/// 串口参数获取 | |||
/// </summary> | |||
/// <returns></返回串口配置参数> | |||
public void InitSerialPortParameter(string protName, int bauRate, string currentParity, int dataBits, string currentStopBits) | |||
{ | |||
switch (currentParity) | |||
{ | |||
case "奇": | |||
parity = Parity.Odd; | |||
break; | |||
case "偶": | |||
parity = Parity.Even; | |||
break; | |||
case "无": | |||
parity = Parity.None; | |||
break; | |||
default: | |||
break; | |||
} | |||
switch (currentStopBits) | |||
{ | |||
case "1": | |||
stopBits = StopBits.One; | |||
break; | |||
case "2": | |||
stopBits = StopBits.Two; | |||
break; | |||
default: | |||
break; | |||
} | |||
port = new SerialPort(portName, baudRate, parity, dataBits, stopBits); | |||
//master = factory.CreateMaster() | |||
} | |||
#endregion | |||
#region 串口收/发 | |||
public async void ExecuteFunctionRecive(string functionCode, byte slaveAddress, ushort startAddress, ushort numberOfPoints) | |||
{ | |||
try | |||
{ | |||
if (port.IsOpen == false) | |||
{ | |||
port.Open(); | |||
} | |||
if (functionCode != null) | |||
{ | |||
switch (functionCode) | |||
{ | |||
case "01 Read Coils"://读取单个线圈 | |||
try | |||
{ | |||
coilsBuffer = master.ReadCoils(slaveAddress, startAddress, numberOfPoints); | |||
} | |||
catch (Exception) | |||
{ | |||
//MessageBox.Show(e.Message); | |||
break; | |||
} | |||
break; | |||
case "02 Read DisCrete Inputs"://读取输入线圈/离散量线圈 | |||
try | |||
{ | |||
coilsBuffer = master.ReadInputs(slaveAddress, startAddress, numberOfPoints); | |||
} | |||
catch (Exception) | |||
{ | |||
break; | |||
} | |||
break; | |||
case "03 Read Holding Registers"://读取保持寄存 | |||
try | |||
{ | |||
registerBuffer = master.ReadHoldingRegisters(slaveAddress, startAddress, numberOfPoints); | |||
} | |||
catch (Exception) | |||
{ | |||
break; | |||
} | |||
break; | |||
case "04 Read Input Registers"://读取输入寄存器 | |||
try | |||
{ | |||
registerBuffer = master.ReadInputRegisters(slaveAddress, startAddress, numberOfPoints); | |||
} | |||
catch (Exception) | |||
{ | |||
break; | |||
} | |||
break; | |||
default: | |||
break; | |||
} | |||
} | |||
port.Close(); | |||
} | |||
catch (Exception ex) | |||
{ | |||
port.Close(); | |||
} | |||
} | |||
public async void ExecuteFunctionSend(string data, byte slaveAddress, ushort startAddress) | |||
{ | |||
try | |||
{ | |||
if (port.IsOpen == false) | |||
{ | |||
port.Open(); | |||
} | |||
if (functionCode != null) | |||
{ | |||
switch (functionCode) | |||
{ | |||
case "05 Write Single Coil"://写单个线圈 | |||
SetWriteParametes(data,true); | |||
await master.WriteSingleCoilAsync(slaveAddress, startAddress, coilsBuffer[0]); | |||
break; | |||
case "06 Write Single Registers"://写单个输入线圈/离散量线圈 | |||
SetWriteParametes(data,true); | |||
await master.WriteSingleRegisterAsync(slaveAddress, startAddress, registerBuffer[0]); | |||
break; | |||
case "0F Write Multiple Coils"://写一组线圈 | |||
SetWriteParametes(data); | |||
await master.WriteMultipleCoilsAsync(slaveAddress, startAddress, coilsBuffer); | |||
break; | |||
case "10 Write Multiple Registers"://写一组保持寄存器 | |||
SetWriteParametes(data); | |||
await master.WriteMultipleRegistersAsync(slaveAddress, startAddress, registerBuffer); | |||
break; | |||
default: | |||
break; | |||
} | |||
} | |||
port.Close(); | |||
} | |||
catch (Exception ex) | |||
{ | |||
port.Close(); | |||
} | |||
} | |||
#endregion | |||
/// <summary> | |||
/// 设置写参数 | |||
/// </summary> | |||
private void SetWriteParametes(string data,bool isParametes =false) | |||
{ | |||
//判断是否写线圈 | |||
if (isParametes) | |||
{ | |||
string[] strarr = data.Split(' '); | |||
coilsBuffer = new bool[strarr.Length]; | |||
//转化为bool数组 | |||
for (int i = 0; i < strarr.Length; i++) | |||
{ | |||
// strarr[i] == "0" ? coilsBuffer[i] = false : coilsBuffer[i] = true; | |||
if (strarr[i] == "0") | |||
{ | |||
coilsBuffer[i] = false; | |||
} | |||
else | |||
{ | |||
coilsBuffer[i] = true; | |||
} | |||
} | |||
} | |||
else | |||
{ | |||
//转化ushort数组 | |||
string[] strarr = data.Split(' '); | |||
registerBuffer = new ushort[strarr.Length]; | |||
for (int i = 0; i < strarr.Length; i++) | |||
{ | |||
registerBuffer[i] = ushort.Parse(strarr[i]); | |||
} | |||
} | |||
} | |||
} | |||
} |
@@ -47,6 +47,7 @@ | |||
<ItemGroup> | |||
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.1264.42" /> | |||
<PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" /> | |||
</ItemGroup> | |||
</Project> |
@@ -36,7 +36,7 @@ namespace BPASmartClient.MorkTM | |||
Dictionary<int, float> res = new Dictionary<int, float>(); | |||
res.Add(Convert.ToInt32(o[0]), Convert.ToSingle(o[1])); | |||
SetMatertialWeight(res); | |||
Thread.Sleep(1000); | |||
Thread.Sleep(100); | |||
OpenUsePassageWay(Convert.ToInt32(o[0])); | |||
} | |||
}), "通道口出料"); | |||
@@ -82,7 +82,7 @@ namespace BPASmartClient.MorkTM | |||
{ | |||
if (o != null && o is WritePar writePar) WriteData(writePar.Address, writePar.Value); | |||
}), "WriteBools"); | |||
morkTM.ReachPosions = new List<bool>() { morkTM.ReachOutPosion_0, morkTM.ReachPosion_1, morkTM.ReachPosion_2, morkTM.ReachPosion_3, morkTM.ReachPosion_4, morkTM.ReachPosion_5, morkTM.ReachPosion_6 }; | |||
morkTM.ReachPosions = new List<bool>() { morkTM.ReachPosion_1, morkTM.ReachPosion_2, morkTM.ReachPosion_3, morkTM.ReachPosion_4, morkTM.ReachPosion_5, morkTM.ReachPosion_6 , morkTM.ReachOutPosion_0, }; | |||
DeviceProcessLogShow("设备初始化完成"); | |||
@@ -170,11 +170,12 @@ namespace BPASmartClient.MorkTM | |||
{ | |||
if (morkTM.morkOrderPushesTeaWithMilk.TryDequeue(out OrderLocInfo orderLoc)) //&&原点位置是否有杯子) | |||
{ | |||
DeviceProcessLogShow($"开始制作奶茶{orderLoc.GoodName}"); | |||
morkTM.MakeCount = 0; | |||
SetMatertialWeight(orderLoc.GoodPushes);//设置物料出料量 | |||
morkTM.RecipesPushes.Clear(); | |||
morkTM.RecipesPushes = orderLoc.GoodPushes; | |||
MakeProcess(orderLoc.GoodName, morkTM.MakeCount, morkTM.RecipesPushes.Count); | |||
MakeProcess(orderLoc.GoodName, morkTM.MakeCount, morkTM.RecipesPushes.Count);//制作进度 | |||
OrderChange(orderLoc.SuborderId, ORDER_STATUS.COOKING); | |||
foreach (var item in morkTM.RecipesPushes) | |||
{ | |||
@@ -189,9 +190,6 @@ namespace BPASmartClient.MorkTM | |||
OrderChange(orderLoc.SuborderId, ORDER_STATUS.COMPLETED_COOK); | |||
MakeProcess(orderLoc.GoodName, 1, 1); | |||
DeviceProcessLogShow($"奶茶{orderLoc.GoodName}制作完成"); | |||
} | |||
} | |||
} | |||
@@ -240,7 +238,7 @@ namespace BPASmartClient.MorkTM | |||
return; | |||
} | |||
} | |||
while(!morkTM.ReachPosions[i])//等待转盘到达信号 | |||
while(!morkTM.ReachPosions[i-1])//等待转盘到达信号 | |||
{ | |||
Thread.Sleep(1000); | |||
} | |||
@@ -284,13 +282,12 @@ namespace BPASmartClient.MorkTM | |||
return ; | |||
} | |||
} | |||
while(morkTM.ReachPosions[i-1]) | |||
while(morkTM.ReachPosions[posion - 1]) | |||
{ | |||
Thread.Sleep(1000); | |||
} | |||
WriteData(address,false); | |||
DeviceProcessLogShow($"转盘转动到位置{i}"); | |||
} | |||
} | |||
@@ -316,6 +313,7 @@ namespace BPASmartClient.MorkTM | |||
private void CheckPassway(int passway,int time) | |||
{ | |||
WriteData(polymer.PasswayPosionList[(MaterialPosion)passway], Convert.ToInt32(time * expand));//写入出料时间 | |||
Thread.Sleep(100); | |||
WriteData("M5.0", true);//开始校正 | |||
} | |||
@@ -348,6 +346,7 @@ namespace BPASmartClient.MorkTM | |||
{ | |||
int value = Convert.ToInt32(material.Value*expand); | |||
WriteData(polymer.MaterialPosionList[(MaterialPosion)material.Key], value); | |||
DeviceProcessLogShow($"通道{material.Key}预设料{material.Value}g"); | |||
Thread.Sleep(200); | |||
} | |||
} | |||
@@ -1,5 +1,7 @@ | |||
using System; | |||
using BPASmartClient.Helper; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Data; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
@@ -15,7 +17,7 @@ namespace BPASmartClient.MorkTM | |||
} | |||
public enum OutMaterialPosion | |||
{ | |||
出料位=0, 一号位 = 1, 二号位 = 2, 三号位 = 3, 四号位 = 4, 五号位 = 5, 六号位 = 6 | |||
一号位 = 1, 二号位 = 2, 三号位 = 3, 四号位 = 4, 五号位 = 5, 六号位 = 6,出料位 = 0 | |||
} | |||
public class CommationPosionPLC | |||
{ | |||
@@ -34,7 +36,7 @@ namespace BPASmartClient.MorkTM | |||
public class PolymerBatching | |||
{ | |||
/// <summary> | |||
/// 物料对应的plc点位 | |||
/// 物料需求对应的plc点位 | |||
/// </summary> | |||
public Dictionary<MaterialPosion, string> MaterialPosionList = new Dictionary<MaterialPosion, string>() | |||
{ | |||
@@ -69,7 +71,7 @@ namespace BPASmartClient.MorkTM | |||
}; | |||
/// <summary> | |||
/// 通道校正PLC点位 | |||
/// 通道校正值PLC点位 | |||
/// </summary> | |||
public Dictionary<MaterialPosion, string> PasswayPosionList = new Dictionary<MaterialPosion, string>() | |||
{ | |||
@@ -108,48 +110,50 @@ namespace BPASmartClient.MorkTM | |||
/// </summary> | |||
public List<CommationPosionPLC> TurnPosionPLCs = new List<CommationPosionPLC>() | |||
{ | |||
new CommationPosionPLC("M4.0","M14.0",OutMaterialPosion.一号位), | |||
new CommationPosionPLC("M4.1","M14.1",OutMaterialPosion.二号位), | |||
new CommationPosionPLC("M4.2","M14.2",OutMaterialPosion.三号位), | |||
new CommationPosionPLC("M4.3","M14.3",OutMaterialPosion.四号位), | |||
new CommationPosionPLC("M4.4","M14.4",OutMaterialPosion.五号位), | |||
new CommationPosionPLC("M4.5","M14.5",OutMaterialPosion.六号位), | |||
//new CommationPosionPLC("M4.0","M14.0",OutMaterialPosion.一号位), | |||
//new CommationPosionPLC("M4.1","M14.1",OutMaterialPosion.二号位), | |||
//new CommationPosionPLC("M4.2","M14.2",OutMaterialPosion.三号位), | |||
//new CommationPosionPLC("M4.3","M14.3",OutMaterialPosion.四号位), | |||
//new CommationPosionPLC("M4.4","M14.4",OutMaterialPosion.五号位), | |||
//new CommationPosionPLC("M4.5","M14.5",OutMaterialPosion.六号位), | |||
}; | |||
/// <summary> | |||
/// <summary> | |||
/// plc出料点位 | |||
/// </summary> | |||
public List<CommationPosionPLC> OutPosionPLCs = new List<CommationPosionPLC>() | |||
{ | |||
new CommationPosionPLC("M0.0","M10.0",MaterialPosion.Top1), | |||
new CommationPosionPLC("M0.1","M10.1",MaterialPosion.Top2), | |||
new CommationPosionPLC("M0.2","M10.2",MaterialPosion.Top3), | |||
new CommationPosionPLC("M0.3","M10.3",MaterialPosion.Top4), | |||
new CommationPosionPLC("M0.4","M10.4",MaterialPosion.Top5), | |||
new CommationPosionPLC("M0.5","M10.5",MaterialPosion.Top6), | |||
new CommationPosionPLC("M0.6","M10.6",MaterialPosion.Top7), | |||
new CommationPosionPLC("M0.7","M10.7",MaterialPosion.Top8), | |||
new CommationPosionPLC("M1.0","M11.0",MaterialPosion.Top9), | |||
new CommationPosionPLC("M1.1","M11.1",MaterialPosion.Top10), | |||
new CommationPosionPLC("M1.2","M11.2",MaterialPosion.Top11), | |||
new CommationPosionPLC("M1.3","M11.3",MaterialPosion.Top12), | |||
new CommationPosionPLC("M1.4","M11.4",MaterialPosion.Top13), | |||
new CommationPosionPLC("M1.5","M11.5",MaterialPosion.Top14), | |||
new CommationPosionPLC("M1.6","M11.6",MaterialPosion.Top15), | |||
new CommationPosionPLC("M1.7","M11.7",MaterialPosion.Top16), | |||
new CommationPosionPLC("M2.0","M12.0",MaterialPosion.Top17), | |||
new CommationPosionPLC("M2.1","M12.1",MaterialPosion.Top18), | |||
new CommationPosionPLC("M2.2","M12.2",MaterialPosion.Top19), | |||
new CommationPosionPLC("M2.3","M12.3",MaterialPosion.Top20), | |||
new CommationPosionPLC("M2.4","M12.4",MaterialPosion.Top21), | |||
new CommationPosionPLC("M2.5","M12.5",MaterialPosion.Top22), | |||
new CommationPosionPLC("M2.6","M12.6",MaterialPosion.Top23), | |||
new CommationPosionPLC("M2.7","M12.7",MaterialPosion.Top24), | |||
new CommationPosionPLC("M3.0","M13.0",MaterialPosion.Top25), | |||
new CommationPosionPLC("M3.1","M13.1",MaterialPosion.Top26), | |||
new CommationPosionPLC("M3.2","M13.2",MaterialPosion.Top27), | |||
new CommationPosionPLC("M3.3","M13.3",MaterialPosion.Top28), | |||
//new CommationPosionPLC("M0.0","M10.0",MaterialPosion.Top1), | |||
//new CommationPosionPLC("M0.1","M10.1",MaterialPosion.Top2), | |||
//new CommationPosionPLC("M0.2","M10.2",MaterialPosion.Top3), | |||
//new CommationPosionPLC("M0.3","M10.3",MaterialPosion.Top4), | |||
//new CommationPosionPLC("M0.4","M10.4",MaterialPosion.Top5), | |||
//new CommationPosionPLC("M0.5","M10.5",MaterialPosion.Top6), | |||
//new CommationPosionPLC("M0.6","M10.6",MaterialPosion.Top7), | |||
//new CommationPosionPLC("M0.7","M10.7",MaterialPosion.Top8), | |||
//new CommationPosionPLC("M1.0","M11.0",MaterialPosion.Top9), | |||
//new CommationPosionPLC("M1.1","M11.1",MaterialPosion.Top10), | |||
//new CommationPosionPLC("M1.2","M11.2",MaterialPosion.Top11), | |||
//new CommationPosionPLC("M1.3","M11.3",MaterialPosion.Top12), | |||
//new CommationPosionPLC("M1.4","M11.4",MaterialPosion.Top13), | |||
//new CommationPosionPLC("M1.5","M11.5",MaterialPosion.Top14), | |||
//new CommationPosionPLC("M1.6","M11.6",MaterialPosion.Top15), | |||
//new CommationPosionPLC("M1.7","M11.7",MaterialPosion.Top16), | |||
//new CommationPosionPLC("M2.0","M12.0",MaterialPosion.Top17), | |||
//new CommationPosionPLC("M2.1","M12.1",MaterialPosion.Top18), | |||
//new CommationPosionPLC("M2.2","M12.2",MaterialPosion.Top19), | |||
//new CommationPosionPLC("M2.3","M12.3",MaterialPosion.Top20), | |||
//new CommationPosionPLC("M2.4","M12.4",MaterialPosion.Top21), | |||
//new CommationPosionPLC("M2.5","M12.5",MaterialPosion.Top22), | |||
//new CommationPosionPLC("M2.6","M12.6",MaterialPosion.Top23), | |||
//new CommationPosionPLC("M2.7","M12.7",MaterialPosion.Top24), | |||
//new CommationPosionPLC("M3.0","M13.0",MaterialPosion.Top25), | |||
//new CommationPosionPLC("M3.1","M13.1",MaterialPosion.Top26), | |||
//new CommationPosionPLC("M3.2","M13.2",MaterialPosion.Top27), | |||
//new CommationPosionPLC("M3.3","M13.3",MaterialPosion.Top28), | |||
}; | |||
/// <summary> | |||
/// 通道绑定出料位置 | |||
/// </summary> | |||
public void GetMaterialInfo() | |||
{ | |||
List<MaterialPosion> materialPosions = Enum.GetValues(typeof(MaterialPosion)).Cast<MaterialPosion>().ToList(); | |||
@@ -168,9 +172,36 @@ namespace BPASmartClient.MorkTM | |||
} | |||
} | |||
} | |||
} | |||
/// <summary> | |||
/// 出料通道和出料口位置绑定集合 | |||
/// 一号位(1,2,3,4,5),二号位(6,7,8,9,10),三号位(11,12,13,14),4号位(15,16,17,18),五号位(19,20,21,22,23),六号位(24,25,26,27,28) | |||
/// </summary> | |||
public Dictionary<List<MaterialPosion>, CommationPosionPLC> GoodsMaterialPosion = new Dictionary<List<MaterialPosion>, CommationPosionPLC>(); | |||
string Path = AppDomain.CurrentDomain.BaseDirectory + "AccessFile\\DeviceConfig\\PLCVars.csv"; | |||
private void init() | |||
{ | |||
DataTable dt = ExcelHelper.ReadDataFromCSV(Path); | |||
DataRowCollection dr = dt.Rows; | |||
for (int i = 0; i < 28; i++) | |||
{ | |||
OutPosionPLCs.Add(new CommationPosionPLC(dr[i][0].ToString(), dr[i][2].ToString(), (MaterialPosion)i+1)); | |||
} | |||
for(int i = 28; i <34;i++) | |||
{ | |||
TurnPosionPLCs.Add(new CommationPosionPLC(dr[i][0].ToString(), dr[i][2].ToString(), (OutMaterialPosion)i - 27)); | |||
} | |||
} | |||
public PolymerBatching() | |||
{ | |||
init(); | |||
} | |||
} | |||
} |
@@ -154,7 +154,7 @@ namespace BPASmartClient.SerialPort | |||
{ | |||
if (!IsHavePort) | |||
{ | |||
MessageLog.GetInstance.Show("咖乐美咖啡机连接失败"); | |||
//MessageLog.GetInstance.Show("咖乐美咖啡机连接失败"); | |||
return; | |||
} | |||
if (comPort.IsOpen) comPort.Close(); | |||
@@ -164,7 +164,7 @@ namespace BPASmartClient.SerialPort | |||
comPort.DataBits = (int)dataBits; | |||
comPort.StopBits = stopBits; | |||
comPort.Open(); | |||
MessageLog.GetInstance.Show("咖乐美咖啡机连接成功"); | |||
//MessageLog.GetInstance.Show("咖乐美咖啡机连接成功"); | |||
} | |||
} | |||
@@ -6,20 +6,20 @@ | |||
<!--<add key="ClientId" value="43"/>--> | |||
<add key="IsEnableTest" value="false"/> | |||
<!--测试环境--> | |||
<!--测试环境--><!-- | |||
<add key="apollouri" value="http://10.2.1.21:28080/"/> | |||
<add key="AppId" value="test1_HostComputer"/> | |||
<add key ="Namespaces" value="DEV.test1.Config"/> | |||
<add key ="Namespaces" value="DEV.test1.Config"/>--> | |||
<!--开发环境--> | |||
<!--开发环境--><!-- | |||
<add key="apollouri" value="http://10.2.1.21:28080/"/> | |||
<add key="AppId" value="HostComputer"/> | |||
<add key ="Namespaces" value="DEV.Config"/> | |||
<add key ="Namespaces" value="DEV.Config"/>--> | |||
<!--正式环境--> | |||
<!--<add key="apollouri" value="http://47.108.65.220:28080/"/> | |||
<!--正式环境--> | |||
<add key="apollouri" value="http://47.108.65.220:28080/"/> | |||
<add key="AppId" value="HostComputer"/> | |||
<add key ="Namespaces" value="TEST1.Config"/>--> | |||
<add key ="Namespaces" value="TEST1.Config"/> | |||
<!--阿里云上报启动方式:API 或者 LOCAL--> | |||
<!--API :通过客户端ID,调用接口查询“设备连接信息”--> | |||
@@ -118,7 +118,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BPASmartClient.HubHelper", | |||
EndProject | |||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BPASmartClient.MorkTM", "BPASmartClient.MorkTM\BPASmartClient.MorkTM.csproj", "{76B6B333-0109-4EE8-A9B2-3E53A7421D92}" | |||
EndProject | |||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BPASmartClient.MilkWithTea", "BPASmartClient.MilkWithTea\BPASmartClient.MilkWithTea.csproj", "{BFA4E222-BBCC-4AC7-9EA4-4549AEF3174B}" | |||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BPASmartClient.MilkWithTea", "BPASmartClient.MilkWithTea\BPASmartClient.MilkWithTea.csproj", "{BFA4E222-BBCC-4AC7-9EA4-4549AEF3174B}" | |||
EndProject | |||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElectricCurrentTestDemo", "..\..\TEST\ElectricCurrentTestDemo\ElectricCurrentTestDemo.csproj", "{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}" | |||
EndProject | |||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BPASmartClient.KHKJ", "BPASmartClient.KHKJ\BPASmartClient.KHKJ.csproj", "{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}" | |||
EndProject | |||
Global | |||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||
@@ -1134,6 +1138,46 @@ Global | |||
{BFA4E222-BBCC-4AC7-9EA4-4549AEF3174B}.Release|x64.Build.0 = Release|Any CPU | |||
{BFA4E222-BBCC-4AC7-9EA4-4549AEF3174B}.Release|x86.ActiveCfg = Release|Any CPU | |||
{BFA4E222-BBCC-4AC7-9EA4-4549AEF3174B}.Release|x86.Build.0 = Release|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Debug|ARM.ActiveCfg = Debug|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Debug|ARM.Build.0 = Debug|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Debug|ARM64.ActiveCfg = Debug|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Debug|ARM64.Build.0 = Debug|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Debug|x64.ActiveCfg = Debug|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Debug|x64.Build.0 = Debug|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Debug|x86.ActiveCfg = Debug|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Debug|x86.Build.0 = Debug|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Release|Any CPU.Build.0 = Release|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Release|ARM.ActiveCfg = Release|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Release|ARM.Build.0 = Release|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Release|ARM64.ActiveCfg = Release|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Release|ARM64.Build.0 = Release|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Release|x64.ActiveCfg = Release|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Release|x64.Build.0 = Release|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Release|x86.ActiveCfg = Release|Any CPU | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44}.Release|x86.Build.0 = Release|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Debug|ARM.ActiveCfg = Debug|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Debug|ARM.Build.0 = Debug|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Debug|ARM64.ActiveCfg = Debug|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Debug|ARM64.Build.0 = Debug|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Debug|x64.ActiveCfg = Debug|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Debug|x64.Build.0 = Debug|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Debug|x86.ActiveCfg = Debug|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Debug|x86.Build.0 = Debug|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Release|Any CPU.Build.0 = Release|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Release|ARM.ActiveCfg = Release|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Release|ARM.Build.0 = Release|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Release|ARM64.ActiveCfg = Release|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Release|ARM64.Build.0 = Release|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Release|x64.ActiveCfg = Release|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Release|x64.Build.0 = Release|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Release|x86.ActiveCfg = Release|Any CPU | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B}.Release|x86.Build.0 = Release|Any CPU | |||
EndGlobalSection | |||
GlobalSection(SolutionProperties) = preSolution | |||
HideSolutionNode = FALSE | |||
@@ -1189,6 +1233,8 @@ Global | |||
{099E047C-F40E-47A3-A5BA-81FC1500D5E8} = {3D1D0E04-03FD-480A-8CF8-6E01A2E28625} | |||
{76B6B333-0109-4EE8-A9B2-3E53A7421D92} = {9FB27073-61A0-4FE3-94DB-5FDDE062332F} | |||
{BFA4E222-BBCC-4AC7-9EA4-4549AEF3174B} = {8712125E-14CD-4E1B-A1CE-4BDE03805942} | |||
{75B55300-ABC3-4CA1-B9B6-DF954E6C7B44} = {8712125E-14CD-4E1B-A1CE-4BDE03805942} | |||
{C0060FB3-7AEA-4D14-ADCE-DB78D3665D5B} = {666CB1A9-562E-453A-A2C7-FD9D77CFDFDD} | |||
EndGlobalSection | |||
GlobalSection(ExtensibilityGlobals) = postSolution | |||
SolutionGuid = {9AEC9B81-0222-4DE9-B642-D915C29222AC} | |||