예제 #1
0
        private void procData(byte[] buff)
        {
            //if (SystemUnit.getCRC(buff, 0, buff.Length - 2) != (buff[buff.Length - 2] << 8 | buff[buff.Length - 1]))
            //{
            //    Log.WriteLog("CommPort", "ERROR", "【procData】校验失败!接收数据:" + SystemUnit.ToHexString(buff));
            //    return;
            //}


            //读数据模式下回复
            if (buff[1] == 0x03 && Global.runMode == RunMode.READDATA)
            {
                //if (buff[2] == Global.dataCount * 12 && !Global.readDataDone )
                if (buff[2] == Global.dataCount * 12)
                {
                    for (int i = 0; i < Global.dataCount; i++)
                    {
                        int lenth      = (buff[i * 12 + 3] << 8 | buff[12 * i + 4] | buff[12 * i + 5] << 24 | buff[12 * i + 6] << 16);
                        int grosswidth = (buff[12 * i + 7] << 8 | buff[12 * i + 8] | buff[12 * i + 9] << 24 | buff[12 * i + 10] << 16);
                        int done       = (buff[12 * i + 11] << 8 | buff[12 * i + 12] | buff[12 * i + 13] << 24 | buff[12 * i + 14] << 16);
                        if (lenth == Global.procData[i].Lenth &&
                            grosswidth == Global.procData[i].GrossWidth &&
                            done != Global.procData[i].Done)
                        {
                            int    undo = Global.procData[i].GrossWidth - done;
                            string sql  = "update working set done = " + done.ToString() + " ,undone = " + undo.ToString() + " where id = " + Global.procData[i].id;
                            Global.mysqlHelper.ExecuteSql(sql);
                            Global.procData[i].Done = done;
                            Global.dataIsChanged    = true;
                            Log.WriteLog("CommPort", "Info", sql);
                        }
                    }
                    if (Global.readDataDone)
                    {
                        Log.WriteLog("CommPort", "Info", "PostMessage:READDONE");
                        SystemUnit.PostMessage(SystemUnit.HWND_BROADCAST, SystemUnit.WM_READBACK, (int)ReturnResult.SUCCESS, (int)DataType.READDONE);
                    }
                    else
                    {
                        Log.WriteLog("CommPort", "Info", "PostMessage:READCONTINUE");
                        SystemUnit.PostMessage(SystemUnit.HWND_BROADCAST, SystemUnit.WM_READBACK, (int)ReturnResult.SUCCESS, (int)DataType.READCONTINUE);
                    }
                }
                else if (buff[2] == (30 - Global.dataCount) * 12 && Global.readDataDone)
                {
                    int count = 30 - Global.dataCount;
                    for (int i = 0; i < count; i++)
                    {
                        int lenth      = (buff[i * 12 + 3] << 8 | buff[12 * i + 4] | buff[12 * i + 5] << 24 | buff[12 * i + 6] << 16);
                        int grosswidth = (buff[12 * i + 7] << 8 | buff[12 * i + 8] | buff[12 * i + 9] << 24 | buff[12 * i + 10] << 16);
                        int done       = (buff[12 * i + 11] << 8 | buff[12 * i + 12] | buff[12 * i + 13] << 24 | buff[12 * i + 14] << 16);
                        if (lenth == Global.procData[Global.dataCount + i].Lenth &&
                            grosswidth == Global.procData[Global.dataCount + i].GrossWidth &&
                            done != Global.procData[Global.dataCount + i].Done)
                        {
                            string sql = "update workorder set done = " + done.ToString() + " where id = " + Global.procData[Global.dataCount + i].id;
                            Global.mysqlHelper.ExecuteSql(sql);
                            Global.procData[Global.dataCount + i].Done = done;
                            Global.dataIsChanged = true;
                            Log.WriteLog("CommPort", "Info", sql);
                        }
                    }
                    SystemUnit.PostMessage(SystemUnit.HWND_BROADCAST, SystemUnit.WM_READBACK, (int)ReturnResult.SUCCESS, (int)DataType.READDONE);
                }


                //                 if(buff[2] == Global.dataCount*2)
                //                 {
                //                     for(int i =0;i< Global.dataCount; i++)
                //                     {
                //                         Global.procData[i].pin = (short)(buff[3 + 2 * i] << 8 | buff[3 + 2 * i + 1]);
                //                     }
                //                     SystemUnit.PostMessage(SystemUnit.HWND_BROADCAST, SystemUnit.WM_READBACK, (int)ReturnResult.SUCCESS, (int)DataType.PIN);
                //                 }
            }
            else if (buff[1] == 0x03 && Global.runMode == RunMode.READSTATUS && buff[2] == 4)
            {
                //buff[4] 第8位运行状态  buff[6]第3位故障状态 第7位 运行模式
                int status = (buff[3] << 8 | buff[6]);
                SystemUnit.PostMessage(SystemUnit.HWND_BROADCAST, SystemUnit.WM_READBACK, status, (int)DataType.STATUS);
            }
            else if (Global.runMode == RunMode.WRITE && buff[1] == 0x10)
            {
                int offset = buff[2] << 8 | buff[3];
                if (offset == Global.pinOffset)
                {
                    SystemUnit.PostMessage(SystemUnit.HWND_BROADCAST, SystemUnit.WM_WRITEBACK, (int)ReturnResult.SUCCESS, (int)DataType.PIN);
                }
                else if (offset == Global.offset)
                {
                    if (Global.isSendAll)
                    {
                        SystemUnit.PostMessage(SystemUnit.HWND_BROADCAST, SystemUnit.WM_WRITEBACK, (int)ReturnResult.SUCCESS, (int)DataType.WRITEDONE);
                    }
                    else
                    {
                        SystemUnit.PostMessage(SystemUnit.HWND_BROADCAST, SystemUnit.WM_WRITEBACK, (int)ReturnResult.SUCCESS, (int)DataType.WRITECONTINUE);
                    }
                }
                else if (offset == Global.offset + Global.dataCount * 6)
                {
                    SystemUnit.PostMessage(SystemUnit.HWND_BROADCAST, SystemUnit.WM_WRITEBACK, (int)ReturnResult.SUCCESS, (int)DataType.WRITEDONE);
                }
            }
        }