diff --git a/CapMachine.Wpf/CanDrive/ToomossCan.cs b/CapMachine.Wpf/CanDrive/ToomossCan.cs
index def1ba3..b90cbf3 100644
--- a/CapMachine.Wpf/CanDrive/ToomossCan.cs
+++ b/CapMachine.Wpf/CanDrive/ToomossCan.cs
@@ -675,6 +675,8 @@ namespace CapMachine.Wpf.CanDrive
//关闭设备
USB_DEVICE.USB_CloseDevice(DevHandle);
OpenState = false;
+ IsCycleRevice = false;
+ IsCycleSend = false;
}
}
diff --git a/CapMachine.Wpf/Models/AutoHandSwtichCondition.cs b/CapMachine.Wpf/Models/AutoHandSwtichCondition.cs
new file mode 100644
index 0000000..1428e0e
--- /dev/null
+++ b/CapMachine.Wpf/Models/AutoHandSwtichCondition.cs
@@ -0,0 +1,64 @@
+using HslCommunication;
+using Prism.Mvvm;
+using System;
+using System.Collections.Generic;
+using System.IO.Ports;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CapMachine.Wpf.Models
+{
+ ///
+ /// 手自动切换的条件
+ ///
+ public class AutoHandSwtichCondition : BindableBase
+ {
+ private bool _IsCanSwitch;
+ ///
+ /// 是否可切换
+ ///
+ public bool IsCanSwitch
+ {
+ get { return _IsCanSwitch; }
+ set { _IsCanSwitch = value; RaisePropertyChanged(); }
+ }
+
+ ///
+ /// 全部报警地址
+ ///
+ public string? AlarmAddress { get; set; } = "V3.0";
+
+ ///
+ /// 报警结果
+ ///
+ public OperateResult? AlarmStateResult { get; set; }
+
+ ///
+ /// 手动状态地址
+ ///
+ public string? HandStateAddress { get; set; } = "M0.0";
+
+ ///
+ /// 手动状态结果
+ ///
+ public OperateResult? HandStateResult { get; set; }
+
+ ///
+ /// 汇总结果
+ ///
+ ///
+ ///
+ ///
+ public void SumResult()
+ {
+ if (AlarmStateResult!.IsSuccess && HandStateResult!.IsSuccess)
+ {
+ //IsCanSwitch = AlarmStateResult.Content==false && HandStateResult.Content==false;
+ IsCanSwitch = HandStateResult.Content==false;
+ //return IsCanSwitch;
+ }
+
+ }
+ }
+}
diff --git a/CapMachine.Wpf/Models/Tag/ITag.cs b/CapMachine.Wpf/Models/Tag/ITag.cs
index ec1a49a..a7d5cbe 100644
--- a/CapMachine.Wpf/Models/Tag/ITag.cs
+++ b/CapMachine.Wpf/Models/Tag/ITag.cs
@@ -54,7 +54,7 @@ namespace CapMachine.Wpf.Models.Tag
///
/// 工程值 Mv
///
- short EngMvValue { get; set; }
+ double EngMvValue { get; set; }
///
/// 工程值的字符串 Mv
diff --git a/CapMachine.Wpf/Models/Tag/Tag.cs b/CapMachine.Wpf/Models/Tag/Tag.cs
index 87fb167..719dc74 100644
--- a/CapMachine.Wpf/Models/Tag/Tag.cs
+++ b/CapMachine.Wpf/Models/Tag/Tag.cs
@@ -235,11 +235,11 @@ namespace CapMachine.Wpf.Models.Tag
}
- private short _EngMvValue;
+ private double _EngMvValue;
///
/// 工程值 MV
///
- public short EngMvValue
+ public double EngMvValue
{
get { return _EngMvValue; }
set
diff --git a/CapMachine.Wpf/Services/CanDriveService.cs b/CapMachine.Wpf/Services/CanDriveService.cs
index e1751b3..5ecfe3b 100644
--- a/CapMachine.Wpf/Services/CanDriveService.cs
+++ b/CapMachine.Wpf/Services/CanDriveService.cs
@@ -143,7 +143,7 @@ namespace CapMachine.Wpf.Services
{
if (ToomossCanDrive.IsCycleRevice == false)
{
- if (CmdData.Count > 0)
+ if (ListCanDbcModel.Count > 0)
{
ToomossCanDrive.IsCycleRevice = true;
ToomossCanDrive.StartCycleReviceCanMsg();
diff --git a/CapMachine.Wpf/Services/MachineRtDataService.cs b/CapMachine.Wpf/Services/MachineRtDataService.cs
index 6f88798..0cfd352 100644
--- a/CapMachine.Wpf/Services/MachineRtDataService.cs
+++ b/CapMachine.Wpf/Services/MachineRtDataService.cs
@@ -96,6 +96,11 @@ namespace CapMachine.Wpf.Services
///
public List HistoryData { get; set; } = new List();
+ ///
+ /// 手自动切换的条件
+ ///
+ public AutoHandSwtichCondition AutoHandSwtichConditionState { get; set; } = new AutoHandSwtichCondition();
+
///
/// 实例化函数
///
@@ -125,7 +130,7 @@ namespace CapMachine.Wpf.Services
#region 标签管理
//【测试】
- TagManger.AddTag(new Tag("转速", "转速[rpm]", "Speed", "程序", "VW15000", 100, 0, 1, "rpm", new ShortTagValue(), true) { DecimalPoint = 0 });
+ //TagManger.AddTag(new Tag("转速", "转速[rpm]", "Speed", "程序", "VW15000", 100, 0, 1, "rpm", new ShortTagValue(), true) { DecimalPoint = 0 });
//TagManger.AddTag(new Tag("排气压力", "排气压力[BarA]", "ExPress", "程序", "VW15002", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2 });
//TagManger.AddTag(new Tag("吸气压力", "吸气压力[BarA]", "InhPress", "程序", "VW15004", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2 });
//TagManger.AddTag(new Tag("吸气温度", "吸气温度[℃]", "InhTemp", "程序", "VW15006", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1 });
@@ -203,9 +208,9 @@ namespace CapMachine.Wpf.Services
Unit = "MpaA",
PVAddress = "VW102",//地址信息
SVAddress = "VW202",
- MVAddress = "VW246",
+ MVAddress = "VW242",
IsMeter = true,
- AutoHandSwitchAddress = "VW244",
+ AutoHandSwitchAddress = "VW240",
Precision = 1000,
DecimalPoint = 3,
Samp = 1,
@@ -223,9 +228,9 @@ namespace CapMachine.Wpf.Services
Unit = "MpaA",
PVAddress = "VW104",//地址信息
SVAddress = "VW204",
- MVAddress = "VW250",
+ MVAddress = "VW246",
IsMeter = true,
- AutoHandSwitchAddress = "VW248",
+ AutoHandSwitchAddress = "VW244",
Precision = 1000,
DecimalPoint = 3,
Samp = 1,
@@ -243,9 +248,9 @@ namespace CapMachine.Wpf.Services
Unit = "℃",
PVAddress = "VW106",//地址信息
SVAddress = "VW206",
- MVAddress = "VW254",
+ MVAddress = "VW250",
IsMeter = true,
- AutoHandSwitchAddress = "VW252",
+ AutoHandSwitchAddress = "VW248",
Precision = 10,
DecimalPoint = 1,
Samp = 1,
@@ -263,9 +268,9 @@ namespace CapMachine.Wpf.Services
Unit = "℃",
PVAddress = "VW108",//地址信息
SVAddress = "VW208",
- MVAddress = "VW258",
+ MVAddress = "VW254",
IsMeter = true,
- AutoHandSwitchAddress = "VW256",
+ AutoHandSwitchAddress = "VW252",
Precision = 10,
DecimalPoint = 1,
Samp = 1,
@@ -283,9 +288,9 @@ namespace CapMachine.Wpf.Services
Unit = "℃",
PVAddress = "VW110",//地址信息
SVAddress = "VW210",
- MVAddress = "VW262",
+ MVAddress = "VW258",
IsMeter = true,
- AutoHandSwitchAddress = "VW260",
+ AutoHandSwitchAddress = "VW256",
Precision = 10,
DecimalPoint = 1,
Samp = 1,
@@ -303,9 +308,9 @@ namespace CapMachine.Wpf.Services
Unit = "V",
PVAddress = "VW112",//地址信息
SVAddress = "VW212",
- MVAddress = "",
+ MVAddress = "VW262",
IsMeter = true,
- AutoHandSwitchAddress = "",
+ AutoHandSwitchAddress = "VW260",
Precision = 10,
DecimalPoint = 1,
Samp = 1,
@@ -1097,26 +1102,26 @@ namespace CapMachine.Wpf.Services
TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.IsShow = IsValueShow;
- //仿真数据
- TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = (short)Random.Next(1, 100);
- TagManger.GetTagByName(itemTag.Value.Name).EngPvValue = (short)Random.Next(1, 100) * 1.0 / TagManger.GetTagByName(itemTag.Value.Name)!.Precision;
- LinkState = false;
+ ////仿真数据
+ //TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = (short)Random.Next(1, 100);
+ //TagManger.GetTagByName(itemTag.Value.Name).EngPvValue = (short)Random.Next(1, 100) * 1.0 / TagManger.GetTagByName(itemTag.Value.Name)!.Precision;
+ //LinkState = false;
- ////PLC 数据
- //if (!string.IsNullOrEmpty(itemTag.Value.PVAddress))
- //{
- // OperateResultShort = SiemensDrive.ReadInt16(itemTag.Value.PVAddress);
- // if (OperateResultShort.IsSuccess)
- // {
- // TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = SiemensDrive.ReadInt16(itemTag.Value.PVAddress).Content;
- // TagManger.GetTagByName(itemTag.Value.Name).EngPvValue = TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value * 1.0 / TagManger.GetTagByName(itemTag.Value.Name)!.Precision;
- // LinkState = true;
- // }
- // else
- // {
- // LinkState = false;
- // }
- //}
+ //PLC 数据
+ if (!string.IsNullOrEmpty(itemTag.Value.PVAddress))
+ {
+ OperateResultShort = SiemensDrive.ReadInt16(itemTag.Value.PVAddress);
+ if (OperateResultShort.IsSuccess)
+ {
+ TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = SiemensDrive.ReadInt16(itemTag.Value.PVAddress).Content;
+ TagManger.GetTagByName(itemTag.Value.Name).EngPvValue = TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value * 1.0 / TagManger.GetTagByName(itemTag.Value.Name)!.Precision;
+ LinkState = true;
+ }
+ else
+ {
+ LinkState = false;
+ }
+ }
if (!string.IsNullOrEmpty(itemTag.Value.SVAddress))
{
@@ -1139,7 +1144,7 @@ namespace CapMachine.Wpf.Services
if (OperateResultMVShort.IsSuccess)
{
//TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = OperateResultMVShort.Content;
- TagManger.GetTagByName(itemTag.Value.Name).EngMvValue = OperateResultMVShort.Content;
+ TagManger.GetTagByName(itemTag.Value.Name).EngMvValue = OperateResultMVShort.Content*1.0/10;
LinkState = true;
}
else
@@ -1148,6 +1153,11 @@ namespace CapMachine.Wpf.Services
}
}
+ //手自动切换按钮条件
+ AutoHandSwtichConditionState.AlarmStateResult= SiemensDrive.ReadBool(AutoHandSwtichConditionState.AlarmAddress);
+ AutoHandSwtichConditionState.HandStateResult= SiemensDrive.ReadBool(AutoHandSwtichConditionState.HandStateAddress);
+ AutoHandSwtichConditionState.SumResult();
+
break;
default:
break;
diff --git a/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs b/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs
index 1a602b9..60335c6 100644
--- a/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs
+++ b/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs
@@ -407,6 +407,19 @@ namespace CapMachine.Wpf.ViewModels
{
ListWriteCanLinRWConfigDto = new ObservableCollection(Mapper.Map>(WirteData));
+ //加载把当前的配置信息给指令
+ CanDriveService.CmdData.Clear();
+ foreach (var item in WirteData)
+ {
+ CanDriveService.CmdData.Add(new CanCmdData()
+ {
+ ConfigName = item.Name,
+ MsgName = item.MsgFrameName,
+ SignalName = item.SignalName,
+ SignalCmdValue = double.TryParse(item.DefautValue, out double result) == true ? result : 0,
+ });
+ }
+
}
var ReadData = SelectCanLinConfigPro.CanLinConfigContents!.Where(a => a.RWInfo == RW.Read).ToList();
if (ReadData != null && ReadData.Count > 0)
diff --git a/CapMachine.Wpf/ViewModels/MonitorViewModel.cs b/CapMachine.Wpf/ViewModels/MonitorViewModel.cs
index e374a9e..baf197a 100644
--- a/CapMachine.Wpf/ViewModels/MonitorViewModel.cs
+++ b/CapMachine.Wpf/ViewModels/MonitorViewModel.cs
@@ -334,10 +334,10 @@ namespace CapMachine.Wpf.ViewModels
{
switch (ChannelValue.Type)
{
- case "MV":
+ case "MV"://10的倍率
if (!string.IsNullOrEmpty(item.Value.MVAddress))
{
- var Result = MachineRtDataService.SiemensDrive.Write(item.Value.MVAddress, (short)((double)ChannelValue.Value));
+ var Result = MachineRtDataService.SiemensDrive.Write(item.Value.MVAddress, (short)((double)ChannelValue.Value * 10));
break;
}
break;
@@ -405,13 +405,36 @@ namespace CapMachine.Wpf.ViewModels
var FindData = ListHandSwitchData.FirstOrDefault(a => a.Name == Name);
if (FindData != null)
{
- //ToDo
- Console.WriteLine($"{FindData.Name}-{FindData.ActionAddress}-{FindData.StateAddress}-{Data}");
- var Result = MachineRtDataService.SiemensDrive.Write(FindData.ActionAddress, (bool)Data);
- if (Result.IsSuccess)
+ if (Name == "自动")
{
+ //手动切换是可以自由的切换,不受限制
+ //ToDo
+ Console.WriteLine($"{FindData.Name}-{FindData.ActionAddress}-{FindData.StateAddress}-{Data}");
+ var Result = MachineRtDataService.SiemensDrive.Write(FindData.ActionAddress, (bool)Data);
+ if (Result.IsSuccess)
+ {
+
+ }
}
+ else
+ {
+ //其他的手自动切换受条件过滤处理
+ if (!MachineRtDataService.AutoHandSwtichConditionState.IsCanSwitch)
+ {
+ System.Windows.MessageBox.Show("当前的切换需要在【手动】和【无报警】的情况下进行");
+ return;
+ }
+
+ //满足条件进行操作,只进行True操作,PLC会处理的
+ Console.WriteLine($"{FindData.Name}-{FindData.ActionAddress}-{FindData.StateAddress}-{Data}");
+ var Result = MachineRtDataService.SiemensDrive.Write(FindData.ActionAddress, true);
+ if (Result.IsSuccess)
+ {
+
+ }
+ }
+
//FindData.State = false;
}
}
diff --git a/CapMachine.Wpf/Views/CANConfigView.xaml b/CapMachine.Wpf/Views/CANConfigView.xaml
index 2ddc023..5c9df9d 100644
--- a/CapMachine.Wpf/Views/CANConfigView.xaml
+++ b/CapMachine.Wpf/Views/CANConfigView.xaml
@@ -273,7 +273,7 @@