/// <summary>
        ///
        /// </summary>
        /// <param name="side"></param>
        /// <param name="lcode">todo: describe lcode parameter on AddRobotRollQ</param>
        /// <returns></returns>
        private static RollPosition AddRobotRollQ(string lcode, string side)
        {
            var label = LableCode.QueryByLCode(lcode);

            if (label == null)
            {
                onlog?.Invoke($"!{side} {lcode}在数据库中查不到", LogType.ROLL_QUEUE);
                return(null);
            }
            if (label.Status >= (int)LableState.OnPanel)
            {
                onlog?.Invoke($"!{side} {label.LCode}已在板上,未加入机器人队列,交地{label.ToLocation}.", LogType.ROLL_QUEUE);
                return(null);
            }
            if (label.CoordinatesIsEmpty())
            {
                onlog?.Invoke($"!{side} {label.LCode}未算位置,未加入机器人队列,交地{label.ToLocation}.", LogType.ROLL_QUEUE);
                return(null);
            }

            var pinfo = LableCode.GetPanel(label.PanelNo);
            var state = FrmMain.GetPanelState(label, pinfo);

            var x  = label.Cx;
            var y  = label.Cy;
            var z  = label.Cz + RollPosition.Z_START;
            var rz = label.Crz;

            if (rz == 0)
            {
                y = RollPosition.GetToolOffSet(y);
            }
            else
            {
                x = RollPosition.GetToolOffSet(x);
            }

            if (x + y > 0)
            {
                if (rz == 0)
                {
                    rz = -180;
                }
            }
            else
            {
                if (rz != 0)
                {
                    rz = rz * -1;
                }
            }

            if (RollPosition.robotRSidePanel.Contains(label.RealLocation))
            {
                rz = rz + 180;
            }

            var roll = new RollPosition(label, side, state, x, y, z, rz);

            onlog?.Invoke($"来源: {nameof(AddRobotRollQ)}, {side} {label.LCode} 名义交地: {label.ToLocation}, 真实交地: {label.RealLocation}, {Enum.GetName(typeof(PanelState), state)}", LogType.ROLL_QUEUE);

            return(roll);
        }