Files
6098/Cowain.Bake.Communication/PLC/PLC_ModbusTcp.cs

110 lines
3.0 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Cowain.Bake.BLL;
using Cowain.Bake.Common;
using Cowain.Bake.Common.Core;
using HslCommunication;
using HslCommunication.Core;
using HslCommunication.ModBus;
using Newtonsoft.Json;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Unity;
using Hsl = HslCommunication.Profinet.Omron;
namespace Cowain.Bake.Communication.PLC
{
public class PLC_ModbusTcp : PLCBase
{
public override int Port { get; set; } = 502;
private ModbusTcpNet plc;
public PLC_ModbusTcp(IUnityContainer unityContainer, IDialogService dialogService) : base(unityContainer, dialogService)
{
}
public override void Close()
{
IsConnect = false;
try
{
plc?.ConnectClose();
plc?.Dispose();
plc = null;
}
catch (Exception ex)
{
LogHelper.Instance.Error($"关闭PLC连接失败{ex}");
}
}
public override void Connect()
{
Close();
if (plc == null)
{
plc = new ModbusTcpNet();
this.PLC = plc;
this.ByteTransform = plc.ByteTransform;
plc.ConnectTimeOut = 3000;
}
try
{
plc.IpAddress = this.IpAddress;
plc.Port = this.Port;
plc.ByteTransform.DataFormat = HslCommunication.Core.DataFormat.CDAB;
var result = plc.ConnectServer();
if (result.IsSuccess)
{
IsConnect = true;
}
else
{
IsConnect = false;
LogHelper.Instance.Error("连接PLC失败,请检查网络和参数");
}
}
catch (Exception ex)
{
IsConnect = false;
LogHelper.Instance.Error($"连接PLC失败{ex}");
}
}
public override void GetJsonParam(string param)
{
dynamic d = JsonConvert.DeserializeObject<dynamic>(param);
this.IpAddress = d.Ip;
this.Port = d.Port;
}
public override void GetReadAddress()
{
foreach (var storage in Storages)
{
storage.ReadAddress = storage.AddressType + ";" + storage.StartAddress;
}
}
public override OperateResult Write<T>(string address, T data, int maxCount = 5)
{
return Write<T>(plc, address, data, maxCount);
}
public override OperateResult Writes(string[] tags, object[] values, int maxCount = Global.MAX_READS)
{
return null;
}
}
}