fix - PLC交互统一使用单例

master
SoulStar 2 months ago
parent 7405786547
commit 7760abe6d2

@ -160,64 +160,64 @@ namespace HighWayIot.Plc
//}
/// <summary>
/// PLC2写入数据
/// </summary>
/// <param name="address">地址</param>
/// <param name="value">值</param>
/// <param name="type">数据类型</param>
/// <returns></returns>
public static OperateResult PlcWrite2(string address, object value, DataTypeEnum type)
{
var result = new OperateResult() { IsSuccess = false };
try
{
switch (type)
{
case DataTypeEnum.Bool:
result = MelsecInstance2.Write(address, Convert.ToBoolean(value));
break;
//case DataTypeEnum.Byte:
// result = Instance.Write(address, Convert.ToByte(value));
///// <summary>
///// PLC2写入数据
///// </summary>
///// <param name="address">地址</param>
///// <param name="value">值</param>
///// <param name="type">数据类型</param>
///// <returns></returns>
//public static OperateResult PlcWrite2(string address, object value, DataTypeEnum type)
//{
// var result = new OperateResult() { IsSuccess = false };
// try
// {
// switch (type)
// {
// case DataTypeEnum.Bool:
// result = MelsecInstance2.Write(address, Convert.ToBoolean(value));
// break;
case DataTypeEnum.Int16:
result = MelsecInstance2.Write(address, Convert.ToInt16(value));
break;
case DataTypeEnum.UInt16:
result = MelsecInstance2.Write(address, Convert.ToUInt16(value));
break;
case DataTypeEnum.Int32:
result = MelsecInstance2.Write(address, Convert.ToInt32(value));
break;
case DataTypeEnum.UInt32:
result = MelsecInstance2.Write(address, Convert.ToUInt32(value));
break;
case DataTypeEnum.Int64:
result = MelsecInstance2.Write(address, Convert.ToInt64(value));
break;
case DataTypeEnum.UInt64:
result = MelsecInstance2.Write(address, Convert.ToUInt64(value));
break;
case DataTypeEnum.Float:
result = MelsecInstance2.Write(address, Convert.ToSingle(value));
break;
case DataTypeEnum.Double:
result = MelsecInstance2.Write(address, Convert.ToDouble(value));
break;
case DataTypeEnum.String:
result = MelsecInstance2.Write(address, Convert.ToString(value));
break;
default:
throw new ArgumentException($"Unsupported data type: {type}");
}
logHelper.PlcLog($"Read address:[{address}] value:[{value}] type:[{type.ToString()}] result:[{result.IsSuccess}]");
}
catch (Exception ex)
{
logHelper.Error("PLC写入数据发生错误", ex);
}
return result;
}
// //case DataTypeEnum.Byte:
// // result = Instance.Write(address, Convert.ToByte(value));
// // break;
// case DataTypeEnum.Int16:
// result = MelsecInstance2.Write(address, Convert.ToInt16(value));
// break;
// case DataTypeEnum.UInt16:
// result = MelsecInstance2.Write(address, Convert.ToUInt16(value));
// break;
// case DataTypeEnum.Int32:
// result = MelsecInstance2.Write(address, Convert.ToInt32(value));
// break;
// case DataTypeEnum.UInt32:
// result = MelsecInstance2.Write(address, Convert.ToUInt32(value));
// break;
// case DataTypeEnum.Int64:
// result = MelsecInstance2.Write(address, Convert.ToInt64(value));
// break;
// case DataTypeEnum.UInt64:
// result = MelsecInstance2.Write(address, Convert.ToUInt64(value));
// break;
// case DataTypeEnum.Float:
// result = MelsecInstance2.Write(address, Convert.ToSingle(value));
// break;
// case DataTypeEnum.Double:
// result = MelsecInstance2.Write(address, Convert.ToDouble(value));
// break;
// case DataTypeEnum.String:
// result = MelsecInstance2.Write(address, Convert.ToString(value));
// break;
// default:
// throw new ArgumentException($"Unsupported data type: {type}");
// }
// logHelper.PlcLog($"Read address:[{address}] value:[{value}] type:[{type.ToString()}] result:[{result.IsSuccess}]");
// }
// catch (Exception ex)
// {
// logHelper.Error("PLC写入数据发生错误", ex);
// }
// return result;
//}
///// <summary>
///// 字符串读取1
@ -460,246 +460,246 @@ namespace HighWayIot.Plc
// return result.Content;
//}
/// <summary>
/// 字符串读取2
/// </summary>
/// <param name="address"></param>
/// <param name="length"></param>
/// <returns></returns>
public static string ReadString2(string address, ushort length)
{
OperateResult<string> result = new OperateResult<string>();
try
{
result = MelsecInstance2.ReadString(address, length);
}
catch (Exception ex)
{
logHelper.Error($"PLC2读取String发生错误address:[{address}]", ex);
return default;
}
if (!result.IsSuccess)
{
return default;
}
return result.Content;
}
///// <summary>
///// 字符串读取2
///// </summary>
///// <param name="address"></param>
///// <param name="length"></param>
///// <returns></returns>
//public static string ReadString2(string address, ushort length)
//{
// OperateResult<string> result = new OperateResult<string>();
// try
// {
// result = MelsecInstance2.ReadString(address, length);
// }
// catch (Exception ex)
// {
// logHelper.Error($"PLC2读取String发生错误address:[{address}]", ex);
// return default;
// }
// if (!result.IsSuccess)
// {
// return default;
// }
// return result.Content;
//}
/// <summary>
/// 读取bool
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public static bool ReadBool2(string address)
{
OperateResult<bool> result = new OperateResult<bool>();
try
{
result = MelsecInstance2.ReadBool(address);
}
catch (Exception ex)
{
logHelper.Error($"PLC读取Bool发生错误address:[{address}]", ex);
return default;
}
if (!result.IsSuccess)
{
return default;
}
return result.Content;
}
///// <summary>
///// 读取bool
///// </summary>
///// <param name="address"></param>
///// <returns></returns>
//public static bool ReadBool2(string address)
//{
// OperateResult<bool> result = new OperateResult<bool>();
// try
// {
// result = MelsecInstance2.ReadBool(address);
// }
// catch (Exception ex)
// {
// logHelper.Error($"PLC读取Bool发生错误address:[{address}]", ex);
// return default;
// }
// if (!result.IsSuccess)
// {
// return default;
// }
// return result.Content;
//}
/// <summary>
/// 读取Int16
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public static short ReadInt162(string address)
{
OperateResult<short> result = new OperateResult<short>();
try
{
result = MelsecInstance2.ReadInt16(address);
}
catch (Exception ex)
{
logHelper.Error($"PLC读取Int16发生错误address:[{address}]", ex);
return default;
}
if (!result.IsSuccess)
{
return default;
}
return result.Content;
}
///// <summary>
///// 读取Int16
///// </summary>
///// <param name="address"></param>
///// <returns></returns>
//public static short ReadInt162(string address)
//{
// OperateResult<short> result = new OperateResult<short>();
// try
// {
// result = MelsecInstance2.ReadInt16(address);
// }
// catch (Exception ex)
// {
// logHelper.Error($"PLC读取Int16发生错误address:[{address}]", ex);
// return default;
// }
// if (!result.IsSuccess)
// {
// return default;
// }
// return result.Content;
//}
/// <summary>
/// 读取UInt16
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public static ushort ReadUInt162(string address)
{
OperateResult<ushort> result = new OperateResult<ushort>();
try
{
result = MelsecInstance2.ReadUInt16(address);
}
catch (Exception ex)
{
logHelper.Error($"PLC读取Int16发生错误address:[{address}]", ex);
return default;
}
if (!result.IsSuccess)
{
return default;
}
return result.Content;
}
///// <summary>
///// 读取UInt16
///// </summary>
///// <param name="address"></param>
///// <returns></returns>
//public static ushort ReadUInt162(string address)
//{
// OperateResult<ushort> result = new OperateResult<ushort>();
// try
// {
// result = MelsecInstance2.ReadUInt16(address);
// }
// catch (Exception ex)
// {
// logHelper.Error($"PLC读取Int16发生错误address:[{address}]", ex);
// return default;
// }
// if (!result.IsSuccess)
// {
// return default;
// }
// return result.Content;
//}
/// <summary>
/// 读取Int32
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public static int ReadInt322(string address)
{
OperateResult<int> result = new OperateResult<int>();
try
{
result = MelsecInstance2.ReadInt32(address);
}
catch (Exception ex)
{
logHelper.Error($"PLC读取Int16发生错误address:[{address}]", ex);
return default;
}
if (!result.IsSuccess)
{
return default;
}
return result.Content;
}
///// <summary>
///// 读取Int32
///// </summary>
///// <param name="address"></param>
///// <returns></returns>
//public static int ReadInt322(string address)
//{
// OperateResult<int> result = new OperateResult<int>();
// try
// {
// result = MelsecInstance2.ReadInt32(address);
// }
// catch (Exception ex)
// {
// logHelper.Error($"PLC读取Int16发生错误address:[{address}]", ex);
// return default;
// }
// if (!result.IsSuccess)
// {
// return default;
// }
// return result.Content;
//}
/// <summary>
/// 读取UInt32
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public static uint ReadUInt322(string address)
{
OperateResult<uint> result = new OperateResult<uint>();
try
{
result = MelsecInstance2.ReadUInt32(address);
}
catch (Exception ex)
{
logHelper.Error($"PLC读取Int16发生错误address:[{address}]", ex);
return default;
}
if (!result.IsSuccess)
{
return default;
}
return result.Content;
}
///// <summary>
///// 读取UInt32
///// </summary>
///// <param name="address"></param>
///// <returns></returns>
//public static uint ReadUInt322(string address)
//{
// OperateResult<uint> result = new OperateResult<uint>();
// try
// {
// result = MelsecInstance2.ReadUInt32(address);
// }
// catch (Exception ex)
// {
// logHelper.Error($"PLC读取Int16发生错误address:[{address}]", ex);
// return default;
// }
// if (!result.IsSuccess)
// {
// return default;
// }
// return result.Content;
//}
/// <summary>
/// 读取Int64
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public static long ReadInt642(string address)
{
OperateResult<long> result = new OperateResult<long>();
try
{
result = MelsecInstance2.ReadInt64(address);
}
catch (Exception ex)
{
logHelper.Error($"PLC读取Int16发生错误address:[{address}]", ex);
return default;
}
if (!result.IsSuccess)
{
return default;
}
return result.Content;
}
///// <summary>
///// 读取Int64
///// </summary>
///// <param name="address"></param>
///// <returns></returns>
//public static long ReadInt642(string address)
//{
// OperateResult<long> result = new OperateResult<long>();
// try
// {
// result = MelsecInstance2.ReadInt64(address);
// }
// catch (Exception ex)
// {
// logHelper.Error($"PLC读取Int16发生错误address:[{address}]", ex);
// return default;
// }
// if (!result.IsSuccess)
// {
// return default;
// }
// return result.Content;
//}
/// <summary>
/// 读取UInt64
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public static ulong ReadUInt642(string address)
{
OperateResult<ulong> result = new OperateResult<ulong>();
try
{
result = MelsecInstance2.ReadUInt64(address);
}
catch (Exception ex)
{
logHelper.Error($"PLC读取Int16发生错误address:[{address}]", ex);
return default;
}
if (!result.IsSuccess)
{
return default;
}
return result.Content;
}
///// <summary>
///// 读取UInt64
///// </summary>
///// <param name="address"></param>
///// <returns></returns>
//public static ulong ReadUInt642(string address)
//{
// OperateResult<ulong> result = new OperateResult<ulong>();
// try
// {
// result = MelsecInstance2.ReadUInt64(address);
// }
// catch (Exception ex)
// {
// logHelper.Error($"PLC读取Int16发生错误address:[{address}]", ex);
// return default;
// }
// if (!result.IsSuccess)
// {
// return default;
// }
// return result.Content;
//}
/// <summary>
/// 读取Float
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public static float ReadFloat2(string address)
{
OperateResult<float> result = new OperateResult<float>();
try
{
result = MelsecInstance2.ReadFloat(address);
}
catch (Exception ex)
{
logHelper.Error($"PLC读取Float发生错误address:[{address}]", ex);
return default;
}
if (!result.IsSuccess)
{
return default;
}
return result.Content;
}
///// <summary>
///// 读取Float
///// </summary>
///// <param name="address"></param>
///// <returns></returns>
//public static float ReadFloat2(string address)
//{
// OperateResult<float> result = new OperateResult<float>();
// try
// {
// result = MelsecInstance2.ReadFloat(address);
// }
// catch (Exception ex)
// {
// logHelper.Error($"PLC读取Float发生错误address:[{address}]", ex);
// return default;
// }
// if (!result.IsSuccess)
// {
// return default;
// }
// return result.Content;
//}
/// <summary>
/// 读取Double
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public static double ReadDouble2(string address)
{
OperateResult<double> result = new OperateResult<double>();
///// <summary>
///// 读取Double
///// </summary>
///// <param name="address"></param>
///// <returns></returns>
//public static double ReadDouble2(string address)
//{
// OperateResult<double> result = new OperateResult<double>();
try
{
result = MelsecInstance2.ReadDouble(address);
}
catch (Exception ex)
{
logHelper.Error($"PLC读取Double发生错误address:[{address}]", ex);
return default;
}
if (!result.IsSuccess)
{
return default;
}
return result.Content;
}
// try
// {
// result = MelsecInstance2.ReadDouble(address);
// }
// catch (Exception ex)
// {
// logHelper.Error($"PLC读取Double发生错误address:[{address}]", ex);
// return default;
// }
// if (!result.IsSuccess)
// {
// return default;
// }
// return result.Content;
//}
}
}

