Esempio n. 1
0
        private void RecvDataDecode(Byte inData)
        {
            // 逐个字节进行解析
            switch (recvStatus)
            {
            case RECV_STATUS.STATE_IDLE:
                if (inData == 0xAA)
                {
                    recvStatus = RECV_STATUS.STATE_GOT_HEAD1; // 获得了 HEAD1
                    commState  = COMM_STATE.RECVING;          // 状态转变为正在接收
                }
                break;

            case RECV_STATUS.STATE_GOT_HEAD1:
                if (inData == 0x55)
                {
                    recvStatus    = RECV_STATUS.STATE_GOT_HEAD2; // 获得了 HEAD2
                    RecvDataIndex = 0;
                }
                else
                {
                    recvStatus = RECV_STATUS.STATE_IDLE;    // 错误,返回初始状态
                }
                break;

            case RECV_STATUS.STATE_GOT_HEAD2:
                recvBuff[RecvDataIndex + 2] = inData;
                RecvDataIndex++;
                if (RecvDataIndex >= PayloadDataNum)
                {
                    recvStatus    = RECV_STATUS.STATE_GOT_DATA; // 获得了 数据
                    RecvDataIndex = 0;
                }
                break;

            case RECV_STATUS.STATE_GOT_DATA:
                if (inData == 0xA5)
                {
                    recvStatus = RECV_STATUS.STATE_GOT_END1;    // 获得了 END1
                }
                else
                {
                    recvStatus = RECV_STATUS.STATE_IDLE;    // 错误,返回初始状态
                }
                break;

            case RECV_STATUS.STATE_GOT_END1:
                if (inData == 0x5A)
                {
                    recvStatus = RECV_STATUS.STATE_IDLE;    // 重新恢复到IDLE状态
                    // 成功获得了所有数据
                    //recvBuff[0]
                    commState = COMM_STATE.IDLE;                                    // 成功收到数据,切换为通信空闲状态
                    //
                    GenericOp.xPos       = 5 * BitConverter.ToInt16(recvBuff, 4);   // 转化为 mm 单位
                    GenericOp.zPos       = 5 * BitConverter.ToInt16(recvBuff, 6);   // 转化为 mm 单位
                    GenericOp.xPos_servo = -5 * BitConverter.ToInt16(recvBuff, 8);  // 转化为 mm 单位
                    GenericOp.zPos_servo = -5 * BitConverter.ToInt16(recvBuff, 10); // 转化为 mm 单位
                    gtryState            = BitConverter.ToUInt32(recvBuff, 12);     // 龙门机构状态
                    GenericOp.weight     = (int)BitConverter.ToInt16(recvBuff, 16); // 载重量

                    // 龙门机构的急停状态的获取
                    if (SerialWireless.GetGtryState(SerialWireless.GTRY_STATE_ESTOP_STATE))
                    {
                        gtry_estop_state_cntr++;
                        if (gtry_estop_state_cntr % 20 == 0) // 每20包数据,检查一下PLC的急停状态
                        {
                            GenericOp.EStop_Soft = true;     // 根据 龙门急停状态 给  软急停标识  赋值,只赋值10次就不重复赋值。为了避免反复被刷新。
                        }
                    }
                    else
                    {
                        //gtry_estop_state_cntr = 0;
                    }

                    // 龙门原点回归请求
                    if (SerialWireless.GetGtryState(SerialWireless.GTRY_STATE_REQUEST_ZRN))
                    {
                        gtry_request_zrn_cntr++;
                        if (gtry_request_zrn_cntr > 5)
                        {
                            gtry_request_zrn_cntr = 5;
                            GenericOp.RequestZRN  = true;   // 请求原点回归标识  置位
                        }
                    }
                    else
                    {
                        gtry_request_zrn_cntr = 0;
                        GenericOp.RequestZRN  = false;
                    }
                }
                else
                {
                    recvStatus = RECV_STATUS.STATE_IDLE;    // 错误,返回初始状态
                }
                break;
            }
        }
