您好,我是 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;
}
}