0

您好,我是 C# 和套接字的新手。我正在使用一个代码,其中加速度计的一些值使用套接字传到我的电脑上。这些值被存储为代码中的缓冲区。该代码正在获取样本数量并计算与特定样本相对应的传感器值。保存在 rxData 中的值 arw。并且样本数是代码中的rxLength。socketReceived 函数已在线程中传递。Thread thread= new Thread(threadStart(socketReveived()); Thread.Start(); 我怎样才能得到信号进入我的电脑的持续时间作为 rxData 和采样频率。此外,如何设置用户定义的采样频率为信号?TIA 为您提供帮助

private int[] rxData = new int[0xFFFFFF];

private int rxLength = 0;

public void socketReceived() 
{       
    byte[] rxBuffer = new byte[0xFFFFFF];
    
    int startLen = 0, dataLen = 0;

    while (isConnected) 
    {
        try
        {          
            startLen = getSeqeunce(START_CODE);
    
            Console.WriteLine("startLen:" + startLen);
    
            if (startLen != -1)
            {
                Console.WriteLine("rx start");
                this.Invoke(new Function(updateTextBox), "Measuring");
                readFully(rxBuffer, 4); 
                dataLen = (rxBuffer[0] << 24) + (rxBuffer[1] << 16) + (rxBuffer[2] << 8) + rxBuffer[3];
                //rxLength = dataLen / 2;
                rxLength  = Convert.ToInt32(tbIP1.Text);

                Console.WriteLine("rxLength:" + rxLength);
                readFully(rxBuffer, dataLen);

                this.Invoke(new Function(updateTextBox), "Converting");
                for (int i = 0; i < rxLength; i++)
                {                      
                    rxData[i] = (short)((rxBuffer[i * 2]) + rxBuffer[i * 2 + 1] * 256);
                        
                    Console.WriteLine("{0}: {1}", i, rxData[i]);

                    curveSensor.AddPoint(i, rxData[i]);
                }
    
                this.Invoke(new Function(updateTextBox), "Displaying"); 
    
                zgSensor.AxisChange();
    
                zgSensor.Invalidate();
    
                this.Invoke(new Function(updateTextBox), "Measurement completed"); 
    
                Console.WriteLine("rx end");
                    
                this.Invoke(new Action(delegate ()
                {
                    btnStart.Enabled = true;
                    btnSave.Enabled = true;
                    btnCustom.Enabled = true;
                }));
    
                isComplete = true;
            }
        }
        catch
        {
        }
    }
}

private void updateTextBox(string str)
{
    lbGraphMessage.Text = str;
}

private void sendPacket(byte[] data, int size) 
{
    byte[] buffer = new byte[256];
    
    int checksum = 0, index = 0;

    try
    {
        if (isConnected)
        {
            buffer[index++] = 0x42;
            buffer[index++] = 0x4D;
            buffer[index++] = (byte)((size + 2) >> 8); 
            buffer[index++] = (byte)((size + 2) & 0xFF);
            for (int i = 0; i < size; i++)
            {
                checksum += data[i];
                buffer[index++] = data[i];
            }
            buffer[index++] = (byte)(checksum >> 8);
            buffer[index++] = (byte)(checksum & 0xFF);
            for (int i = 0; i<index; i++)
        {
            Console.Write("{0:X} ", buffer[i]);
            Console.Write("\n");
            ns.Write(buffer, 0, index);
        }
    }
    catch (Exception ex)
    {
        //MessageBox.Show(ex.Message);
    }
}

private void readFully(byte[] buffer, int size) 
{
    int offset = 0;
    int readBytes;
    do
    {
        readBytes = ns.Read(buffer, offset, size - offset);
        offset += readBytes;
    } while ((readBytes > 0) && (offset < size));
}

private int getSeqeunce(int[] sequence) 
{
    int seqIndex = 0; 
    int c;
    for (int i = 0; i < 1024; i++) 
    {
        c = ns.ReadByte();

        //Console.WriteLine("readbyte:" + c);
        if (c == sequence[seqIndex])
        { 
            seqIndex++;
            if (seqIndex == sequence.Length) return i + 1;
        }
        else
        {
            seqIndex = 0;
        }
        return -1;
    }
}
4

0 回答 0