Esempio n. 2
0
        private const int PayloadDataNum = RecvDataNum - 4; // 除去 AA 55 A5 5A头4字节后的有效数据长度。

        private void RecvDataDecode(Byte inData)
        {
            // 逐个字节进行解析
            switch (recvStatus)
            {
            case RECV_STATUS.STATE_IDLE:
                if (inData == 0xAA)
                {
                    recvStatus = RECV_STATUS.STATE_GOT_HEAD1; // 获得了 HEAD1
                    commState  = COMM_STATE.RECVING;          // 状态转变为正在接收
                }
                break;

            case RECV_STATUS.STATE_GOT_HEAD1:
                if (inData == 0x55)
                {
                    recvStatus    = RECV_STATUS.STATE_GOT_HEAD2; // 获得了 HEAD2
                    RecvDataIndex = 0;
                }
                else
                {
                    recvStatus = RECV_STATUS.STATE_IDLE;    // 错误,返回初始状态
                }
                break;

            case RECV_STATUS.STATE_GOT_HEAD2:
                recvBuff[RecvDataIndex + 2] = inData;
                RecvDataIndex++;
                if (RecvDataIndex >= PayloadDataNum)
                {
                    recvStatus    = RECV_STATUS.STATE_GOT_DATA; // 获得了 数据
                    RecvDataIndex = 0;
                }
                break;

            case RECV_STATUS.STATE_GOT_DATA:
                if (inData == 0xA5)
                {
                    recvStatus = RECV_STATUS.STATE_GOT_END1;    // 获得了 END1
                }
                else
                {
                    recvStatus = RECV_STATUS.STATE_IDLE;    // 错误,返回初始状态
                }
                break;

            case RECV_STATUS.STATE_GOT_END1:
                if (inData == 0x5A)
                {
                    recvStatus = RECV_STATUS.STATE_IDLE;    // 重新恢复到IDLE状态
                    // 成功获得了所有数据
                    //recvBuff[0]
                    commState = COMM_STATE.RECV;    // 成功收到数据,切换为通信接受状态

                    //获取水槽温度
                    GenericOp.temperature1 = BitConverter.ToInt16(recvBuff, 2) / 10;    // 1号水槽温度
                    GenericOp.temperature2 = BitConverter.ToInt16(recvBuff, 4) / 10;    // 2号水槽温度
                    GenericOp.temperature3 = BitConverter.ToInt16(recvBuff, 6) / 10;    // 3号水槽温度

                    GenericOp.temperature41 = BitConverter.ToInt16(recvBuff, 8) / 10;   //4号炉子上温区温度
                    GenericOp.temperature42 = BitConverter.ToInt16(recvBuff, 10) / 10;  //4号炉子下温区温度

                    GenericOp.temperature51 = BitConverter.ToInt16(recvBuff, 12) / 10;  //5号炉子上温区温度
                    GenericOp.temperature52 = BitConverter.ToInt16(recvBuff, 14) / 10;  //5号炉子下温区温度

                    GenericOp.temperature61 = BitConverter.ToInt16(recvBuff, 16) / 10;  //6号炉子上温区温度
                    GenericOp.temperature62 = BitConverter.ToInt16(recvBuff, 18) / 10;  //6号炉子下温区温度

                    GenericOp.temperature71 = BitConverter.ToInt16(recvBuff, 20) / 10;  //7号炉子上温区温度
                    GenericOp.temperature72 = BitConverter.ToInt16(recvBuff, 22) / 10;  //7号炉子上温区温度

                    GenericOp.temperature111 = BitConverter.ToInt16(recvBuff, 24) / 10; //11号炉子上温区温度
                    GenericOp.temperature112 = BitConverter.ToInt16(recvBuff, 26) / 10; //11号炉子下温区温度
                    GenericOp.temperature121 = BitConverter.ToInt16(recvBuff, 28) / 10; //12号炉子上温区温度
                    GenericOp.temperature122 = BitConverter.ToInt16(recvBuff, 30) / 10; //12号炉子下温区温度
                    GenericOp.temperature131 = BitConverter.ToInt16(recvBuff, 32) / 10; //13号炉子温度
                }
                else
                {
                    recvStatus = RECV_STATUS.STATE_IDLE;    // 错误,返回初始状态
                }
                break;
            }
        }