@ -24,7 +24,7 @@ namespace HighWayIot.Plc.PlcHelper
//SPEC编号写入
try
{
if (!PlcConnect.PlcWrite2("D206", uint.Parse(paraEntity.SpecCode), DataTypeEnum.UInt32).IsSuccess)
if (!PlcConnect.MelsecInstance2.Write("D206", uint.Parse(paraEntity.SpecCode)).IsSuccess)
return false;
}
catch
@ -187,7 +187,7 @@ namespace HighWayIot.Plc.PlcHelper
}
//读取SPEC编号
paraEntity.SpecCode = PlcConnect.ReadUInt322("D206").ToString();
paraEntity.SpecCode = PlcConnect.MelsecInstance2.ReadUInt32("D206").ToString();
//读取SPEC名称
paraEntity.SpecName = PlcConnect.MelsecInstance2.ByteTransform.TransString(data, 0, 10, Encoding.ASCII);

@ -25,19 +25,19 @@ namespace HighWayIot.Plc.PlcHelper
switch (stationNo)
{
case 1:
result = PlcConnect.PlcWrite2("B201", true, DataTypeEnum.Bool).IsSuccess;
result = PlcConnect.MelsecInstance2.Write("B201", true).IsSuccess;
break;
case 2:
result = PlcConnect.PlcWrite2("B202", true, DataTypeEnum.Bool).IsSuccess;
result = PlcConnect.MelsecInstance2.Write("B202", true).IsSuccess;
break;
case 3:
result = PlcConnect.PlcWrite2("B203", true, DataTypeEnum.Bool).IsSuccess;
result = PlcConnect.MelsecInstance2.Write("B203", true).IsSuccess;
break;
case 4:
result = PlcConnect.PlcWrite2("B205", true, DataTypeEnum.Bool).IsSuccess;
result = PlcConnect.MelsecInstance2.Write("B205", true).IsSuccess;
break;
case 5:
result = PlcConnect.PlcWrite2("B207", true, DataTypeEnum.Bool).IsSuccess;
result = PlcConnect.MelsecInstance2.Write("B207", true).IsSuccess;
break;
default:
break;
@ -59,19 +59,19 @@ namespace HighWayIot.Plc.PlcHelper
switch (stationNo)
{
case 1:
result = PlcConnect.PlcWrite2("B211", true, DataTypeEnum.Bool).IsSuccess;
result = PlcConnect.MelsecInstance2.Write("B211", true).IsSuccess;
break;
case 2:
result = PlcConnect.PlcWrite2("B212", true, DataTypeEnum.Bool).IsSuccess;
result = PlcConnect.MelsecInstance2.Write("B212", true).IsSuccess;
break;
case 3:
result = PlcConnect.PlcWrite2("B213", true, DataTypeEnum.Bool).IsSuccess;
result = PlcConnect.MelsecInstance2.Write("B213", true).IsSuccess;
break;
case 4:
result = PlcConnect.PlcWrite2("B215", true, DataTypeEnum.Bool).IsSuccess;
result = PlcConnect.MelsecInstance2.Write("B215", true).IsSuccess;
break;
case 5:
result = PlcConnect.PlcWrite2("B217", true, DataTypeEnum.Bool).IsSuccess;
result = PlcConnect.MelsecInstance2.Write("B217", true).IsSuccess;
break;
default:
break;

@ -29,7 +29,7 @@ namespace HighWayIot.Plc.PlcHelper
//选择是小车的哪个点位
point += rgvStationNo - 1;
bool result = PlcConnect.PlcWrite2($"B{point.ToString("X")}", true, DataTypeEnum.Bool).IsSuccess;
bool result = PlcConnect.MelsecInstance2.Write($"B{point.ToString("X")}", true).IsSuccess;
if (result)
{
LogHelper.Instance.Info($"B{point.ToString("X")} 点置True");

@ -71,7 +71,7 @@ namespace HighWayIot.Winform.Business
}
if (recipeParaHelper.UploadToPLC(recipeParaInfo, zxRecipePositionParaEntities))
{
PlcConnect.PlcWrite2($"B{(item.Key + 0x901).ToString("X")}", false, DataTypeEnum.Bool);
PlcConnect.MelsecInstance2.Write($"B{(item.Key + 0x901).ToString("X")}", false);
int deviceNo = schedulingInfo.Single(x => x.Id == item.Key + 1).DeviceNo ?? 0;
MonitorInsert(recipeNo, $"{deviceNo}上模");
}
@ -88,7 +88,7 @@ namespace HighWayIot.Winform.Business
}
if (recipeParaHelper.UploadToPLC(recipeParaInfo, zxRecipePositionParaEntities))
{
PlcConnect.PlcWrite2($"B{(item.Key + 0x941).ToString("X")}", false, DataTypeEnum.Bool);
PlcConnect.MelsecInstance2.Write($"B{(item.Key + 0x941).ToString("X")}", false);
int deviceNo = schedulingInfo.Single(x => x.Id == item.Key + 1 - 62).DeviceNo ?? 0;
MonitorInsert(recipeNo, $"{deviceNo}下模");
}

@ -140,9 +140,13 @@ namespace HighWayIot.Winform.UserControlPages
if (res.IsSuccess)
{
//读取SPEC编号
PlcSpecNoLabel.Text = PlcConnect.ReadUInt322("D206").ToString();
PlcSpecNoLabel.Text = PlcConnect.MelsecInstance2.ReadUInt32("D206").ToString();
//读取SPEC名称
PlcSpecNameLabel.Text = PlcConnect.ReadString2("D290", 10).ToString();
PlcSpecNameLabel.Text = PlcConnect.MelsecInstance2.ReadString("D290", 10).ToString();
}
else
{
}
}
catch

