You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
3.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PLCManager
{
public class floatConvert
{
public Object[] floatToObject(float ff)
{
try
{
//正负符号默认为0
byte flag = 0;
if (ff < 0)
{
flag = 128;
ff = ff * -1;
}
byte[] floatByte = BitConverter.GetBytes(ff);
byte[] lowhByte = new byte[4];
lowhByte[0] = floatByte[0];
lowhByte[1] = floatByte[1];
lowhByte[2] = 0;
lowhByte[3] = 0;
byte[] highByte = new byte[4];
highByte[0] = floatByte[2];
highByte[1] = floatByte[3];
highByte[2] = 0;
highByte[3] = 0;
highByte[1] = (byte)(highByte[1] + flag);
UInt32 low = BitConverter.ToUInt32(lowhByte, 0);
int high = BitConverter.ToInt16(highByte, 0);
object[] buff = new object[2];
buff[0] = low;
buff[1] = high;
return buff;
}
catch
{
return null;
}
}
private float convertTofloat(object[] buff)
{
//正负标志位
int flag = 1;
int b = Convert.ToInt32(buff[0]);
int a = Convert.ToInt32(buff[1]);
if (a >= 32768)
{
a = a - 32768;
flag = -1;
}
byte[] low = System.BitConverter.GetBytes(b);
byte[] high = System.BitConverter.GetBytes(a);
byte[] abc = new byte[4];
for (int i = 0; i < 2; i++)
{
abc[i] = low[i];
}
for (int i = 0; i < 2; i++)
{
abc[i + 2] = high[i];
}
float result = BitConverter.ToSingle(abc, 0);
return result * flag;
}
public int[] ReadBlockToInt(string Block, int len)
{
object[] buff = null;
PlcData.Instance.PlcReadbyBlock(Block, 0, len, out buff);
int[] dataValue = new int[buff.Length];
for (int i = 0; i < buff.Length; i++)
{
int ivalue = 0;
if (buff[i] != null && buff[i] != DBNull.Value
&& int.TryParse(buff[i].ToString(), out ivalue))
{
dataValue[i] = ivalue;
}
else
{
dataValue[i] = 0;
}
}
return dataValue;
}
public float[] ReadBlockToFloat(string Block, int len)
{
object[] buff = null;
PlcData.Instance.PlcReadbyBlock(Block, 0, len, out buff);
float[] floatdata = new float[buff.Length / 2];
for (int i = 0; i < buff.Length; i = i + 2)
{
object[] bu = new object[2];
bu[0] = buff[i];
bu[1] = buff[i + 1];
floatdata[i / 2] = convertTofloat(bu);
}
return floatdata;
}
}
}