@@ -59,6 +59,21 @@ namespace BPASmartClient.Business | |||||
/// 是否启用测试模式 | /// 是否启用测试模式 | ||||
/// </summary> | /// </summary> | ||||
public static bool IsEnableTest { get; set; } | public static bool IsEnableTest { get; set; } | ||||
/// <summary> | |||||
/// 大屏地址 | |||||
/// </summary> | |||||
public static string DataVApiAddress { get; set; } | |||||
/// <summary> | |||||
/// 大屏主题 | |||||
/// </summary> | |||||
public static string BroadcastPubTopic { get; set; } | |||||
/// <summary> | |||||
/// 物料管理地址 | |||||
/// </summary> | |||||
public static string WebServiceUri { get; set; } | |||||
#endregion | #endregion | ||||
} | } | ||||
@@ -26,6 +26,10 @@ namespace BPASmartClient.Business | |||||
/// </summary> | /// </summary> | ||||
public MQTT_Entity MQTT_Config { get; set; } | public MQTT_Entity MQTT_Config { get; set; } | ||||
public MQTT_Account Mqtt_Account { get; set; } | |||||
public UriConfig uriConfig { get; set; } | |||||
//Apollo地址 | //Apollo地址 | ||||
private string apolloUri; | private string apolloUri; | ||||
private string apoid; | private string apoid; | ||||
@@ -42,11 +46,11 @@ namespace BPASmartClient.Business | |||||
apolloUri = System.Configuration.ConfigurationManager.AppSettings["ApolloUri"].ToString(); | apolloUri = System.Configuration.ConfigurationManager.AppSettings["ApolloUri"].ToString(); | ||||
apoid = System.Configuration.ConfigurationManager.AppSettings["AppId"].ToString(); | apoid = System.Configuration.ConfigurationManager.AppSettings["AppId"].ToString(); | ||||
namespa = System.Configuration.ConfigurationManager.AppSettings["Namespaces"].ToString(); | namespa = System.Configuration.ConfigurationManager.AppSettings["Namespaces"].ToString(); | ||||
InternetInfo.OrderServer = System.Configuration.ConfigurationManager.AppSettings["OrderServiceUri"].ToString(); | |||||
InternetInfo.StockServer = System.Configuration.ConfigurationManager.AppSettings["StockServiceUri"].ToString(); | |||||
//InternetInfo.OrderServer = System.Configuration.ConfigurationManager.AppSettings["OrderServiceUri"].ToString(); | |||||
//InternetInfo.StockServer = System.Configuration.ConfigurationManager.AppSettings["StockServiceUri"].ToString(); | |||||
InternetInfo.IsEnableTest = bool.Parse(System.Configuration.ConfigurationManager.AppSettings["IsEnableTest"].ToString()); | InternetInfo.IsEnableTest = bool.Parse(System.Configuration.ConfigurationManager.AppSettings["IsEnableTest"].ToString()); | ||||
InitDeviceModel(); | InitDeviceModel(); | ||||
InitMQTT(); | |||||
InitConfig(); | |||||
} | } | ||||
public List<DeviceConfig> GetDeviceConfigs() | public List<DeviceConfig> GetDeviceConfigs() | ||||
@@ -132,30 +136,45 @@ namespace BPASmartClient.Business | |||||
/// <summary> | /// <summary> | ||||
/// 加载MQTT配置 | /// 加载MQTT配置 | ||||
/// </summary> | /// </summary> | ||||
private void InitMQTT() | |||||
//private void InitMQTT() | |||||
//{ | |||||
// IConfigurationBuilder configurationBuilder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()); | |||||
// configurationBuilder.AddApolloConfiguration(p => | |||||
// { | |||||
// p.AppId = apoid; | |||||
// p.MetaServer = apolloUri; | |||||
// p.Namespaces = new List<string>() { namespa }; | |||||
// }); | |||||
// IConfiguration config = configurationBuilder.Build(); | |||||
// var mqttBroker = config.GetSection("BrokerHostSettings"); | |||||
// MQTT_Config = mqttBroker.Value.FromJSON<MQTT_Entity>(); | |||||
// if (MQTT_Config == null) MessageLog.GetInstance.Show("获取配置数据为空!"); | |||||
//} | |||||
public void InitConfig() | |||||
{ | { | ||||
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()); | IConfigurationBuilder configurationBuilder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()); | ||||
//测试版本 | |||||
//configurationBuilder.AddApolloConfiguration(p => | |||||
// { | |||||
// p.AppId = "dev1_order"; | |||||
// p.MetaServer = apolloUri; | |||||
// p.Namespaces = new List<string>() { "DEV.Config" }; | |||||
// }); | |||||
//正式版本 | |||||
configurationBuilder.AddApolloConfiguration(p => | configurationBuilder.AddApolloConfiguration(p => | ||||
{ | { | ||||
p.AppId = apoid; | |||||
p.AppId = "HostComputer"; | |||||
p.MetaServer = apolloUri; | p.MetaServer = apolloUri; | ||||
p.Namespaces = new List<string>() { namespa }; | |||||
p.Namespaces = new List<string>() { "application", namespa }; | |||||
}); | }); | ||||
IConfiguration config = configurationBuilder.Build(); | IConfiguration config = configurationBuilder.Build(); | ||||
var mqttBroker = config.GetSection("BrokerHostSettings"); | |||||
MQTT_Config = mqttBroker.Value.FromJSON<MQTT_Entity>(); | |||||
if (MQTT_Config == null) MessageLog.GetInstance.Show("获取配置数据为空!"); | |||||
MQTT_Config = config.GetSection("BrokerHostSettings").Value.FromJSON<MQTT_Entity>(); | |||||
Mqtt_Account = config.GetSection("MqttAccount").Value.FromJSON<MQTT_Account>(); | |||||
uriConfig = config.GetSection("URL").Value.FromJSON<UriConfig>(); | |||||
if (uriConfig != null) | |||||
{ | |||||
InternetInfo.OrderServer = uriConfig.OrderServiceUrl; | |||||
InternetInfo.StockServer = uriConfig.StockServiceUrl; | |||||
InternetInfo.BroadcastPubTopic = uriConfig.BroadcastPubTopic; | |||||
InternetInfo.DataVApiAddress = uriConfig.DataVServiceUrl; | |||||
InternetInfo.WebServiceUri = uriConfig.WebServiceUrl; | |||||
ActionManage.GetInstance.Send("配置初始化完成Iot启动"); | |||||
} | |||||
} | } | ||||
public void Start() | public void Start() | ||||
@@ -167,5 +186,20 @@ namespace BPASmartClient.Business | |||||
public string Host { get; set; } | public string Host { get; set; } | ||||
public int Port { get; set; } | public int Port { get; set; } | ||||
} | } | ||||
public class MQTT_Account | |||||
{ | |||||
public string UserName { get; set; } | |||||
public string Password { get; set; } | |||||
} | |||||
public class UriConfig | |||||
{ | |||||
public string OrderServiceUrl { get; set; } | |||||
public string StockServiceUrl { get; set; } | |||||
public string DataVServiceUrl { get; set; } | |||||
public string WebServiceUrl { get; set; } | |||||
public string BroadcastPubTopic { get; set; } | |||||
} | |||||
} | } | ||||
} | } |
@@ -46,6 +46,7 @@ namespace BPASmartClient.Business | |||||
mqttProxy.Connected = new Action(() => | mqttProxy.Connected = new Action(() => | ||||
{ | { | ||||
mqttProxy.Subscrib(TopicDefine.GetInstance().SubscribTopics.ToArray()); | mqttProxy.Subscrib(TopicDefine.GetInstance().SubscribTopics.ToArray()); | ||||
MessageLog.GetInstance.Show("MQTT 连接成功"); | |||||
}); | }); | ||||
//MQTT 连接成功 | //MQTT 连接成功 | ||||
mqttProxy.LostConnect = new Action(() => | mqttProxy.LostConnect = new Action(() => | ||||
@@ -57,10 +58,10 @@ namespace BPASmartClient.Business | |||||
{ | { | ||||
msg.Enqueue(message); | msg.Enqueue(message); | ||||
}); | }); | ||||
MessageLog.GetInstance.Show("准备连接MQTT"); | |||||
var MqttServerConfig = Plugin.GetInstance().GetPlugin<ConfigMgr>().MQTT_Config; | |||||
var MqttServerAccount = Plugin.GetInstance().GetPlugin<ConfigMgr>().Mqtt_Account; | |||||
//MQTT 初始化 | //MQTT 初始化 | ||||
mqttProxy.Connect(Plugin.GetInstance().GetPlugin<ConfigMgr>().MQTT_Config.Host, Plugin.GetInstance().GetPlugin<ConfigMgr>().MQTT_Config.Port, | |||||
Guid.NewGuid().ToString()); | |||||
mqttProxy.Connect(MqttServerAccount.UserName, MqttServerAccount.Password, MqttServerConfig.Host, MqttServerConfig.Port, Guid.NewGuid().ToString()); | |||||
ThreadManage.GetInstance().Start(() => | ThreadManage.GetInstance().Start(() => | ||||
{ | { | ||||
@@ -12,6 +12,7 @@ using System.Reflection; | |||||
using System.Text; | using System.Text; | ||||
using System.Threading; | using System.Threading; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using System.Collections.ObjectModel; | |||||
namespace BPASmartClient.Device | namespace BPASmartClient.Device | ||||
{ | { | ||||
@@ -88,7 +89,7 @@ namespace BPASmartClient.Device | |||||
/// <summary> | /// <summary> | ||||
/// 设备变量监控 | /// 设备变量监控 | ||||
/// </summary> | /// </summary> | ||||
public List<VariableMonitor> variableMonitors { get; set; } = new List<VariableMonitor>(); | |||||
public ObservableCollection<VariableMonitor> variableMonitors { get; set; } = new ObservableCollection<VariableMonitor>(); | |||||
/// <summary> | /// <summary> | ||||
/// 外设状态,硬件设备数据 | /// 外设状态,硬件设备数据 | ||||
@@ -105,6 +106,7 @@ namespace BPASmartClient.Device | |||||
public List<Alarm> alarms { get; set; } = new List<Alarm>(); | public List<Alarm> alarms { get; set; } = new List<Alarm>(); | ||||
public IAlarm InterfaceAlarm { get; set; } | public IAlarm InterfaceAlarm { get; set; } | ||||
public AlarmHelper alarmHelper { get; set; } = new AlarmHelper(); | public AlarmHelper alarmHelper { get; set; } = new AlarmHelper(); | ||||
public IStatus InterfaceStatus { get; set; } | |||||
#endregion | #endregion | ||||
@@ -205,16 +207,16 @@ namespace BPASmartClient.Device | |||||
{ | { | ||||
if (faces.Name == "IStatus") | if (faces.Name == "IStatus") | ||||
{ | { | ||||
IStatus status = item.GetValue(this) as IStatus; | |||||
GetMonitorData(status); | |||||
ThreadManage.GetInstance().StopTask($"{item.Name}:{DeviceId}", new Action(() => | |||||
{ | |||||
ThreadManage.GetInstance().StartLong(new Action(() => | |||||
{ | |||||
UpdateValue(status); | |||||
Thread.Sleep(1000); | |||||
}), $"{item.Name}:{DeviceId}"); | |||||
})); | |||||
InterfaceStatus = item.GetValue(this) as IStatus; | |||||
GetMonitorData(InterfaceStatus); | |||||
//ThreadManage.GetInstance().StopTask($"{item.Name}:{DeviceId}", new Action(() => | |||||
// { | |||||
//ThreadManage.GetInstance().StartLong(new Action(() => | |||||
//{ | |||||
// UpdateValue(InterfaceStatus); | |||||
// Thread.Sleep(1000); | |||||
//}), $"GvlStatusMonitor:{DeviceId}"); | |||||
//})); | |||||
} | } | ||||
else if (faces.Name == "IAlarm") | else if (faces.Name == "IAlarm") | ||||
{ | { | ||||
@@ -289,8 +291,11 @@ namespace BPASmartClient.Device | |||||
{ | { | ||||
ThreadManage.GetInstance().StopTask($"ReadData:{DeviceId}", new Action(() => | ThreadManage.GetInstance().StopTask($"ReadData:{DeviceId}", new Action(() => | ||||
{ | { | ||||
ResetProgram(); | |||||
InitTask(); | |||||
ThreadManage.GetInstance().StopTask($"GvlStatusMonitor:{DeviceId}", new Action(() => | |||||
{ | |||||
ResetProgram(); | |||||
InitTask(); | |||||
})); | |||||
})); | })); | ||||
})); | })); | ||||
} | } | ||||
@@ -317,6 +322,13 @@ namespace BPASmartClient.Device | |||||
}), $"MainTask:{DeviceId}"); | }), $"MainTask:{DeviceId}"); | ||||
#endregion | #endregion | ||||
#region 设备状态监控 | |||||
ThreadManage.GetInstance().StartLong(new Action(() => | |||||
{ | |||||
UpdateValue(InterfaceStatus); | |||||
Thread.Sleep(1000); | |||||
}), $"GvlStatusMonitor:{DeviceId}"); | |||||
#endregion | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -8,6 +8,7 @@ using System.Collections.Generic; | |||||
using System.Linq; | using System.Linq; | ||||
using System.Text; | using System.Text; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using System.Collections.ObjectModel; | |||||
namespace BPASmartClient.Device | namespace BPASmartClient.Device | ||||
{ | { | ||||
@@ -54,7 +55,7 @@ namespace BPASmartClient.Device | |||||
/// <summary> | /// <summary> | ||||
/// 设备变量信息 | /// 设备变量信息 | ||||
/// </summary> | /// </summary> | ||||
List<VariableMonitor> variableMonitors { get; set; } | |||||
ObservableCollection<VariableMonitor> variableMonitors { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 设备报警信息集合 | /// 设备报警信息集合 | ||||
@@ -66,6 +67,11 @@ namespace BPASmartClient.Device | |||||
/// </summary> | /// </summary> | ||||
IAlarm InterfaceAlarm { get; set; } | IAlarm InterfaceAlarm { get; set; } | ||||
/// <summary> | |||||
/// 接口设备状态 | |||||
/// </summary> | |||||
IStatus InterfaceStatus { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 报警实体 | /// 报警实体 | ||||
/// </summary> | /// </summary> | ||||
@@ -3,46 +3,49 @@ using System.Collections.Generic; | |||||
using System.Linq; | using System.Linq; | ||||
using System.Text; | using System.Text; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using Microsoft.Toolkit.Mvvm.ComponentModel; | |||||
namespace BPASmartClient.Device | namespace BPASmartClient.Device | ||||
{ | { | ||||
public class VariableMonitor | |||||
public class VariableMonitor : ObservableObject | |||||
{ | { | ||||
public int Id { get { return _mId; } set { _mId = value; } } | |||||
public int Id { get { return _mId; } set { _mId = value; OnPropertyChanged(); } } | |||||
private int _mId; | private int _mId; | ||||
public string VarName { get { return _mVarName; } set { _mVarName = value; } } | |||||
public string VarName { get { return _mVarName; } set { _mVarName = value; OnPropertyChanged(); } } | |||||
private string _mVarName; | private string _mVarName; | ||||
public string PLCAddress { get { return _mPLCAddress; } set { _mPLCAddress = value; } } | |||||
public string PLCAddress { get { return _mPLCAddress; } set { _mPLCAddress = value; OnPropertyChanged(); } } | |||||
private string _mPLCAddress; | private string _mPLCAddress; | ||||
public string Notes { get { return _mNotes; } set { _mNotes = value; } } | |||||
public string Notes { get { return _mNotes; } set { _mNotes = value; OnPropertyChanged(); } } | |||||
private string _mNotes; | private string _mNotes; | ||||
public string ModbusTcpAddress { get { return _mModbusTcpAddress; } set { _mModbusTcpAddress = value; } } | |||||
public string ModbusTcpAddress { get { return _mModbusTcpAddress; } set { _mModbusTcpAddress = value; OnPropertyChanged(); } } | |||||
private string _mModbusTcpAddress; | private string _mModbusTcpAddress; | ||||
public string CurrentValue | |||||
{ | |||||
get { return _mCurrentValue; } | |||||
set | |||||
{ | |||||
public string CurrentValue | |||||
{ | |||||
get { return _mCurrentValue; } | |||||
set | |||||
{ | |||||
_mCurrentValue = value; | _mCurrentValue = value; | ||||
OnPropertyChanged(); | |||||
if (_mCurrentValue == "False" || _mCurrentValue == "True") | if (_mCurrentValue == "False" || _mCurrentValue == "True") | ||||
{ | { | ||||
if (_mCurrentValue == "True") | if (_mCurrentValue == "True") | ||||
StatusColor = new { r = 51, g = 232, b = 34, a = 1 }; | StatusColor = new { r = 51, g = 232, b = 34, a = 1 }; | ||||
else | else | ||||
StatusColor = new { r = 255, g = 0, b = 0, a = 1 }; | StatusColor = new { r = 255, g = 0, b = 0, a = 1 }; | ||||
}else | |||||
} | |||||
else | |||||
StatusColor = new { r = 51, g = 232, b = 34, a = 1 }; | StatusColor = new { r = 51, g = 232, b = 34, a = 1 }; | ||||
} | |||||
} | |||||
} | } | ||||
private string _mCurrentValue; | private string _mCurrentValue; | ||||
@@ -11,24 +11,12 @@ namespace BPASmartClient.Helper | |||||
/// </summary> | /// </summary> | ||||
public class Json<T> where T : class, new() | public class Json<T> where T : class, new() | ||||
{ | { | ||||
//private static string DeviceType = ActionManage.GetInstance.SendResult("GetDeviceType").ToString(); | |||||
//static string path | |||||
//{ | |||||
// get | |||||
// { | |||||
// Directory.CreateDirectory(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"AccessFile\\{DeviceType}\\JSON")); | |||||
// return $"{AppDomain.CurrentDomain.BaseDirectory}AccessFile\\{DeviceType}\\JSON\\{typeof(T).Name}.json"; | |||||
// } | |||||
//} | |||||
static string path | static string path | ||||
{ | { | ||||
get | get | ||||
{ | { | ||||
Directory.CreateDirectory(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"JSON")); | |||||
return $"{AppDomain.CurrentDomain.BaseDirectory}JSON\\{typeof(T).Name}.json"; | |||||
Directory.CreateDirectory(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"AccessFile\\JSON")); | |||||
return $"{AppDomain.CurrentDomain.BaseDirectory}AccessFile\\JSON\\{typeof(T).Name}.json"; | |||||
} | } | ||||
} | } | ||||
@@ -43,8 +31,6 @@ namespace BPASmartClient.Helper | |||||
File.WriteAllText(path, outjson); | File.WriteAllText(path, outjson); | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 获取保存的数据 | /// 获取保存的数据 | ||||
/// </summary> | /// </summary> | ||||
@@ -34,13 +34,15 @@ namespace BPASmartClient.IoT | |||||
/// </summary> | /// </summary> | ||||
public DataVClient() | public DataVClient() | ||||
{ | { | ||||
DataVApiAddress = System.Configuration.ConfigurationManager.AppSettings["DataVServiceUri"].ToString(); | |||||
DataVApiAddress = InternetInfo.DataVApiAddress; | |||||
//DataVApiAddress = System.Configuration.ConfigurationManager.AppSettings["DataVServiceUri"].ToString(); | |||||
ClientId = System.Configuration.ConfigurationManager.AppSettings["ClientId"].ToString(); | ClientId = System.Configuration.ConfigurationManager.AppSettings["ClientId"].ToString(); | ||||
DeviceName = System.Configuration.ConfigurationManager.AppSettings["DeviceName"].ToString(); | DeviceName = System.Configuration.ConfigurationManager.AppSettings["DeviceName"].ToString(); | ||||
ProductKey = System.Configuration.ConfigurationManager.AppSettings["ProductKey"].ToString(); | ProductKey = System.Configuration.ConfigurationManager.AppSettings["ProductKey"].ToString(); | ||||
DeviceSecret = System.Configuration.ConfigurationManager.AppSettings["DeviceSecret"].ToString(); | DeviceSecret = System.Configuration.ConfigurationManager.AppSettings["DeviceSecret"].ToString(); | ||||
StartupMode = System.Configuration.ConfigurationManager.AppSettings["StartupMode"].ToString(); | StartupMode = System.Configuration.ConfigurationManager.AppSettings["StartupMode"].ToString(); | ||||
BroadcastPubTopic = System.Configuration.ConfigurationManager.AppSettings["BroadcastPubTopic"].ToString(); | |||||
BroadcastPubTopic = InternetInfo.BroadcastPubTopic; | |||||
//BroadcastPubTopic = System.Configuration.ConfigurationManager.AppSettings["BroadcastPubTopic"].ToString(); | |||||
} | } | ||||
#endregion | #endregion | ||||
@@ -178,7 +180,7 @@ namespace BPASmartClient.IoT | |||||
{ | { | ||||
if (DeviceDataV != null && DeviceDataV.GetIsConnected() && DeviceDataV.deviceTable != null) | if (DeviceDataV != null && DeviceDataV.GetIsConnected() && DeviceDataV.deviceTable != null) | ||||
{ | { | ||||
iOTDevSXModel.Device1=String.Empty;iOTDevSXModel.Device2=String.Empty;iOTDevSXModel.Device3 = String.Empty; | |||||
iOTDevSXModel.Device1 = String.Empty; iOTDevSXModel.Device2 = String.Empty; iOTDevSXModel.Device3 = String.Empty; | |||||
List<object> dataVNode = new List<object>(); | List<object> dataVNode = new List<object>(); | ||||
Plugin.GetInstance()?.GetPlugin<DeviceMgr>()?.GetDevices()?.ForEach(device => | Plugin.GetInstance()?.GetPlugin<DeviceMgr>()?.GetDevices()?.ForEach(device => | ||||
{ | { | ||||
@@ -299,7 +301,7 @@ namespace BPASmartClient.IoT | |||||
string FileName = result.data?.fileName; | string FileName = result.data?.fileName; | ||||
string uploadId = result.data?.uploadId; | string uploadId = result.data?.uploadId; | ||||
FileUpload.FileSend(DeviceDataV, uploadId, result.data.offset); | FileUpload.FileSend(DeviceDataV, uploadId, result.data.offset); | ||||
MessageLog.GetInstance.Show($"[阿里云上传]:请求上传云回执成功."); | |||||
//MessageLog.GetInstance.Show($"[阿里云上传]:请求上传云回执成功."); | |||||
} | } | ||||
else | else | ||||
MessageLog.GetInstance.Show($"[阿里云上传]:请求上传云回执失败.原因:{result.message}"); | MessageLog.GetInstance.Show($"[阿里云上传]:请求上传云回执失败.原因:{result.message}"); | ||||
@@ -314,7 +316,7 @@ namespace BPASmartClient.IoT | |||||
{ | { | ||||
FileUploadModelResult result = Tools.JsonToObjectTools<FileUploadModelResult>(message); | FileUploadModelResult result = Tools.JsonToObjectTools<FileUploadModelResult>(message); | ||||
} | } | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -84,7 +84,7 @@ namespace BPASmartClient.IoT.Model | |||||
//fileUpload.@params.extraParams.fileTag = new Dictionary<string, string> { {"Time", DateTime.Now.ToString("yyyy_M_d") },{"Name", "HBL.LogDir" } }; | //fileUpload.@params.extraParams.fileTag = new Dictionary<string, string> { {"Time", DateTime.Now.ToString("yyyy_M_d") },{"Name", "HBL.LogDir" } }; | ||||
dataV.IOT_Publish(dataV.FileUpLoadTopic, Tools.JsonConvertTools(fileUpload)); | dataV.IOT_Publish(dataV.FileUpLoadTopic, Tools.JsonConvertTools(fileUpload)); | ||||
MessageLog.GetInstance.Show($"[阿里云上传]:第[{i+1}]包数据,请求上传."); | |||||
//MessageLog.GetInstance.Show($"[阿里云上传]:第[{i+1}]包数据,请求上传."); | |||||
int count = 0; | int count = 0; | ||||
while (modelResult == null)//等待上传完成 | while (modelResult == null)//等待上传完成 | ||||
@@ -100,8 +100,13 @@ namespace BPASmartClient.IoT.Model | |||||
; | ; | ||||
if(modelResult.code==200) | |||||
MessageLog.GetInstance.Show($"[阿里云上传]:第[{i + 1}]包,上传成功."); | |||||
if (modelResult.code == 200) | |||||
{ | |||||
if (modelResult.data.complete) | |||||
{ | |||||
MessageLog.GetInstance.Show($"[阿里云上传]:文件上传完成,总长度[{modelResult.data.bSize}]字节."); | |||||
} | |||||
} | |||||
else | else | ||||
MessageLog.GetInstance.Show($"[阿里云上传]:第[{i + 1}]包,上传失败.原因:{modelResult.message}"); | MessageLog.GetInstance.Show($"[阿里云上传]:第[{i + 1}]包,上传失败.原因:{modelResult.message}"); | ||||
; | ; | ||||
@@ -12,16 +12,8 @@ namespace BPASmartClient.PLC | |||||
public class PLCMachine : BasePeripheral | public class PLCMachine : BasePeripheral | ||||
{ | { | ||||
ModbusTcp modbusTcp = new ModbusTcp(); | ModbusTcp modbusTcp = new ModbusTcp(); | ||||
//public string IpAddress { get; set; } | |||||
//public int Port { get; set; } | |||||
//public string PLCReadAddress { get; set; } | |||||
//private List<PLCReadParameter> plcReadParameters; | |||||
public override void Init() | public override void Init() | ||||
{ | { | ||||
//plcReadParameters = PLCReadParameter.DeSerialize(PLCReadAddress); | |||||
Task.Run(new Action(() => { modbusTcp.ModbusTcpConnect(communicationPar.IPAddress, communicationPar.IPPort); })); //PLC 设备连接 | Task.Run(new Action(() => { modbusTcp.ModbusTcpConnect(communicationPar.IPAddress, communicationPar.IPPort); })); //PLC 设备连接 | ||||
ThreadManage.GetInstance().StartLong(new Action(() => | ThreadManage.GetInstance().StartLong(new Action(() => | ||||
@@ -45,61 +37,12 @@ namespace BPASmartClient.PLC | |||||
status.TryAdd(par.Address, res); | status.TryAdd(par.Address, res); | ||||
} | } | ||||
} | } | ||||
//ushort address = (ushort)modbusTcp.GetAddress(par?.Address); | |||||
//object readData = new object(); | |||||
//switch (par.CmdType) | |||||
//{ | |||||
// case CommandType.Coils: | |||||
// modbusTcp.Readbool(address, par.Length, new Action<bool[]>((s) => { readData = s; })); | |||||
// break; | |||||
// case CommandType.HoldingRegisters: | |||||
// readData = modbusTcp.Read(address, CommandType.HoldingRegisters, par.Length); | |||||
// break; | |||||
//} | |||||
//status[par.Address] = readData; | |||||
} | } | ||||
//foreach (var par in plcReadParameters) | |||||
//{ | |||||
// ushort address = (ushort)modbusTcp.GetAddress(par?.Address); | |||||
// object readData = new object(); | |||||
// switch (par.CmdType) | |||||
// { | |||||
// case CommandType.Coils: | |||||
// modbusTcp.Readbool(address, par.Length, new Action<bool[]>((s) => { readData = s; })); | |||||
// break; | |||||
// case CommandType.HoldingRegisters: | |||||
// readData = modbusTcp.Read(address, CommandType.HoldingRegisters, par.Length); | |||||
// break; | |||||
// } | |||||
// status[par.Address] = readData; | |||||
//} | |||||
Thread.Sleep(500); | Thread.Sleep(500); | ||||
} | } | ||||
Thread.Sleep(1000); | Thread.Sleep(1000); | ||||
}), $"设备[{DeviceId}]PLC读取线程", true); | }), $"设备[{DeviceId}]PLC读取线程", true); | ||||
//读取数据 | |||||
// EventBus.EventBus.GetInstance().Subscribe<ReadModel>(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) | |||||
//{ | |||||
// if (@event == null) return; | |||||
// var par = @event as ReadModel; | |||||
// ushort address = (ushort)modbusTcp.GetAddress(par?.Address); | |||||
// object readData = new object(); | |||||
// if (par.Address.ToUpper().Contains("M")) | |||||
// { | |||||
// modbusTcp.Readbool(address, par.Length, new Action<bool[]>((s) => { readData = s; })); | |||||
// } | |||||
// else if (par.Address.ToUpper().Contains("VW")) | |||||
// { | |||||
// readData = modbusTcp.Read(address, CommandType.HoldingRegisters, par.Length); | |||||
// } | |||||
// callBack?.Invoke(readData); | |||||
//}); | |||||
//写入数据 | //写入数据 | ||||
EventBus.EventBus.GetInstance().Subscribe<WriteModel>(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) | EventBus.EventBus.GetInstance().Subscribe<WriteModel>(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) | ||||
{ | { | ||||
@@ -107,15 +50,6 @@ namespace BPASmartClient.PLC | |||||
var par = @event as WriteModel; | var par = @event as WriteModel; | ||||
modbusTcp.Write(par?.Address, par?.Value); | modbusTcp.Write(par?.Address, par?.Value); | ||||
//ushort address = (ushort)modbusTcp.GetAddress(par?.Address); | |||||
//if (par.Address.ToUpper().Contains("M")) | |||||
//{ | |||||
// modbusTcp.Write(address, CommandType.Coils, par.Value); | |||||
//} | |||||
//else if (par.Address.ToUpper().Contains("VW")) | |||||
//{ | |||||
// modbusTcp.Write(address, CommandType.HoldingRegisters, par.Value); | |||||
//} | |||||
}); | }); | ||||
} | } | ||||
@@ -22,15 +22,17 @@ namespace BPASmartClient.MQTT | |||||
private IMqttClient client; | private IMqttClient client; | ||||
public void Connect(string ip, int port, string clientId) | |||||
public void Connect(string userName, string Password, string ip, int port, string clientId) | |||||
{ | { | ||||
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); | IConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); | ||||
configurationBuilder.AddMqttClientHostedService(p => | configurationBuilder.AddMqttClientHostedService(p => | ||||
{ | { | ||||
p.Server = ip; | p.Server = ip; | ||||
p.Port = port; | p.Port = port; | ||||
p.UserName = "rafiul"; | |||||
p.Password = "12345678"; | |||||
//p.UserName = "rafiul"; | |||||
//p.Password = "12345678"; | |||||
p.UserName = userName; | |||||
p.Password = Password; | |||||
p.mqttClientConnectedHandlerDelegate = new MQTTnet.Client.Connecting.MqttClientConnectedHandlerDelegate(e => | p.mqttClientConnectedHandlerDelegate = new MQTTnet.Client.Connecting.MqttClientConnectedHandlerDelegate(e => | ||||
{ | { | ||||
IsConnected = true; | IsConnected = true; | ||||
@@ -22,11 +22,5 @@ namespace BPASmartClient.Model | |||||
/// </summary> | /// </summary> | ||||
public ObservableCollection<OrderData> orderLists { get; set; } = new ObservableCollection<OrderData>(); | public ObservableCollection<OrderData> orderLists { get; set; } = new ObservableCollection<OrderData>(); | ||||
/// <summary> | |||||
/// 参数设置 | |||||
/// </summary> | |||||
public ObservableCollection<ParSet> parSets { get; set; } = new ObservableCollection<ParSet>(); | |||||
} | } | ||||
} | } |
@@ -1,29 +1,29 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
//using System; | |||||
//using System.Collections.Generic; | |||||
//using System.Linq; | |||||
//using System.Text; | |||||
//using System.Threading.Tasks; | |||||
namespace BPASmartClient.Model | |||||
{ | |||||
public class ParSet | |||||
{ | |||||
public ushort Minute { get { return _mMinute; } set { _mMinute = value; } } | |||||
private ushort _mMinute; | |||||
//namespace BPASmartClient.Model | |||||
//{ | |||||
// public class ParSet | |||||
// { | |||||
// public ushort Minute { get { return _mMinute; } set { _mMinute = value; } } | |||||
// private ushort _mMinute; | |||||
public ushort Second { get { return _mSecond; } set { _mSecond = value; } } | |||||
private ushort _mSecond; | |||||
// public ushort Second { get { return _mSecond; } set { _mSecond = value; } } | |||||
// private ushort _mSecond; | |||||
public bool IsShield { get { return _mIsShield; } set { _mIsShield = value; } } | |||||
private bool _mIsShield; | |||||
// public bool IsShield { get { return _mIsShield; } set { _mIsShield = value; } } | |||||
// private bool _mIsShield; | |||||
public string TextBlockContext { get { return _mTextBlockContext; } set { _mTextBlockContext = value; } } | |||||
private string _mTextBlockContext; | |||||
// public string TextBlockContext { get { return _mTextBlockContext; } set { _mTextBlockContext = value; } } | |||||
// private string _mTextBlockContext; | |||||
public string CheckBoxContext { get { return _mCheckBoxContext; } set { _mCheckBoxContext = value; } } | |||||
private string _mCheckBoxContext; | |||||
// public string CheckBoxContext { get { return _mCheckBoxContext; } set { _mCheckBoxContext = value; } } | |||||
// private string _mCheckBoxContext; | |||||
} | |||||
} | |||||
// } | |||||
//} |
@@ -14,6 +14,7 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<ProjectReference Include="..\BPASmartClient.Business\BPASmartClient.Business.csproj" /> | |||||
<ProjectReference Include="..\BPASmartClient.CustomResource\BPASmartClient.CustomResource.csproj" /> | <ProjectReference Include="..\BPASmartClient.CustomResource\BPASmartClient.CustomResource.csproj" /> | ||||
<ProjectReference Include="..\BPASmartClient.Device\BPASmartClient.Device.csproj" /> | <ProjectReference Include="..\BPASmartClient.Device\BPASmartClient.Device.csproj" /> | ||||
<ProjectReference Include="..\BPASmartClient.EventBus\BPASmartClient.EventBus.csproj" /> | <ProjectReference Include="..\BPASmartClient.EventBus\BPASmartClient.EventBus.csproj" /> | ||||
@@ -14,6 +14,9 @@ using System.Linq; | |||||
using BPASmartClient.Model.PLC; | using BPASmartClient.Model.PLC; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using System.Reflection; | using System.Reflection; | ||||
using BPASmartClient.MorkS.Model; | |||||
using System.Collections.ObjectModel; | |||||
using BPASmartClient.MorkS.ViewModel; | |||||
namespace BPASmartClient.MorkS | namespace BPASmartClient.MorkS | ||||
{ | { | ||||
@@ -25,8 +28,36 @@ namespace BPASmartClient.MorkS | |||||
public override void DoMain() | public override void DoMain() | ||||
{ | { | ||||
MonitorViewModel.DeviceId = DeviceId; | |||||
ServerInit(); | ServerInit(); | ||||
DataParse(); | DataParse(); | ||||
Json<MorksPar>.Read(); | |||||
if (Json<MorksPar>.Data.parSets == null) Json<MorksPar>.Data.parSets = new ObservableCollection<ParSet>(); | |||||
if (Json<MorksPar>.Data.parSets.Count < 6) | |||||
{ | |||||
Json<MorksPar>.Data.parSets.Clear(); | |||||
for (int i = 0; i < 6; i++) | |||||
{ | |||||
Json<MorksPar>.Data.parSets.Add(new ParSet() | |||||
{ | |||||
CheckBoxContext = $"煮面口{i + 1}屏蔽", | |||||
Minute = 1, | |||||
Second = 0, | |||||
IsShield = false, | |||||
TextBlockContext = $"煮面口{i + 1}时间设定" | |||||
}); | |||||
} | |||||
} | |||||
ActionManage.GetInstance.Register(new Action<object>((o) => | |||||
{ | |||||
if (o != null && o is WritePar writePar) WriteData(writePar.Address, writePar.Value); | |||||
}), "WriteVW"); | |||||
ActionManage.GetInstance.Register(new Action<object>((o) => | |||||
{ | |||||
if (o != null && o is WritePar writePar) WriteData(writePar.Address, writePar.Value); | |||||
}), "WriteBools"); | |||||
ActionManage.GetInstance.Register(new Action(() => { DeviceInit(); }), "InitDevice"); | ActionManage.GetInstance.Register(new Action(() => { DeviceInit(); }), "InitDevice"); | ||||
} | } | ||||
@@ -189,14 +220,6 @@ namespace BPASmartClient.MorkS | |||||
if (obj is ushort[] UshortValue && UshortValue.Length > 0 && UshortValue.Length <= 1) | if (obj is ushort[] UshortValue && UshortValue.Length > 0 && UshortValue.Length <= 1) | ||||
mORKS.TurntableFeedbackloc = UshortValue[0]; | mORKS.TurntableFeedbackloc = UshortValue[0]; | ||||
})); | })); | ||||
//EventBus.EventBus.GetInstance().Publish(new ReadModel() { DeviceId = DeviceId, Address = "VW372", Length = 1 }, (o) => | |||||
//{ | |||||
// if (o != null && o.Length > 0 && o[0] is ushort value) | |||||
// { | |||||
// mORKS.TurntableFeedbackloc = value; | |||||
// } | |||||
//}); | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -455,11 +478,10 @@ namespace BPASmartClient.MorkS | |||||
OrderChange(orderLocInfo.SuborderId, ORDER_STATUS.COOKING); | OrderChange(orderLocInfo.SuborderId, ORDER_STATUS.COOKING); | ||||
DeviceProcessLogShow($"订单【{orderLocInfo.SuborderId}】,机器人倒面至【{loc + 1}】号煮面栏"); | DeviceProcessLogShow($"订单【{orderLocInfo.SuborderId}】,机器人倒面至【{loc + 1}】号煮面栏"); | ||||
//写入煮面时间 | //写入煮面时间 | ||||
//List<ushort> values = new List<ushort>(); | |||||
//values.Add(Json<KeepDataBase>.Data.parSets.ElementAt(loc).Minute); | |||||
//values.Add(Json<KeepDataBase>.Data.parSets.ElementAt(loc).Second); | |||||
//ModbusTcpHelper.GetInstance.Write((ushort)ModbusTcpHelper.GetInstance.GetWordAddress($"VW{116 + (loc * 6)}"), WriteType.HoldingRegisters, values.ToArray()); | |||||
List<ushort> values = new List<ushort>(); | |||||
values.Add(Json<MorksPar>.Data.parSets.ElementAt(loc).Minute); | |||||
values.Add(Json<MorksPar>.Data.parSets.ElementAt(loc).Second); | |||||
WriteData($"VW{116 + (loc * 6)}", values.ToArray()); | |||||
mORKS.TakeNoodleInterlock = true; | mORKS.TakeNoodleInterlock = true; | ||||
} | } | ||||
} | } | ||||
@@ -0,0 +1,15 @@ | |||||
using BPASmartClient.Model; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Collections.ObjectModel; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmartClient.MorkS.Model | |||||
{ | |||||
internal class MorksPar | |||||
{ | |||||
public ObservableCollection<ParSet> parSets { get; set; } = new ObservableCollection<ParSet>(); | |||||
} | |||||
} |
@@ -0,0 +1,29 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmartClient.Model | |||||
{ | |||||
public class ParSet | |||||
{ | |||||
public ushort Minute { get { return _mMinute; } set { _mMinute = value; } } | |||||
private ushort _mMinute; | |||||
public ushort Second { get { return _mSecond; } set { _mSecond = value; } } | |||||
private ushort _mSecond; | |||||
public bool IsShield { get { return _mIsShield; } set { _mIsShield = value; } } | |||||
private bool _mIsShield; | |||||
public string TextBlockContext { get { return _mTextBlockContext; } set { _mTextBlockContext = value; } } | |||||
private string _mTextBlockContext; | |||||
public string CheckBoxContext { get { return _mCheckBoxContext; } set { _mCheckBoxContext = value; } } | |||||
private string _mCheckBoxContext; | |||||
} | |||||
} |
@@ -0,0 +1,14 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmartClient.MorkS.Model | |||||
{ | |||||
public class WritePar | |||||
{ | |||||
public string Address { get; set; } | |||||
public object Value { get; set; } | |||||
} | |||||
} |
@@ -15,11 +15,228 @@ | |||||
<vm:MonitorViewModel /> | <vm:MonitorViewModel /> | ||||
</UserControl.DataContext> | </UserControl.DataContext> | ||||
<Grid> | |||||
<Label | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
Content="监控画面" | |||||
FontSize="40" /> | |||||
<UserControl.Resources> | |||||
<ResourceDictionary> | |||||
<ResourceDictionary.MergedDictionaries> | |||||
<ResourceDictionary> | |||||
<!--<convert:TextDisplayConvert x:Key="textDisplayConvert" /> | |||||
<convert:IsEnableConvert x:Key="isEnableConvert" /> | |||||
<convert:AnalogAlarmConvert x:Key="analogAlarmConvert" /> | |||||
<convert:DiscreteAlarmConvert x:Key="discreteAlarmConvert" /> | |||||
<convert:AlarmTypeTextConvert x:Key="alarmTypeTextConvert" />--> | |||||
<SolidColorBrush x:Key="BorderSolid" Color="#5523CACA" /> | |||||
<SolidColorBrush x:Key="FontColor" Color="#FF2AB2E7" /> | |||||
<SolidColorBrush x:Key="TitleFontColor" Color="#ddd" /> | |||||
<SolidColorBrush x:Key="CursorColor" Color="Aqua" /> | |||||
<SolidColorBrush x:Key="TitleBorderColor" Color="#FF2AB2E7" /> | |||||
<Style x:Key="TextBlockStyle" TargetType="TextBlock"> | |||||
<Setter Property="FontFamily" Value="楷体" /> | |||||
<Setter Property="FontSize" Value="18" /> | |||||
<Setter Property="Foreground" Value="{StaticResource TextBlockForeground}" /> | |||||
<Setter Property="VerticalAlignment" Value="Center" /> | |||||
<Setter Property="HorizontalAlignment" Value="Center" /> | |||||
</Style> | |||||
<Style x:Key="TextBoxStyle" TargetType="TextBox"> | |||||
<Setter Property="FontFamily" Value="楷体" /> | |||||
<Setter Property="FontSize" Value="22" /> | |||||
<Setter Property="Background" Value="Transparent" /> | |||||
<Setter Property="Foreground" Value="{StaticResource TextBlockForeground}" /> | |||||
<Setter Property="BorderBrush" Value="#FF23CACA" /> | |||||
<Setter Property="CaretBrush" Value="Aqua" /> | |||||
<Setter Property="VerticalAlignment" Value="Center" /> | |||||
</Style> | |||||
</ResourceDictionary> | |||||
</ResourceDictionary.MergedDictionaries> | |||||
</ResourceDictionary> | |||||
</UserControl.Resources> | |||||
<Grid Margin="10"> | |||||
<Grid.RowDefinitions> | |||||
<RowDefinition Height="30" /> | |||||
<RowDefinition /> | |||||
</Grid.RowDefinitions> | |||||
<!--#region 表格标题栏设置--> | |||||
<Grid Background="#dd2AB2E7"> | |||||
<Grid.ColumnDefinitions> | |||||
<ColumnDefinition Width="0.3*" /> | |||||
<ColumnDefinition /> | |||||
<ColumnDefinition /> | |||||
<ColumnDefinition /> | |||||
<ColumnDefinition Width="0.7*" /> | |||||
<ColumnDefinition Width="0.7*" /> | |||||
</Grid.ColumnDefinitions> | |||||
<TextBlock | |||||
Grid.Column="0" | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
FontSize="16" | |||||
Foreground="{StaticResource TitleFontColor}" | |||||
Text="ID" /> | |||||
<Grid Grid.Column="1"> | |||||
<TextBlock | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
FontSize="16" | |||||
Foreground="{StaticResource TitleFontColor}" | |||||
Text="变量名" /> | |||||
<Border | |||||
BorderBrush="{StaticResource TitleBorderColor}" | |||||
BorderThickness="1,0,1,0" | |||||
Cursor="SizeWE" /> | |||||
</Grid> | |||||
<TextBlock | |||||
Grid.Column="2" | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
FontSize="16" | |||||
Foreground="{StaticResource TitleFontColor}" | |||||
Text="PLC 地址" /> | |||||
<Grid Grid.Column="3"> | |||||
<TextBlock | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
FontSize="16" | |||||
Foreground="{StaticResource TitleFontColor}" | |||||
Text="注释" /> | |||||
<Border | |||||
BorderBrush="{StaticResource TitleBorderColor}" | |||||
BorderThickness="1,0,0,0" | |||||
Cursor="SizeWE" /> | |||||
</Grid> | |||||
<Grid Grid.Column="4"> | |||||
<TextBlock | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
FontSize="16" | |||||
Foreground="{StaticResource TitleFontColor}" | |||||
Text="Modbus TCP 地址" /> | |||||
<Border | |||||
BorderBrush="{StaticResource TitleBorderColor}" | |||||
BorderThickness="1,0,1,0" | |||||
Cursor="SizeWE" /> | |||||
</Grid> | |||||
<TextBlock | |||||
Grid.Column="5" | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
FontSize="16" | |||||
Foreground="{StaticResource TitleFontColor}" | |||||
Text="当前值" /> | |||||
</Grid> | |||||
<!--#endregion--> | |||||
<!--#region 表格数据显示--> | |||||
<ScrollViewer | |||||
Grid.Row="1" | |||||
HorizontalScrollBarVisibility="Hidden" | |||||
VerticalScrollBarVisibility="Hidden"> | |||||
<ItemsControl ItemsSource="{Binding variableMonitors}"> | |||||
<ItemsControl.ItemTemplate> | |||||
<DataTemplate> | |||||
<Grid x:Name="gr" Height="30"> | |||||
<Grid.ColumnDefinitions> | |||||
<ColumnDefinition Width="0.3*" /> | |||||
<ColumnDefinition /> | |||||
<ColumnDefinition /> | |||||
<ColumnDefinition /> | |||||
<ColumnDefinition Width="0.7*" /> | |||||
<ColumnDefinition Width="0.7*" /> | |||||
</Grid.ColumnDefinitions> | |||||
<TextBlock | |||||
Grid.Column="0" | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
Background="Transparent" | |||||
FontSize="14" | |||||
Foreground="{StaticResource FontColor}" | |||||
Text="{Binding Id}" /> | |||||
<Grid Grid.Column="1"> | |||||
<TextBlock | |||||
Margin="5,0,0,0" | |||||
VerticalAlignment="Center" | |||||
Background="Transparent" | |||||
FontSize="14" | |||||
Foreground="{StaticResource FontColor}" | |||||
Text="{Binding VarName}" /> | |||||
<Border BorderBrush="{StaticResource BorderSolid}" BorderThickness="1,0,1,0" /> | |||||
</Grid> | |||||
<TextBlock | |||||
Grid.Column="2" | |||||
Margin="5,0,0,0" | |||||
VerticalAlignment="Center" | |||||
Background="Transparent" | |||||
FontSize="14" | |||||
Foreground="{StaticResource FontColor}" | |||||
Text="{Binding PLCAddress}" /> | |||||
<Grid Grid.Column="3"> | |||||
<TextBlock | |||||
Margin="5,0,0,0" | |||||
VerticalAlignment="Center" | |||||
Background="Transparent" | |||||
FontSize="14" | |||||
Foreground="{StaticResource FontColor}" | |||||
Text="{Binding Notes}" /> | |||||
<Border BorderBrush="{StaticResource BorderSolid}" BorderThickness="1,0,0,0" /> | |||||
</Grid> | |||||
<Grid Grid.Column="4"> | |||||
<TextBlock | |||||
Margin="5,0,0,0" | |||||
VerticalAlignment="Center" | |||||
Background="Transparent" | |||||
FontSize="14" | |||||
Foreground="{StaticResource FontColor}" | |||||
Text="{Binding ModbusTcpAddress}" /> | |||||
<Border BorderBrush="{StaticResource BorderSolid}" BorderThickness="1,0,1,0" /> | |||||
</Grid> | |||||
<TextBlock | |||||
Grid.Column="5" | |||||
Margin="5,0,0,0" | |||||
VerticalAlignment="Center" | |||||
Background="Transparent" | |||||
FontSize="14" | |||||
Foreground="{StaticResource FontColor}" | |||||
Text="{Binding CurrentValue}" /> | |||||
<Border | |||||
Grid.ColumnSpan="8" | |||||
BorderBrush="{StaticResource BorderSolid}" | |||||
BorderThickness="1" /> | |||||
</Grid> | |||||
<DataTemplate.Triggers> | |||||
<Trigger Property="IsMouseOver" Value="true"> | |||||
<Setter TargetName="gr" Property="Background" Value="#112AB2E7" /> | |||||
</Trigger> | |||||
</DataTemplate.Triggers> | |||||
</DataTemplate> | |||||
</ItemsControl.ItemTemplate> | |||||
</ItemsControl> | |||||
</ScrollViewer> | |||||
<!--#endregion--> | |||||
</Grid> | </Grid> | ||||
</UserControl> | </UserControl> |
@@ -46,28 +46,11 @@ | |||||
<Grid Margin="10"> | <Grid Margin="10"> | ||||
<Grid.RowDefinitions> | <Grid.RowDefinitions> | ||||
<RowDefinition Height="40" /> | |||||
<RowDefinition Height="35" /> | <RowDefinition Height="35" /> | ||||
<RowDefinition Height="Auto" /> | <RowDefinition Height="Auto" /> | ||||
</Grid.RowDefinitions> | </Grid.RowDefinitions> | ||||
<CheckBox | |||||
Grid.Row="0" | |||||
Grid.Column="2" | |||||
Height="20" | |||||
Margin="10" | |||||
VerticalAlignment="Top" | |||||
Background="#FF2AB2E7" | |||||
Content="开机启动" | |||||
FontSize="14" | |||||
Foreground="#00c2f4" | |||||
IsChecked="{Binding IsSelected}" | |||||
Template="{StaticResource CbTemplate}" /> | |||||
<StackPanel | |||||
Grid.Row="1" | |||||
HorizontalAlignment="Right" | |||||
Orientation="Horizontal"> | |||||
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal"> | |||||
<TextBlock Style="{StaticResource TextBlockStyle}" Text="请点击按钮保存参数:" /> | <TextBlock Style="{StaticResource TextBlockStyle}" Text="请点击按钮保存参数:" /> | ||||
@@ -3,7 +3,10 @@ using System.Collections.Generic; | |||||
using System.Linq; | using System.Linq; | ||||
using System.Text; | using System.Text; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using BPASmartClient.Business; | |||||
using BPASmartClient.Device; | |||||
using Microsoft.Toolkit.Mvvm.ComponentModel; | using Microsoft.Toolkit.Mvvm.ComponentModel; | ||||
using System.Collections.ObjectModel; | |||||
namespace BPASmartClient.MorkS.ViewModel | namespace BPASmartClient.MorkS.ViewModel | ||||
{ | { | ||||
@@ -13,5 +16,10 @@ namespace BPASmartClient.MorkS.ViewModel | |||||
{ | { | ||||
} | } | ||||
public static int DeviceId { get; set; } | |||||
public ObservableCollection<VariableMonitor> variableMonitors { get; set; } = Plugin.GetInstance()?.GetPlugin<DeviceMgr>()?.GetDevices()?.FirstOrDefault(p => p.DeviceId == DeviceId)?.variableMonitors; | |||||
} | } | ||||
} | } |
@@ -1,8 +1,12 @@ | |||||
using System; | 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; | ||||
using BPASmartClient.Helper; | |||||
using BPASmartClient.Model; | |||||
using BPASmartClient.MorkS.Model; | |||||
using Microsoft.Toolkit.Mvvm.ComponentModel; | using Microsoft.Toolkit.Mvvm.ComponentModel; | ||||
namespace BPASmartClient.MorkS.ViewModel | namespace BPASmartClient.MorkS.ViewModel | ||||
@@ -11,7 +15,29 @@ namespace BPASmartClient.MorkS.ViewModel | |||||
{ | { | ||||
public ParSetViewModel() | public ParSetViewModel() | ||||
{ | { | ||||
SaveInfoCommand = new Action(() => | |||||
{ | |||||
List<ushort> values = new List<ushort>(); | |||||
values.Clear(); | |||||
List<bool> bools = new List<bool>(); | |||||
bools.Clear(); | |||||
for (int i = 0; i < Json<MorksPar>.Data.parSets.Count; i++) | |||||
{ | |||||
values.Clear(); | |||||
values.Add(Json<MorksPar>.Data.parSets[i].Minute); | |||||
values.Add(Json<MorksPar>.Data.parSets[i].Second); | |||||
bools.Add(Json<MorksPar>.Data.parSets[i].IsShield); | |||||
ActionManage.GetInstance.Send("WriteVW", new WritePar() { Address = $"VW{116 + (i * 6)}", Value = values.ToArray() }); | |||||
} | |||||
ActionManage.GetInstance.Send("WriteBools", new WritePar() { Address = "M260.0", Value = bools.ToArray() }); | |||||
Json<MorksPar>.Save(); | |||||
}); | |||||
} | } | ||||
public Action SaveInfoCommand { get; set; } | |||||
public ObservableCollection<ParSet> parSets { get; set; } = Json<MorksPar>.Data.parSets; | |||||
} | } | ||||
} | } |
@@ -1,4 +1,5 @@ | |||||
| | ||||
using BPASmartClient.Business; | |||||
using BPASmartClient.Helper; | using BPASmartClient.Helper; | ||||
using BPASmartClient.IoT; | using BPASmartClient.IoT; | ||||
using DataVAPI.Tool.IOT; | using DataVAPI.Tool.IOT; | ||||
@@ -22,7 +23,7 @@ namespace BPASmartClient.ViewModel | |||||
deviceTable = new ObservableCollection<DeviceTable>(); | deviceTable = new ObservableCollection<DeviceTable>(); | ||||
device = new DeviceTable(); | device = new DeviceTable(); | ||||
deviceTableSelectedItem = new DeviceTable(); | deviceTableSelectedItem = new DeviceTable(); | ||||
ApiURL = System.Configuration.ConfigurationManager.AppSettings["DataVServiceUri"].ToString(); | |||||
ApiURL = InternetInfo.DataVApiAddress; | |||||
Refresh(); | Refresh(); | ||||
} | } | ||||
#endregion | #endregion | ||||
@@ -47,8 +47,6 @@ namespace BPASmartClient.ViewModel | |||||
GetData(); | GetData(); | ||||
} | } | ||||
private void GetData() | private void GetData() | ||||
{ | { | ||||
var text = TextHelper.GetInstance.ReadTextInfo("StartShop", "DeviceConfig"); | var text = TextHelper.GetInstance.ReadTextInfo("StartShop", "DeviceConfig"); | ||||
@@ -68,6 +66,24 @@ namespace BPASmartClient.ViewModel | |||||
} | } | ||||
} | } | ||||
} | } | ||||
if (Devices.Count > 0) | |||||
{ | |||||
Devices.ElementAt(0).IsChecked = true; | |||||
DeviceMonitors.Clear(); | |||||
Assembly.Load(Devices.ElementAt(0).Namespace.Substring(0, Devices.ElementAt(0).Namespace.LastIndexOf("."))).GetTypes().ToList().ForEach((type) => | |||||
{ | |||||
if (type?.BaseType?.Name == "UserControl") | |||||
{ | |||||
var fe = type.GetConstructor(Type.EmptyTypes).Invoke(null) as FrameworkElement; | |||||
DeviceMonitors.Add(new Device() { Name = fe.Name, Namespace = type?.FullName, fe = fe }); | |||||
} | |||||
}); | |||||
if (DeviceMonitors.Count > 0) | |||||
{ | |||||
DeviceMonitors.ElementAt(0).IsChecked = true; | |||||
if (DeviceMonitors.ElementAt(0).fe != null) MainContent = DeviceMonitors.ElementAt(0).fe; | |||||
} | |||||
} | |||||
} | } | ||||
public FrameworkElement MainContent { get { return _mMainContent; } set { _mMainContent = value; OnPropertyChanged(); } } | public FrameworkElement MainContent { get { return _mMainContent; } set { _mMainContent = value; OnPropertyChanged(); } } | ||||
@@ -93,7 +109,13 @@ namespace BPASmartClient.ViewModel | |||||
public string Namespace { get { return _mNamespace; } set { _mNamespace = value; OnPropertyChanged(); } } | public string Namespace { get { return _mNamespace; } set { _mNamespace = value; OnPropertyChanged(); } } | ||||
private string _mNamespace; | private string _mNamespace; | ||||
public bool IsChecked { get { return _mIsChecked; } set { _mIsChecked = value; OnPropertyChanged(); } } | |||||
private bool _mIsChecked; | |||||
public FrameworkElement fe { get; set; } | public FrameworkElement fe { get; set; } | ||||
} | } | ||||
@@ -1,4 +1,5 @@ | |||||
using BPASmartClient.CustomResource.UserControls; | |||||
using BPASmartClient.Business; | |||||
using BPASmartClient.CustomResource.UserControls; | |||||
using BPASmartClient.CustomResource.UserControls.MessageShow; | using BPASmartClient.CustomResource.UserControls.MessageShow; | ||||
using BPASmartClient.Helper; | using BPASmartClient.Helper; | ||||
using BPASmartClient.IoT; | using BPASmartClient.IoT; | ||||
@@ -51,7 +52,7 @@ namespace BPASmartClient.ViewModel | |||||
#region 函数 | #region 函数 | ||||
public void Init() | public void Init() | ||||
{ | { | ||||
DataVApiAddress = System.Configuration.ConfigurationManager.AppSettings["DataVServiceUri"].ToString(); | |||||
DataVApiAddress = InternetInfo.DataVApiAddress; | |||||
LogDataFile = new ObservableCollection<FileModel>(); | LogDataFile = new ObservableCollection<FileModel>(); | ||||
//查询 | //查询 | ||||
@@ -17,29 +17,29 @@ namespace BPASmartClient.ViewModel | |||||
{ | { | ||||
if (SaveInfoCommand == null) | if (SaveInfoCommand == null) | ||||
{ | { | ||||
SaveInfoCommand = new Action(() => | |||||
{ | |||||
List<ushort> values = new List<ushort>(); | |||||
values.Clear(); | |||||
//SaveInfoCommand = new Action(() => | |||||
//{ | |||||
// List<ushort> values = new List<ushort>(); | |||||
// values.Clear(); | |||||
List<bool> bools = new List<bool>(); | |||||
bools.Clear(); | |||||
// List<bool> bools = new List<bool>(); | |||||
// bools.Clear(); | |||||
for (int i = 0; i < Json<KeepDataBase>.Data.parSets.Count; i++) | |||||
{ | |||||
values.Clear(); | |||||
values.Add(Json<KeepDataBase>.Data.parSets[i].Minute); | |||||
values.Add(Json<KeepDataBase>.Data.parSets[i].Second); | |||||
bools.Add(Json<KeepDataBase>.Data.parSets[i].IsShield); | |||||
//ModbusTcpHelper.GetInstance.Write((ushort)ModbusTcpHelper.GetInstance.GetWordAddress($"VW{116 + (i * 6)}"), WriteType.HoldingRegisters, values.ToArray()); | |||||
} | |||||
//ModbusTcpHelper.GetInstance.Write((ushort)ModbusTcpHelper.GetInstance.GetBoolAddress("M260.0"), WriteType.Coils, bools.ToArray()); | |||||
// for (int i = 0; i < Json<KeepDataBase>.Data.parSets.Count; i++) | |||||
// { | |||||
// values.Clear(); | |||||
// values.Add(Json<KeepDataBase>.Data.parSets[i].Minute); | |||||
// values.Add(Json<KeepDataBase>.Data.parSets[i].Second); | |||||
// bools.Add(Json<KeepDataBase>.Data.parSets[i].IsShield); | |||||
// //ModbusTcpHelper.GetInstance.Write((ushort)ModbusTcpHelper.GetInstance.GetWordAddress($"VW{116 + (i * 6)}"), WriteType.HoldingRegisters, values.ToArray()); | |||||
// } | |||||
// //ModbusTcpHelper.GetInstance.Write((ushort)ModbusTcpHelper.GetInstance.GetBoolAddress("M260.0"), WriteType.Coils, bools.ToArray()); | |||||
}); | |||||
//}); | |||||
} | } | ||||
} | } | ||||
public ObservableCollection<ParSet> parSets { get; set; } = Json<KeepDataBase>.Data.parSets; | |||||
//public ObservableCollection<ParSet> parSets { get; set; } = Json<KeepDataBase>.Data.parSets; | |||||
public Action SaveInfoCommand { get; set; } | public Action SaveInfoCommand { get; set; } | ||||
} | } | ||||
@@ -1,48 +1,21 @@ | |||||
<?xml version="1.0" encoding="utf-8" ?> | <?xml version="1.0" encoding="utf-8" ?> | ||||
<configuration> | <configuration> | ||||
<appSettings> | <appSettings> | ||||
<!--通用配置--> | |||||
<!--1:且时且多冰淇淋咖啡机,2:且时且多煮面机,3:海科煮面机测试店铺--> | |||||
<add key="ClientId" value="50"/> | |||||
<!--<add key="ApolloUri" value="http://10.2.1.21:28080"/> | |||||
<add key="OrderServiceUri" value="http://10.2.1.26:21527/order/"/> | |||||
<add key="StockServiceUri" value="http://10.2.1.26:21527/stock/"/>--> | |||||
<!--<add key="ApolloUri" value="https://bpa.black-pa.com:28080"/>--> | |||||
<!--<add key="ClientId" value="2"/>--> | |||||
<!--通用配置--> | |||||
<add key="ClientId" value="51"/> | |||||
<!--开发环境--> | <!--开发环境--> | ||||
<!--<add key="apollouri" value="http://10.2.1.21:28080"/> | |||||
<add key="orderserviceuri" value="https://bpa.black-pa.com:21527/order/"/> | |||||
<add key="stockserviceuri" value="https://bpa.black-pa.com:21527/stock/"/> | |||||
<add key="datavserviceuri" value="https://bpa.black-pa.com:21527/datav"/> | |||||
<add key="webserviceuri" value="https://bpa.black-pa.com:21527"/> | |||||
<add key="broadcastpubtopic" value="/broadcast/grgpechsl7q/transit_test_setdevice"/> | |||||
<!--<add key="apollouri" value="http://10.2.1.21:28080/"/> | |||||
<add key="AppId" value="dev1_common"/> | <add key="AppId" value="dev1_common"/> | ||||
<add key ="Namespaces" value="DEV.Config"/> | <add key ="Namespaces" value="DEV.Config"/> | ||||
<add key="IsEnableTest" value="False"/>--> | <add key="IsEnableTest" value="False"/>--> | ||||
<!--测试环境--> | |||||
<!--<add key="ApolloUri" value="http://10.2.1.21:28070"/> | |||||
<add key="OrderServiceUri" value="https://bpa.black-pa.com:21528/order/"/> | |||||
<add key="StockServiceUri" value="https://bpa.black-pa.com:21528/stock/"/> | |||||
<add key="DataVServiceUri" value="https://bpa.black-pa.com:21527/datav"/> | |||||
<add key="WebServiceUri" value="https://bpa.black-pa.com:21528/stock/"/> | |||||
<add key="BroadcastPubTopic" value="/broadcast/grgpECHSL7q/Transit_Test_SetDevice"/> | |||||
<add key="AppId" value="dev1_common"/> | |||||
<add key ="Namespaces" value="DEV.test1.Config"/>--> | |||||
<!--正式环境--> | <!--正式环境--> | ||||
<add key="ApolloUri" value="http://47.108.65.220:28080"/> | |||||
<add key="OrderServiceUri" value="https://witt.black-pa.com/order/"/> | |||||
<add key="StockServiceUri" value="https://witt.black-pa.com/stock/"/> | |||||
<add key="DataVServiceUri" value="https://witt.black-pa.com/datav"/> | |||||
<add key="WebServiceUri" value="https://witt.black-pa.com"/> | |||||
<add key="BroadcastPubTopic" value="/broadcast/grgpECHSL7q/Transit_SetDevice"/> | |||||
<add key="apollouri" value="http://47.108.65.220:28080/"/> | |||||
<add key="AppId" value="order"/> | <add key="AppId" value="order"/> | ||||
<add key ="Namespaces" value="TEST1.Config"/> | <add key ="Namespaces" value="TEST1.Config"/> | ||||
<add key="IsEnableTest" value="false"/> | |||||
<add key="IsEnableTest" value="False"/> | |||||
<!--阿里云上报启动方式:API 或者 LOCAL--> | <!--阿里云上报启动方式:API 或者 LOCAL--> | ||||
<!--API :通过客户端ID,调用接口查询“设备连接信息”--> | <!--API :通过客户端ID,调用接口查询“设备连接信息”--> | ||||
@@ -1,4 +1,5 @@ | |||||
using System; | |||||
using BPASmartClient.Business; | |||||
using System; | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Linq; | using System.Linq; | ||||
using System.Text; | using System.Text; | ||||
@@ -18,13 +19,14 @@ namespace BPASmartClient.Control | |||||
/// <summary> | /// <summary> | ||||
/// BatchingAddView.xaml 的交互逻辑 | /// BatchingAddView.xaml 的交互逻辑 | ||||
/// </summary> | /// </summary> | ||||
public partial class BatchingAddView :UserControl | |||||
public partial class BatchingAddView : UserControl | |||||
{ | { | ||||
public BatchingAddView() | public BatchingAddView() | ||||
{ | { | ||||
InitializeComponent(); | InitializeComponent(); | ||||
webView.Source=new Uri(System.Configuration.ConfigurationManager.AppSettings["WebServiceUri"].ToString()); | |||||
//webView.Source=new Uri(System.Configuration.ConfigurationManager.AppSettings["WebServiceUri"].ToString()); | |||||
webView.Source = new Uri(InternetInfo.WebServiceUri); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -81,6 +81,7 @@ | |||||
CommandParameter="{Binding Namespace}" | CommandParameter="{Binding Namespace}" | ||||
Content="{Binding Name}" | Content="{Binding Name}" | ||||
GroupName="Devices" | GroupName="Devices" | ||||
IsChecked="{Binding IsChecked}" | |||||
Style="{StaticResource RectangleRadioButtonStyle}" /> | Style="{StaticResource RectangleRadioButtonStyle}" /> | ||||
</Grid> | </Grid> | ||||
</DataTemplate> | </DataTemplate> | ||||
@@ -108,6 +109,7 @@ | |||||
Content="{Binding Name}" | Content="{Binding Name}" | ||||
FontSize="16" | FontSize="16" | ||||
GroupName="DeviceMotion" | GroupName="DeviceMotion" | ||||
IsChecked="{Binding IsChecked}" | |||||
Style="{StaticResource RectangleLeftRadioButtonStyle}" /> | Style="{StaticResource RectangleLeftRadioButtonStyle}" /> | ||||
</Grid> | </Grid> | ||||
</DataTemplate> | </DataTemplate> | ||||
@@ -48,7 +48,7 @@ namespace BPASmartClient | |||||
ActionManage.GetInstance.Register(new Action(() => | ActionManage.GetInstance.Register(new Action(() => | ||||
{ | { | ||||
myMenu.Visibility = Visibility.Visible; | myMenu.Visibility = Visibility.Visible; | ||||
MenuItem_Click(new MenuItem() { Tag = "LogView", Header = "日志监视" },null); | |||||
MenuItem_Click(new MenuItem() { Tag = "LogView", Header = "日志监视" }, null); | |||||
}), "LoginSuccess"); | }), "LoginSuccess"); | ||||
Initialize(); | Initialize(); | ||||
} | } | ||||
@@ -80,18 +80,21 @@ namespace BPASmartClient | |||||
mainConsole.Start(); | mainConsole.Start(); | ||||
}), "启动主控制台", false); | }), "启动主控制台", false); | ||||
ThreadManage.GetInstance().Start(new Action(() => | |||||
ActionManage.GetInstance.Register(new Action(() => | |||||
{ | { | ||||
try | |||||
ThreadManage.GetInstance().Start(new Action(() => | |||||
{ | { | ||||
DataVClient.GetInstance().Initialize(); | |||||
DataVClient.GetInstance().Start(); | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
MessageLog.GetInstance.ShowEx(ex.ToString()); | |||||
} | |||||
}), "启动主IoT", false); | |||||
try | |||||
{ | |||||
DataVClient.GetInstance().Initialize(); | |||||
DataVClient.GetInstance().Start(); | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
MessageLog.GetInstance.ShowEx(ex.ToString()); | |||||
} | |||||
}), "启动主IoT", false); | |||||
}), "配置初始化完成Iot启动"); | |||||
ActionManage.GetInstance.Register(new Action<object>((o) => | ActionManage.GetInstance.Register(new Action<object>((o) => | ||||
{ | { | ||||
@@ -102,14 +105,14 @@ namespace BPASmartClient | |||||
switch (iot.CommandName) | switch (iot.CommandName) | ||||
{ | { | ||||
case 0://控制类 | case 0://控制类 | ||||
if (iot.CommandValue != null && iot.CommandValue.Count>0) | |||||
if (iot.CommandValue != null && iot.CommandValue.Count > 0) | |||||
{ | { | ||||
switch (iot.CommandValue.Keys.ToList()[0]) | switch (iot.CommandValue.Keys.ToList()[0]) | ||||
{ | { | ||||
case "程序启动": | case "程序启动": | ||||
//mainConsole.Start(); | //mainConsole.Start(); | ||||
break; | break; | ||||
//mainConsole.Stop(); | |||||
//mainConsole.Stop(); | |||||
case "程序停止": | case "程序停止": | ||||
break; | break; | ||||
case "程序复位": | case "程序复位": | ||||