@ -83,7 +83,6 @@
this.WriteButton.TabIndex = 3;
this.WriteButton.Text = "写";
this.WriteButton.UseVisualStyleBackColor = true;
this.WriteButton.Click += new System.EventHandler(this.WriteButton_Click);
//
// PlcAddress
//

@ -168,23 +168,7 @@ namespace HighWayIot.Winform.UserControlPages
/// <param name="e"></param>
private void WriteButton_Click(object sender, EventArgs e)
{
if ((DataTypeEnum)Convert.ToInt32(PlcType.SelectedValue) != DataTypeEnum.String)
{
if (!decimal.TryParse(PlcValue.Text, out decimal value))
{
MessageBox.Show("类型转换错误!");
}
var result = PlcConnect.PlcWrite2(PlcAddress.Text, value, (DataTypeEnum)Convert.ToInt32(PlcType.SelectedValue));
bool r = result.IsSuccess;
PlcShowValue.Text = r.ToString();
}
else
{
string value = PlcValue.Text;
var result = PlcConnect.PlcWrite2(PlcAddress.Text, value, (DataTypeEnum)Convert.ToInt32(PlcType.SelectedValue));
bool r = result.IsSuccess;
PlcShowValue.Text = r.ToString();
}
}
}
}

Loading…
Cancel
Save