254 lines
8.2 KiB
C#
254 lines
8.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using 常用工具集.Base;
|
|
using MES.Utility.Network;
|
|
using S7.Net;
|
|
|
|
namespace 常用工具集.ViewModel._01PLC通信调试
|
|
{
|
|
public class Modbus调试2ViewModel : ViewModelBase
|
|
{
|
|
public bool Enabled1 { get; set; } = true;
|
|
public bool Enabled2 { get; set; } = false;
|
|
public string IpAddress { get; set; } = "192.168.1.10";
|
|
public int Port { get; set; } = 502;
|
|
|
|
public int Address { get; set; } = 4001;
|
|
public int StringLength { get; set; } = 100;
|
|
public string ReadedValue { get; set; } = "";
|
|
public string Message { get; set; } = "";
|
|
|
|
public string SendedBytesValue { get; set; } = "";
|
|
public string RecivedBytesValue { get; set; } = "";
|
|
public string Int16Value { get; set; } = "";
|
|
public string Int32Value { get; set; } = "";
|
|
public string RealValue { get; set; } = "";
|
|
public string StringValue { get; set; } = "";
|
|
public string DoubleValue { get; set; } = "";
|
|
public string LongValue { get; set; } = "";
|
|
|
|
//STRING DOUBLE INT64 INT32 INT16 REAL
|
|
private ModbusHelper modbus;
|
|
|
|
public DelegateCommand ConnectCmd { get; set; }
|
|
public DelegateCommand DisconnectCmd { get; set; }
|
|
public DelegateCommand WriteCmd { get; set; }
|
|
public DelegateCommand ReadCmd { get; set; }
|
|
public Modbus调试2ViewModel()
|
|
{
|
|
ConnectCmd = new DelegateCommand(ConnectCmdFunc);
|
|
DisconnectCmd = new DelegateCommand(DisconnectCmdFunc);
|
|
ReadCmd = new DelegateCommand(ReadCmdFunc);
|
|
WriteCmd = new DelegateCommand(WriteCmdFunc);
|
|
}
|
|
|
|
private void ConnectCmdFunc(object obj)
|
|
{
|
|
try
|
|
{
|
|
modbus = new ModbusHelper(IpAddress, Port);
|
|
modbus.OnSended += Modbus_OnSended;
|
|
modbus.OnRecived += Modbus_OnRecived;
|
|
Enabled1 = false;
|
|
Enabled2 = true;
|
|
}
|
|
catch
|
|
{
|
|
GlobalValues.Error("连接失败");
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private void DisconnectCmdFunc(object obj)
|
|
{
|
|
modbus.OnSended -= Modbus_OnSended;
|
|
modbus.OnRecived -= Modbus_OnRecived;
|
|
modbus.Dispose();
|
|
modbus = null;
|
|
Enabled1 = true;
|
|
Enabled2 = false;
|
|
}
|
|
|
|
private void ReadCmdFunc(object obj)
|
|
{
|
|
string cmd = obj.ToString();
|
|
|
|
ReadedValue = "";
|
|
Message = "";
|
|
SendedBytesValue = "";
|
|
RecivedBytesValue = "";
|
|
if (cmd == "INT16")
|
|
{
|
|
ushort value;
|
|
bool flag = modbus.ReadHoldRegisterInt16(Address, out value);
|
|
if (!flag)
|
|
{
|
|
Message = "读取失败";
|
|
DisconnectCmdFunc(null);
|
|
return;
|
|
}
|
|
Message = "读取成功";
|
|
ReadedValue = value.ToString();
|
|
}
|
|
else if (cmd == "INT32")
|
|
{
|
|
int value;
|
|
bool flag = modbus.ReadHoldRegisterInt32(Address, out value);
|
|
if (!flag)
|
|
{
|
|
Message = "读取失败";
|
|
DisconnectCmdFunc(null);
|
|
return;
|
|
}
|
|
Message = "读取成功";
|
|
ReadedValue = value.ToString();
|
|
}
|
|
else if (cmd == "INT64")
|
|
{
|
|
long value;
|
|
bool flag = modbus.ReadHoldRegisterInt64(Address, out value);
|
|
if (!flag)
|
|
{
|
|
Message = "读取失败";
|
|
DisconnectCmdFunc(null);
|
|
return;
|
|
}
|
|
Message = "读取成功";
|
|
ReadedValue = value.ToString();
|
|
}
|
|
else if (cmd == "REAL")
|
|
{
|
|
float value;
|
|
bool flag = modbus.ReadHoldRegisterFloat(Address, out value);
|
|
if (!flag)
|
|
{
|
|
Message = "读取失败";
|
|
DisconnectCmdFunc(null);
|
|
return;
|
|
}
|
|
Message = "读取成功";
|
|
ReadedValue = value.ToString();
|
|
}
|
|
else if (cmd == "DOUBLE")
|
|
{
|
|
double value;
|
|
bool flag = modbus.ReadHoldRegisterDouble(Address, out value);
|
|
if (!flag)
|
|
{
|
|
Message = "读取失败";
|
|
DisconnectCmdFunc(null);
|
|
return;
|
|
}
|
|
Message = "读取成功";
|
|
ReadedValue = value.ToString();
|
|
}
|
|
else if (cmd == "STRING")
|
|
{
|
|
string value;
|
|
bool flag = modbus.ReadHoldRegisterString(Address, StringLength, out value);
|
|
if (!flag)
|
|
{
|
|
Message = "读取失败";
|
|
DisconnectCmdFunc(null);
|
|
return;
|
|
}
|
|
Message = "读取成功";
|
|
ReadedValue = value.ToString();
|
|
}
|
|
|
|
// DOUBLE
|
|
|
|
}
|
|
|
|
private void WriteCmdFunc(object obj)
|
|
{
|
|
string cmd = obj.ToString();
|
|
ReadedValue = "";
|
|
Message = "";
|
|
SendedBytesValue = "";
|
|
RecivedBytesValue = "";
|
|
if (cmd == "INT16")
|
|
{
|
|
ushort value;
|
|
bool flag = ushort.TryParse(Int16Value, out value);
|
|
if (!flag)
|
|
{
|
|
Message = "请输入正确的数据";
|
|
return;
|
|
}
|
|
flag = modbus.WriteHoldRegisterInt16(Address, value);
|
|
Message = flag ? "写入成功" : "写入失败";
|
|
}
|
|
else if (cmd == "INT32")
|
|
{
|
|
int value;
|
|
bool flag = int.TryParse(Int32Value, out value);
|
|
if (!flag)
|
|
{
|
|
Message = "请输入正确的数据";
|
|
return;
|
|
}
|
|
flag = modbus.WriteHoldRegisterInt32(Address, value);
|
|
Message = flag ? "写入成功" : "写入失败";
|
|
}
|
|
else if (cmd == "INT64")
|
|
{
|
|
long value;
|
|
bool flag = long.TryParse(LongValue, out value);
|
|
if (!flag)
|
|
{
|
|
Message = "请输入正确的数据";
|
|
return;
|
|
}
|
|
flag = modbus.WriteHoldRegisterInt64(Address, value);
|
|
Message = flag ? "写入成功" : "写入失败";
|
|
}
|
|
else if (cmd == "REAL")
|
|
{
|
|
float value;
|
|
bool flag = float.TryParse(RealValue, out value);
|
|
if (!flag)
|
|
{
|
|
Message = "请输入正确的数据";
|
|
return;
|
|
}
|
|
flag = modbus.WriteHoldRegisterFloat(Address, value);
|
|
Message = flag ? "写入成功" : "写入失败";
|
|
}
|
|
else if (cmd == "DOUBLE")
|
|
{
|
|
double value;
|
|
bool flag = double.TryParse(DoubleValue, out value);
|
|
if (!flag)
|
|
{
|
|
Message = "请输入正确的数据";
|
|
return;
|
|
}
|
|
flag = modbus.WriteHoldRegisterDouble(Address, value);
|
|
Message = flag ? "写入成功" : "写入失败";
|
|
}
|
|
else if (cmd == "STRING")
|
|
{
|
|
bool flag = modbus.WriteHoldRegisterString(Address, StringLength, StringValue);
|
|
Message = flag ? "写入成功" : "写入失败";
|
|
}
|
|
}
|
|
|
|
|
|
private void Modbus_OnRecived(byte[] bytes, string hexString)
|
|
{
|
|
RecivedBytesValue = hexString;
|
|
}
|
|
|
|
private void Modbus_OnSended(byte[] bytes, string hexString)
|
|
{
|
|
SendedBytesValue = hexString;
|
|
}
|
|
}
|
|
}
|