|
|
|
|
using System;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
using ZJ_BYD.Untils;
|
|
|
|
|
|
|
|
|
|
namespace ZJ_BYD.Common
|
|
|
|
|
{
|
|
|
|
|
public class PlcHelper
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取PLC值
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="dataType"></param>
|
|
|
|
|
/// <param name="address"></param>
|
|
|
|
|
/// <param name="length"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static (bool ok, string val) GetPlcVal(string dataType, string address, string length = "40")
|
|
|
|
|
{
|
|
|
|
|
var strVal = string.Empty;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
switch (dataType)
|
|
|
|
|
{
|
|
|
|
|
case "bool":
|
|
|
|
|
if (Program.siemensS7Net == null)
|
|
|
|
|
{
|
|
|
|
|
Program.communicationstatus = "异常";
|
|
|
|
|
return (false, strVal);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var operateBoolResult = Program.siemensS7Net.ReadBool(address);
|
|
|
|
|
if (!operateBoolResult.IsSuccess)
|
|
|
|
|
{
|
|
|
|
|
return (false, strVal);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var boolVal = operateBoolResult.Content;
|
|
|
|
|
strVal = boolVal.ToString();
|
|
|
|
|
return (true, strVal);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
case "short":
|
|
|
|
|
if (Program.siemensS7Net == null)
|
|
|
|
|
{
|
|
|
|
|
Program.communicationstatus = "异常";
|
|
|
|
|
return (false, strVal);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var operateShortResult = Program.siemensS7Net.ReadInt16(address);
|
|
|
|
|
if (!operateShortResult.IsSuccess)
|
|
|
|
|
{
|
|
|
|
|
return (false, strVal);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var shortVal = operateShortResult.Content;
|
|
|
|
|
strVal = shortVal.ToString();
|
|
|
|
|
return (true, strVal);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
case "ushort":
|
|
|
|
|
if (Program.siemensS7Net == null)
|
|
|
|
|
{
|
|
|
|
|
Program.communicationstatus = "异常";
|
|
|
|
|
return (false, strVal);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var operateShortResult = Program.siemensS7Net.ReadUInt16(address);
|
|
|
|
|
if (!operateShortResult.IsSuccess)
|
|
|
|
|
{
|
|
|
|
|
return (false, strVal);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var shortVal = operateShortResult.Content;
|
|
|
|
|
strVal = shortVal.ToString();
|
|
|
|
|
return (true, strVal);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
case "float":
|
|
|
|
|
if (Program.siemensS7Net == null)
|
|
|
|
|
{
|
|
|
|
|
Program.communicationstatus = "异常";
|
|
|
|
|
return (false, strVal);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var operateFloatResult = Program.siemensS7Net.ReadFloat(address);
|
|
|
|
|
if (!operateFloatResult.IsSuccess)
|
|
|
|
|
{
|
|
|
|
|
return (false, strVal);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var floatVal = operateFloatResult.Content;
|
|
|
|
|
strVal = floatVal.ToString("f3");
|
|
|
|
|
return (true, strVal);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
case "string":
|
|
|
|
|
if (Program.siemensS7Net == null)
|
|
|
|
|
{
|
|
|
|
|
Program.communicationstatus = "异常";
|
|
|
|
|
return (false, strVal);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var operateFloatResult = Program.siemensS7Net.ReadString(address, ushort.Parse(length), Encoding.UTF8);
|
|
|
|
|
if (!operateFloatResult.IsSuccess)
|
|
|
|
|
{
|
|
|
|
|
return (false, strVal);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
strVal = operateFloatResult.Content;
|
|
|
|
|
if (!string.IsNullOrEmpty(strVal))
|
|
|
|
|
{
|
|
|
|
|
strVal = strVal.Substring(2, strVal.Length - 2).Trim();
|
|
|
|
|
}
|
|
|
|
|
return (true, strVal);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
default:
|
|
|
|
|
LogHelper.WriteLog("未知数据类型!");
|
|
|
|
|
return (false, strVal);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
var errMsg = ex == null ? "未知异常" : ex.Message;
|
|
|
|
|
MessageBox.Show($"GetPlcVal方法出发异常:{errMsg},请联系管理员!");
|
|
|
|
|
return (false, strVal);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|