平板篇1,标准平板的识别2020-11-09
2020-11-09 本文已影响0人
new_blash
创建一个静态识别类
//为减少阅读障碍,大部分参数和变量采用中文命名
static class MBCore
{
//四舍五入算法 私有(指只能在这个类里面使用,其他类不能调用此方法)静态返回一个double值的方法
private static double 四舍五入(double value, int decimals)
{
//前面参数填要四舍五入的数,第二个参数是保留几位小数
return Math.Round(value, decimals, MidpointRounding.AwayFromZero);
}
/// <summary>
/// 填入模板编码和数量 PCore("200P2600","10")
/// </summary>
/// <param 编码="P_编码"></param>
/// <param 数量="P_数量"></param>
/// <returns>返回型材型号,型材长度,型材数量,加筋型号,加筋数量,封板型号长度,封板数量</returns>
public static string[] 平面板核心算法(string P_编码, string P_数量)
{
//定义我们需要得到的结果
string P_主型材 = "";
string P_主型材长度 = "";
string P_主型材数量 = "";
string P_加筋型号 = "";
string P_加筋数量 = "";
string P_封板 = "";
string P_封板数量 = "";
string P_Info = "";
string[] reslt = null;//创建结果数组,并赋值为null
//去除编码中的符号和字母
String[] P_param = P_编码.Split(new char[] { '-', 'P', 'J', 'Q', 'C', 'D', 'K', 'L', '/', '(', ')', 'A', 'B', 'E', 'F',
'G', 'H', 'I', 'J', 'M', 'N', 'O', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }, StringSplitOptions.RemoveEmptyEntries);
//去除编码中的数字
String[] sArray1 = P_编码.Split(new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.' });
//去除编码中的空格,然后转化为string类型
String b = String.Join("", sArray1.Select(y => y.ToString()).ToArray());
//把字符串转换成字符数组,这样可以让程序知道编码中每一个字符是什么
char[] c = b.ToCharArray();
//判断平板参数中有几个参数,类似200P500中有2个参数,所以这里判断P_param.Length要大于等于2,并且字符数组中的第一个字符要是P
if (P_param.Length >= 2 && c[0] == 'P')
{
//开始计算主型材数量,如果没特殊情况就是模板的数量,所以这里直接=方法中的P_数量
P_主型材数量 = P_数量;
//计算加筋(加筋中分好多种情况,第一种模板宽度大于100和长度大于500时才需要加筋,否则不需要)
if (float.Parse(P_param[0]) >= 100 && float.Parse(P_param[1]) > 500)
{
//加筋型号=模板宽度参数-两边边框厚度(根据型材来定,一般为16mm)
P_加筋型号 = (float.Parse(P_param[0]) - 16).ToString();
//如果型材长度小于600,基本上只需要一条加强筋,下面是具体算法
if (float.Parse(P_param[1]) < 600)
{//加筋数量= 四舍五入算法(不保留小数) 模板长度/300*模板数量 基本就是1
P_加筋数量 = ((int)四舍五入(float.Parse(P_param[1]) / 300, 0) * int.Parse(P_数量)).ToString();
}
else
{
//加筋数量= 四舍五入算法(不保留小数)( (模板长度/300)-1) *模板数量 (看不懂可以照抄)
P_加筋数量 = (((int)四舍五入((float.Parse(P_param[1]) / 300) - 1, 0)) * int.Parse(P_数量)).ToString();
}
}
else
{//此处就是模板宽度小于100,长度小于500时的状况,不加筋
P_加筋型号 = "不需要";
P_加筋数量 = "不需要";
}
//计算封板
if (float.Parse(P_param[0]) <= 350)
{
//型材长度在内封时,模板长度是多少就是多少
P_主型材长度 = P_param[1] ;
//封板在宽度小于350时采取内封,所以型材是60.5或61,然后长度由于是内封所以要减边框厚度16(根据型材来定)
P_封板 = "60.5内封-长度:" + (float.Parse(P_param[0]) - 16).ToString();
}
else
{
//型材长度在外封时需要减封板厚度16(封板厚度根据型材来定)
P_主型材长度 = (float.Parse(P_param[1]) - 16).ToString();
//封板在宽度大于350时采取外封,所以型材是60.5或61,然后长度是模板的宽度
P_封板 = "65外封-长度:" + P_param[0];
}
//封板一块正常模板只需要2块封板,所以直接模板数量*2就行了
P_封板数量 = (2 * int.Parse(P_数量)).ToString(); ;
//计算主型材(可根据自己家公司的型材来修改)
//P_param[0]是模板的宽度
//P_param[1]是模板的长度
//下面一大段都是计算模板数字异常的方法,一起有很多种状态
if (float.Parse(P_param[0]) > 500)
{
P_Info = "模板宽度超标,请检查编码";
if (float.Parse(P_param[1]) > 3200)
{
P_Info = "模板宽度超标,长度超标,请检查编码";
}
if (float.Parse(P_param[1]) < 100)
{
P_Info = "模板宽度超标,长度过小,请检查编码";
}
}
else if (float.Parse(P_param[0]) < 50)
{
P_Info = "模板宽度过小,请检查编码";
if (float.Parse(P_param[1]) < 100)
{
P_Info = "模板宽度过小,长度过小,请检查编码";
}
if (float.Parse(P_param[1]) > 3200)
{
P_Info = "模板宽度过小,长度超标,请检查编码";
}
}
else if (float.Parse(P_param[1]) > 3200)
{
P_Info = "模板长度超标,请检查编码";
if (float.Parse(P_param[0]) < 50)
{
P_Info = "模板宽度过小,长度超标,请检查编码";
}
if (float.Parse(P_param[0]) > 500)
{
P_Info = "模板宽度超标,长度超标,请检查编码";
}
}
else if (float.Parse(P_param[1]) < 100)
{
P_Info = "模板长度过小,请检查编码";
if (float.Parse(P_param[0]) > 500)
{
P_Info = "模板宽度超标,长度过小,请检查编码";
}
if (float.Parse(P_param[0]) < 50)
{
P_Info = "模板宽度过小,长度过小,请检查编码";
}
}
else
{
//如果都没有上面的情况出现,从此处开始计算主型材的宽度
//计算宽度余50,如果不等于0,那么说明模板不是50倍数的型材,110,120,180,190都有可能
if (float.Parse(P_param[0]) % 50 != 0)
{//型材=模板宽度
P_主型材 = P_param[0];
P_Info = "非50倍数宽度平板";
//计算长度度余50,如果不等于0,那么说明模板的长度宽度都不是50倍数的型材
if (float.Parse(P_param[1]) % 50 != 0)
{
P_Info = "非50倍数长宽平板";
}
}
//同上,只是计算方式反过来了,先计算长度,再计算宽度
else if (float.Parse(P_param[1]) % 50 != 0)
{
P_Info = "非50倍数长度平板";
if (float.Parse(P_param[0]) % 50 != 0)
{
P_Info = "非50倍数长宽平板";
}
}
else
{
//如果长宽都是整数,那么直接使用模板宽度的型材
P_主型材 = P_param[0];
P_Info = "正常平板";
}
}
//将上述计算得到的结果方进结果数组里面
reslt = new string[8] { P_主型材, P_主型材长度, P_主型材数量, P_加筋型号, P_加筋数量, P_封板, P_封板数量, P_Info };
//返回结果数组
return reslt;
}
else
{
//如果上述条件都得不到满足,那么返回一个只有信息的数组
P_Info = "不是平板或者编码错误,请检查";
reslt = new string[8] { P_主型材, P_主型材长度, P_主型材数量, P_加筋型号, P_加筋数量, P_封板, P_封板数量, P_Info };
return reslt;
}
}
}
到此一个简单的平面板识别就好了
使用方法:
ruslt = MBCore.平面板核心算法("200P2600", "10");
if (ruslt != null)
{
foreach(string str in ruslt)
{
Console.Write(str);
}
}
结果如下
![](https://img.haomeiwen.com/i2658412/cebb8e1f06bedac5.png)
到此结束,下一篇为支撑体系种的支撑头(顶托/流星锤)一大堆名字,未完待续.....