fix - PLC交互统一使用单例

master
SoulStar 2 months ago
parent 7405786547
commit 7760abe6d2

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

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

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

@ -29,7 +29,7 @@ namespace HighWayIot.Plc.PlcHelper
//选择是小车的哪个点位 //选择是小车的哪个点位
point += rgvStationNo - 1; 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) if (result)
{ {
LogHelper.Instance.Info($"B{point.ToString("X")} 点置True"); LogHelper.Instance.Info($"B{point.ToString("X")} 点置True");

@ -71,7 +71,7 @@ namespace HighWayIot.Winform.Business
} }
if (recipeParaHelper.UploadToPLC(recipeParaInfo, zxRecipePositionParaEntities)) 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; int deviceNo = schedulingInfo.Single(x => x.Id == item.Key + 1).DeviceNo ?? 0;
MonitorInsert(recipeNo, $"{deviceNo}上模"); MonitorInsert(recipeNo, $"{deviceNo}上模");
} }
@ -88,7 +88,7 @@ namespace HighWayIot.Winform.Business
} }
if (recipeParaHelper.UploadToPLC(recipeParaInfo, zxRecipePositionParaEntities)) 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; int deviceNo = schedulingInfo.Single(x => x.Id == item.Key + 1 - 62).DeviceNo ?? 0;
MonitorInsert(recipeNo, $"{deviceNo}下模"); MonitorInsert(recipeNo, $"{deviceNo}下模");
} }

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

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

@ -168,23 +168,7 @@ namespace HighWayIot.Winform.UserControlPages
/// <param name="e"></param> /// <param name="e"></param>
private void WriteButton_Click(object sender, EventArgs e) 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