Esempio n. 3
0
        private void RecvDataDecode(Byte inData)
        {
            // 逐个字节进行解析
            switch (recvStatus)
            {
            case RECV_STATUS.STATE_IDLE:
                if (inData == 0xAA)
                {
                    recvStatus = RECV_STATUS.STATE_GOT_HEAD1; // 获得了 HEAD1
                    commState  = COMM_STATE.RECVING;          // 状态转变为正在接收
                }
                break;

            case RECV_STATUS.STATE_GOT_HEAD1:
                if (inData == 0x55)
                {
                    recvStatus    = RECV_STATUS.STATE_GOT_HEAD2; // 获得了 HEAD2
                    RecvDataIndex = 0;
                }
                else
                {
                    recvStatus = RECV_STATUS.STATE_IDLE;    // 错误,返回初始状态
                }
                break;

            case RECV_STATUS.STATE_GOT_HEAD2:
                recvBuff[RecvDataIndex + 2] = inData;
                RecvDataIndex++;
                if (RecvDataIndex >= PayloadDataNum)
                {
                    recvStatus    = RECV_STATUS.STATE_GOT_DATA; // 获得了 数据
                    RecvDataIndex = 0;
                }
                break;

            case RECV_STATUS.STATE_GOT_DATA:
                if (inData == 0xA5)
                {
                    recvStatus = RECV_STATUS.STATE_GOT_END1;    // 获得了 END1
                }
                else
                {
                    recvStatus = RECV_STATUS.STATE_IDLE;    // 错误,返回初始状态
                }
                break;

            case RECV_STATUS.STATE_GOT_END1:
                if (inData == 0x5A)
                {
                    recvStatus = RECV_STATUS.STATE_IDLE;    // 重新恢复到IDLE状态
                    // 成功获得了所有数据
                    //recvBuff[0]
                    commState = COMM_STATE.IDLE;    // 成功收到数据,切换为通信空闲状态
                    //
                    // X00 - X15
                    stoveLidState[0] = (STOVE_LID_STATE)(recvBuff[2] & 0x3);        // 1#炉盖 X0 - X01
                    stoveLidState[1] = (STOVE_LID_STATE)((recvBuff[2] >> 2) & 0x3); // 2#炉盖
                    stoveLidState[2] = (STOVE_LID_STATE)((recvBuff[2] >> 4) & 0x3); // 3#炉盖
                    stoveLidState[3] = (STOVE_LID_STATE)((recvBuff[2] >> 6) & 0x3); // 4#炉盖

                    stoveLidState[4] = (STOVE_LID_STATE)(recvBuff[3] & 0x3);        // 5#炉盖
                    stoveLidState[5] = (STOVE_LID_STATE)((recvBuff[3] >> 2) & 0x3); // 6#炉盖
                    stoveLidState[6] = (STOVE_LID_STATE)((recvBuff[3] >> 4) & 0x3); // 7#炉盖
                    stoveLidState[7] = (STOVE_LID_STATE)(recvBuff[4] & 0x3);        //后门
                    stoveLidState[8] = (STOVE_LID_STATE)((recvBuff[4] >> 2) & 0x3); //前门

                    // X30 自动 X31手动
                    //if ((recvBuff[5] & 0x01) == 0)
                    //{
                    //automode_change_cntr_manual = 0;

                    /*
                     * automode_change_cntr_auto++;
                     * if (automode_change_cntr_auto < 10)
                     * {
                     *  GenericOp.AutoMode = true;// 自动模式
                     * }
                     * else
                     * {
                     *  automode_change_cntr_auto = 10;
                     * }*/
                    // }
                    //   else
                    // {
                    //automode_change_cntr_auto = 0;
                    //    automode_change_cntr_manual++;
                    //   if (automode_change_cntr_manual < 10)
                    //   {
                    //        GenericOp.AutoMode = false;// 手动模式
                    //    }
                    //    else
                    //     {
                    //       automode_change_cntr_manual = 10;
                    //    }
                    //   }

                    // 手动控制柜用于控制龙门的前进、后退、上下、抓放,对应PLC的X41 - X46
                    GenericOp.manual_gtry_action = GenericOp.GTRY_ACTION_TYPE.NONE;    // 初始为不做任何动作
                    //if ((recvBuff[6] & 0x02) !=0) GenericOp.manual_gtry_action = GenericOp.GTRY_ACTION_TYPE.FORWARD;      // X41
                    //else if ((recvBuff[6] & 0x04) !=0) GenericOp.manual_gtry_action = GenericOp.GTRY_ACTION_TYPE.BAKWARD; // X42
                    //else if ((recvBuff[6] & 0x08) != 0) GenericOp.manual_gtry_action = GenericOp.GTRY_ACTION_TYPE.UP;        // X43
                    //else if ((recvBuff[6] & 0x10) != 0) GenericOp.manual_gtry_action = GenericOp.GTRY_ACTION_TYPE.DOWN;// X44
                    //else if ((recvBuff[6] & 0x20) != 0) GenericOp.manual_gtry_action = GenericOp.GTRY_ACTION_TYPE.CLAMP;// X45
                    //else if ((recvBuff[6] & 0x40) != 0) GenericOp.manual_gtry_action = GenericOp.GTRY_ACTION_TYPE.CLAMP_RELAX;// X46

                    //GenericOp.EStop_Manual = ((recvBuff[6] >> 7) == 0);// X47  急停信号
                }
                else
                {
                    recvStatus = RECV_STATUS.STATE_IDLE;    // 错误,返回初始状态
                }
                break;
            }
        }