using System; using System.Collections.Generic; using System.Linq; using 常用工具集.Base; using OmronLib; using MES.Utility.Core; using Ursa.Controls; namespace 常用工具集.ViewModel._01PLC通信调试 { public class 欧姆龙Fins调试ViewModel : ViewModelBase { private Omron omron; public bool Enabled1 { get; set; } = true; public bool Enabled2 { get; set; } = false; public string IpAddress { get; set; } = "192.168.1.3"; public int Port { get; set; } = 9600; public List AreaList { get; set; } public List AreaTypeList { get; set; } public int WriteAreaIndex { get; set; } = 0; public int ReadAreaIndex { get; set; } = 0; public int ReadAddress { get; set; } = 1042; public int WriteAddress { get; set; } = 1042; public int ReadCount { get; set; } = 1; public string ReadResult { get; set; } = ""; public int StrLength { get; set; } = 50; public string WriteValue { get; set; } = ""; public DelegateCommand ConnectCmd { get; set; } public DelegateCommand DisconnectCmd { get; set; } public DelegateCommand ReadCmd { get; set; }//1读取 2字符串 3Float 4Short public DelegateCommand WriteCmd { get; set; }//1写入 2.Float 3Short 4字符串 public 欧姆龙Fins调试ViewModel() { AreaList = new List { "CIO_Bit","WR_Bit","HR_Bit","AR_Bit", "DM_Bit","CIO_Word","WR_Word","HR_Word","AR_Word","DM_Word" }; AreaTypeList = new List { Omron.AreaType.CIO_Bit,Omron.AreaType.WR_Bit,Omron.AreaType.HR_Bit,Omron.AreaType.AR_Bit, Omron.AreaType.DM_Bit,Omron.AreaType.CIO_Word,Omron.AreaType.WR_Word,Omron.AreaType.HR_Word,Omron.AreaType.AR_Word,Omron.AreaType.DM_Word }; ReadAreaIndex = 9; WriteAreaIndex = 9; ConnectCmd = new DelegateCommand(ConnectCmdFunc); DisconnectCmd = new DelegateCommand(DisconnectCmdFunc); ReadCmd = new DelegateCommand(ReadCmdFunc); WriteCmd = new DelegateCommand(WriteCmdFunc); } private void ConnectCmdFunc(object obj) { try { omron = new Omron(); omron.IPAddr = System.Net.IPAddress.Parse(IpAddress); omron.Port = Port; string info; if (!omron.PlcConnect(out info)) { GlobalValues.Error($"连接失败"); } else { GlobalValues.Success("连接成功"); Enabled1 = false; Enabled2 = true; } } catch (Exception ex) { GlobalValues.Error($"连接失败:{ex.Message}"); } } private void DisconnectCmdFunc(object obj) { omron.DisConnect(); omron = null; Enabled1 = true; Enabled2 = false; } private void ReadCmdFunc(object obj) { string cmd = obj.ToString(); if (cmd == "1") { string[] res; bool isSucess = omron.Read(AreaTypeList[ReadAreaIndex], ReadAddress, 0, ReadCount, out res); if (!isSucess) { GlobalValues.Error("读取失败"); DisconnectCmdFunc(obj); return; } ReadResult = res.ToList().GetStrArray(" "); } else if (cmd == "2") { string res; bool isSucess = omron.ReadString(ReadAddress, ReadCount, out res); if (!isSucess) { GlobalValues.Error("读取失败"); DisconnectCmdFunc(obj); return; } ReadResult = res; } else if (cmd == "3") { float[] res; bool isSucess = omron.ReadFloats(ReadAddress, ReadCount, out res); if (!isSucess) { GlobalValues.Error("读取失败"); DisconnectCmdFunc(obj); return; } ReadResult = res.Select(it => Convert.ToString(it)).ToList().GetStrArray(" "); } else if (cmd == "4") { short[] res; bool isSucess = omron.ReadShorts(ReadAddress, ReadCount, out res); if (!isSucess) { GlobalValues.Error("读取失败"); DisconnectCmdFunc(obj); return; } ReadResult = res.Select(it => Convert.ToString(it)).ToList().GetStrArray(" "); } } private void WriteCmdFunc(object obj) { try { //1写入 2.Float 3Short 4字符串 string cmd = obj.ToString(); if (cmd == "1") { int[] intValues = WriteValue.Split(' ').Where(it => !it.IsNullOrEmpty()).Select(it => Convert.ToInt32(it)).ToArray(); if (WriteAreaIndex < 5) { bool[] values = intValues.Select(it => it == 1 ? true : false).ToArray(); bool isSucess = omron.WriteBits(AreaTypeList[WriteAreaIndex], WriteAddress, 0, values.Length, values); if (!isSucess) { GlobalValues.Error("写入失败"); DisconnectCmdFunc(obj); return; } GlobalValues.Success("写入成功"); } else { bool isSucess = omron.WriteWords(AreaTypeList[WriteAreaIndex], WriteAddress, intValues.Length, intValues); if (!isSucess) { GlobalValues.Error("写入失败"); DisconnectCmdFunc(obj); return; } GlobalValues.Success("写入成功"); } } else if (cmd == "2") { float[] floatValues = WriteValue.Split(' ').Where(it => !it.IsNullOrEmpty()).Select(it => Convert.ToSingle(it)).ToArray(); bool isSucess = omron.WriteFloat(WriteAddress, floatValues); if (!isSucess) { GlobalValues.Error("写入失败"); DisconnectCmdFunc(obj); return; } GlobalValues.Success("写入成功"); } else if (cmd == "3") { short[] floatValues = WriteValue.Split(' ').Where(it => !it.IsNullOrEmpty()).Select(it => Convert.ToInt16(it)).ToArray(); bool isSucess = omron.WriteShort(WriteAddress, floatValues); if (!isSucess) { GlobalValues.Error("写入失败"); DisconnectCmdFunc(obj); return; } GlobalValues.Success("写入成功"); } else if (cmd == "4") { bool isSucess = omron.WriteString(WriteAddress, WriteValue, StrLength); if (!isSucess) { GlobalValues.Error("写入失败"); DisconnectCmdFunc(obj); return; } GlobalValues.Success("写入成功"); } } catch (Exception ex) { MessageBox.ShowAsync($"操作异常:{ex.Message}"); } } } }