using LB_VisionProcesses.Communicators;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LB_VisionProcesses.MotionControl
{
[Serializable]
[Process("运动控制模块", Category = "运动控制工具", Description = "创建运动控制工具")]
public class MotionControlConfig : IProcess
{
///
/// 运动控制模块集合(Key:通讯名,Value:通讯句柄)
///
public ConcurrentDictionary dicMotionControls { get; set; }
///
/// 通讯集合(Key:通讯名,Value:通讯句柄)
///
public ConcurrentDictionary dicCommunicators { get; set; }
public MotionControlConfig(ConcurrentDictionary dicMotionControl)
{
this.dicMotionControls = dicMotionControl;
strProcessClass = "LB_VisionProcesses.Communicators.MotionControlConfig";
Params.Inputs.Add("运动控制名称", "");
//Params.Inputs.Add("X轴PLC地址", "");
//Params.Inputs.Add("X轴检测位置", "");
//Params.Inputs.Add("Y轴PLC地址", "");
//Params.Inputs.Add("Z轴PLC地址", "");
//Params.Inputs.Add("W轴PLC地址", "");
Params.Outputs.Add("收到的信息", "");
}
public override object Clone()
{
return MemberwiseClone();
}
public override void Dispose()
{
return;
}
public override void InitRunParams()
{
Result = true;
Msg = "";
if (Record != null)
{
Record.Dispose();
}
}
///
/// 加载算法
///
/// 完整路径带.json
///
public override bool Load(string fullPath)
{
try
{
if (string.IsNullOrEmpty(fullPath))
return false;
if (!fullPath.Contains(".json"))
{
Debug.WriteLine("文件路径不完整");
return false;
}
if (string.IsNullOrEmpty(fullPath) || fullPath.Trim() == "")
{
Debug.WriteLine("文件路径不完整");
return false;
}
// 获取不带文件名的目录路径
string directoryPath = Path.GetDirectoryName(fullPath);
strProcessName = Path.GetFileNameWithoutExtension(fullPath);
if (!File.Exists(fullPath))
{
Debug.WriteLine("文件不存在创建空文件");
Save(directoryPath);
return true;
}
string strJson = string.Empty;
using (StreamReader streamReader = new StreamReader(fullPath, Encoding.UTF8))
{
strJson = streamReader.ReadToEnd();
streamReader.Close();
}
Params = JsonConvert.DeserializeObject(strJson);
if (Params == null)
return false;
Params.FixDeserializedData();
return true;
}
catch { return false; }
}
public override bool Run()
{
InitRunParams();
Params.Outputs["收到消息"] = "";
string MotionControlName = Params.Inputs["运动控制名称"].ToString();
if (!dicMotionControls.ContainsKey(MotionControlName))
{
Msg = $"运动控制[{MotionControlName}]不存在";
Result = false;
return Result;
}
BaseMotionControl BaseMotionControl = dicMotionControls[MotionControlName];
if (BaseMotionControl == null)
{
Msg = $"运动控制[{MotionControlName}]未实例化";
Result = false;
return Result;
}
if (!BaseMotionControl.bConnected)
{
Msg = $"运动控制[{MotionControlName}]未连接";
Result = false;
return Result;
}
return true;
}
///
/// 保存算法
///
/// 不带.json
///
public override bool Save(string filePath = null)
{
try
{
if (string.IsNullOrEmpty(filePath) || filePath.Trim() == "")
{
Debug.WriteLine("文件路径不完整");
return false;
}
string strJson = string.Empty;
var settings = new JsonSerializerSettings
{
Formatting = Newtonsoft.Json.Formatting.Indented,
// 自定义缩进(4空格)
ContractResolver = new DefaultContractResolver
{
NamingStrategy = new CamelCaseNamingStrategy()
}
};
strJson = JsonConvert.SerializeObject(Params, settings);
Params = JsonConvert.DeserializeObject(strJson);
if (Params == null)
return false;
//判断文件夹是否存在,防呆输入为文件名称
if (!Directory.Exists(filePath))
{
try
{
Directory.CreateDirectory(filePath);
}
catch (Exception)
{ }
}
File.WriteAllText(filePath + "//" + strProcessName + ".json", strJson, Encoding.UTF8);
return true;
}
catch { return false; }
}
}
}