Esempio n. 1
0
 public void AddPendingChannel(WaitingForConfirm item)
 {
     lock (locker)
     {
         m_PendingChannelList.Add(item);
     }
 }
        private void SendData(string strUserPutIn, int iRowsIndex)
        {
            float fUserIn = 0;

            if (!float.TryParse(strUserPutIn, out fUserIn))
            {
                WriteRichBox("发送失败:输入电压不正确!\r\n");
                return;
            }
            byte[] senderbuff = new byte[ONE_FRAME_BYTES_WITH_TWO_PRE_BYTES];
            senderbuff[0] = 0xFE;
            senderbuff[1] = 0xFE;
            senderbuff[2] = 0x68; // start byte

            // channal
            senderbuff[3] = Convert.ToByte(iRowsIndex + 1);

            // control byte
            // bit7:0b  data from computer to meu
            // bit6 bit5: 00b set voltage
            byte byControl = 0;

            senderbuff[4] = byControl;


            // DATA
            Byte data_integer = Convert.ToByte(fUserIn);

            senderbuff[5] = data_integer;
            float data_decimal        = (fUserIn - (float)data_integer);
            int   data_decimal_to_int = (int)(data_decimal * 0xFFFFFF);

            senderbuff[6] = (Byte)((data_decimal_to_int & 0xFF0000) >> 16);
            senderbuff[7] = (Byte)((data_decimal_to_int & 0x00FF00) >> 8);
            senderbuff[8] = (Byte)((data_decimal_to_int & 0x0000FF));

            // CS
            byte byCS = 0;

            for (int i = 2; i <= ONE_FRAME_BYTES_WITH_TWO_PRE_BYTES - 2 - 1; ++i)
            {
                byCS += senderbuff[i];
            }
            senderbuff[9] = byCS;

            // stop
            senderbuff[10] = 0x16;

            // send data
            cSerialPort.Write(senderbuff, 0, ONE_FRAME_BYTES_WITH_TWO_PRE_BYTES);

            // set pending channel
            byte[] VoltageByte = new byte[4];
            VoltageByte[0] = senderbuff[5];
            VoltageByte[1] = senderbuff[6];
            VoltageByte[2] = senderbuff[7];
            VoltageByte[3] = senderbuff[8];
            WaitingForConfirm cSendingChannel = new WaitingForConfirm(senderbuff[3], VoltageByte);

            // add the pending channel to list
            //cPendingChannel.Add(cSendingChannel);
            WaitingForConfirmList.Instance().AddPendingChannel(cSendingChannel);

            SetRowSending(iRowsIndex, RowState.ROW_STATE_SENDING, "ThreadSending");


            // set log
            WriteRichBox(DateTime.Now.ToLongTimeString() + ": 通道【" + senderbuff[3].ToString() + "】发送->  电压【" + strUserPutIn + "】\r\n" + ChangeArrayToHexString(senderbuff) + "\r\n\r\n");



            //test
            senderbuff[4] = 0xC0;
            byCS          = 0;
            for (int i = 2; i <= ONE_FRAME_BYTES_WITH_TWO_PRE_BYTES - 2 - 1; ++i)
            {
                byCS += senderbuff[i];
            }
            senderbuff[9] = byCS;
            cSerialPort.Write(senderbuff, 0, ONE_FRAME_BYTES_WITH_TWO_PRE_BYTES);
        }