using HslCommunication; using HslCommunication.Profinet.Melsec; using System; using System.Text; using System.Threading.Tasks; namespace Aucma.Core.MelsecPLc { /// /// 三菱PLC /// public class MelsecPlc //: IMelsecPlc { private static MelsecMcNet? melsecMc = null; #region 构造函数 //public MelsecPlc() //{ // if (!HslCommunication.Authorization.SetAuthorizationCode("ed1415f8-e06a-43ad-95f7-c04f7ae93b41")) // { // //log.Info("HslCommunication激活失败"); // return; // } // Console.WriteLine("HslCommunication激活成功!"); // melsecMc = new MelsecMcNet(); // melsecMc.ConnectTimeOut = 2000; //} #endregion #region 注册 public static bool Registed() { if (!HslCommunication.Authorization.SetAuthorizationCode("ed1415f8-e06a-43ad-95f7-c04f7ae93b41")) { //log.Info("HslCommunication激活失败"); return false; } Console.WriteLine("HslCommunication激活成功!"); melsecMc = new MelsecMcNet(); melsecMc.ConnectTimeOut = 2000; return true; } #endregion #region 是否连接 /// /// 是否连接 /// public static bool IsConnected { get; set; } #endregion #region 建立连接 /// /// 建立连接 /// /// /// /// public static bool Connect(string iP, int port) { //melsecMc.IpAddress = iP;//正式环境开启 melsecMc.Port = port; // 如果网络不太理想,配置了两个端口,一个有问题,立即切换另一个的话,可以配置如下的代码 //melsecMc.GetPipeSocket().SetMultiPorts(new int[] { 6000, 6001 }); try { OperateResult connect = melsecMc.ConnectServer(); if (connect.IsSuccess) { IsConnected = true; return true; } else { melsecMc.ConnectClose(); IsConnected = false; return false; } } catch (Exception ex) { IsConnected = false; return false; } } #endregion #region 断开连接 /// /// 断开连接 /// /// public static bool DisConnect() { return melsecMc.ConnectClose().IsSuccess; } #endregion #region 读取byte数据 /// /// 读取byte数据 /// /// /// public static byte[] ReadBytes(string address) { byte[] bytes = null; try { OperateResult read = melsecMc.Read(address, 26); if (read.IsSuccess) { byte[] code = new byte[read.Content.Length - 2]; Array.Copy(read.Content, 2, code, 0, 24); string scode = Encoding.ASCII.GetString(code, 0, code.Length); bytes = code; } } catch (Exception ex) { //LogHelper.Error("ReadBytes方法异常" + ex.ToString()); } return bytes; } #endregion #region 读取bool /// /// 读取bool /// /// /// public static bool ReadBool(string address) { bool iflag = false; try { OperateResult read = melsecMc.ReadBool(address); if (read.IsSuccess) { iflag = read.Content; } return iflag; } catch (Exception ex) { //LogHelper.Error("ReadBool方法异常" + ex.ToString()); } return iflag; } #endregion #region 读取int16 /// /// 读取int16 /// /// /// public static int ReadInt16(string address) { int returnflag = 0; try { OperateResult read = melsecMc.ReadInt16(address); if (read.IsSuccess) { returnflag = read.Content; } } catch (Exception ex) { //LogHelper.Error("ReadInt16方法异常" + ex.ToString()); } return returnflag; } #endregion #region 读取int32 /// /// 读取int32 /// /// /// public static int ReadInt32(string address) { int returnflag = 0; try { OperateResult read = melsecMc.ReadInt32(address); if (read.IsSuccess) { returnflag = read.Content; } } catch (Exception ex) { //LogHelper.Error("ReadInt32方法异常" + ex.ToString()); } return returnflag; } #endregion #region 读取string /// /// 读取string /// /// /// public static string ReadString(string address) { string returnflag = ""; try { OperateResult read = melsecMc.ReadString(address, 10); if (read.IsSuccess) { returnflag = read.Content; } } catch (Exception ex) { //LogHelper.Error("ReadString方法异常" + ex.ToString()); } return returnflag; } #endregion #region 读取Float /// /// 读取string /// /// /// public static float ReadFloat(string address) { float flag = 0; try { OperateResult read = melsecMc.ReadFloat(address); if (read.IsSuccess) { flag = read.Content; } } catch (Exception ex) { //LogHelper.Error("ReadString方法异常" + ex.ToString()); } return flag; } #endregion #region 写入int16 /// /// 写入int16 /// /// /// /// public static bool WriteInt16(string address, string value) { bool iflag = false; try { OperateResult write = melsecMc.Write(address, short.Parse(value)); //Task> operateResult = melsecMc.Wait(address, short.Parse(value)); if (write.IsSuccess) { iflag = true; } else { iflag = false; } return iflag; } catch (Exception ex) { //LogHelper.Error("WriteInt16方法异常" + ex.ToString()); return iflag; } } #endregion #region 写入int32 /// /// 写入int32 /// /// /// /// public static bool WriteInt32(string address, int value) { bool iflag = false; try { OperateResult write = melsecMc.Write(address, value); if (write.IsSuccess) { iflag = true; } else { iflag = false; } return iflag; } catch (Exception ex) { //LogHelper.Error("WriteInt32方法异常" + ex.ToString()); return iflag; } } #endregion #region 写入string /// /// 写入string /// /// /// /// public static bool WriteString(string address, string value) { bool iflag = false; try { OperateResult write = melsecMc.Write(address, value); if (write.IsSuccess) { iflag = true; } else { iflag = false; } } catch (Exception ex) { //LogHelper.Error("WriteString方法异常" + ex.ToString()); iflag = false; } return iflag; } #endregion #region 写入byte /// /// 写入byte /// /// /// /// public static bool WriteByte(string address, byte[] bytes) { bool iflag = false; try { OperateResult write = melsecMc.Write(address, bytes); if (write.IsSuccess) { iflag = true; } else { iflag = false; } } catch (Exception ex) { //LogHelper.Error("WriteByte方法异常" + ex.ToString()); iflag = false; } return iflag; } #endregion #region 写入Float /// /// 写入byte /// /// /// /// public static bool WriteFloat(string address, float value) { bool iflag = false; try { OperateResult write = melsecMc.Write(address, value); if (write.IsSuccess) { iflag = true; } else { iflag = false; } } catch (Exception ex) { //LogHelper.Error("WriteByte方法异常" + ex.ToString()); iflag = false; } return iflag; } #endregion #region 心跳使用——喂狗 /// /// 心跳使用 /// /// /// public static async Task Read(string address) { try { melsecMc.ReceiveTimeOut = 2000; OperateResult read = await melsecMc.ReadBoolAsync(address); if (read.IsSuccess) { IsConnected = true; return true; } else { var k = read.ErrorCode < 0 ? false : true; if (k) { IsConnected = true; return true; } else { IsConnected = false; return false; } } } catch (Exception ex) { //LogHelper.Error("ReadInt32方法异常" + ex.ToString()); } return false; } #endregion } }