美文网首页
贵航算法整理

贵航算法整理

作者: 向着远方奔跑 | 来源:发表于2018-03-19 21:13 被阅读0次

需求场景
下图为贵航装零件的托盘,一个托盘可以装8个零件,我们按图中顺序对零件进行了排序,零件的各种信息通过RFID读写。托盘到出库口后机械手会按照图中顺序以及一定的数量来抓取零件。
问题
我们如何计算将抓取后的零件的数量信息并且将其写进RFID(转换成RFID可以识别的数据信息)


解决方案
先说明在KEPSERVER中,我们为RFID地址信息建了很多个byte数组或变量,每个数组代表一种信息,下图为RFID数据信息。

我们不需要关心太多东西,就看下数量这个地址描述的信息,即用二进制按顺序来对8个零件信息进行标识,1代表有零件,0代表无零件

接下来用例子来说明:
我们程序首先是从RFID地址中读取其数量,这个都是byte类型的变量,我们读到的都是一个十进制数,假设为数量为:166,那我们得首先将其转换为二进制数,之后,机械手拿走一定数量(假设拿走2个)的零件后,我们按此数量从高位到低位的顺序去掉有 1 的位置,截取剩余的位数并将其转为十进制即可。

代码实现如下:

string a = Convert.ToString(166, 2);//十进制数166转为二进制字符串10100110
Regex rex = new Regex("1");//正则表达式类定义要找的数“1”
var num = rex.Matches(a); //在101001110中找出所有的“1”
string b = a.Substring(num[2].Index);//对10100110从第3个“1”进行截取
int m = Convert.ToInt32(b, 2); //将二进制字符串110转换为十进制6
Console.WriteLine(m);//输出剩余数量6

字符串反转

string s = "123456789a";
char [] arr = s.ToCharArray();         // 转为字符数组
Array.Reverse(arr);                  // 将数组反转
string s2 = new String(arr);         // 将反转后的数组重新转为字符串

问题:将给定的数值转换为二进制,并按低位到高位取给定的数量,最后返回取完后的十进制数

以下代码中source为给定的数值即物料位置信息,index为从低位到高位要取的零件个数

        private static int GetRegexResult(int source, int index)
        {
            var array = Convert.ToString(source, 2);//转二进制
            var d = array.Reverse();
            string str=null;
            foreach (var item in d)
            {
                str = str + item.ToString();
            }
            Regex myRegex = new Regex(@"1");
            MatchCollection mCollection = myRegex.Matches(str);
            var a = mCollection[index].Index;
            var b = str.Substring(a);
            string st = null;
            foreach (var item in b.Reverse())
            {
                st = st + item.ToString();
            }
            int num = array.Length - st.Length;
            for (int i = 0; i < num; i++)
            {
                st = st + "0";
            }
            var c = Convert.ToInt32(st, 2);
            return Convert.ToInt32(st, 2); ;//二进制字符串转十进制整数
        }

相关文章

网友评论

      本文标题:贵航算法整理

      本文链接:https://www.haomeiwen.com/subject/txfmqftx.html