SerialDevice C#创建自定义起始字节

时间:2018-05-19 21:20:58

标签: c# serial-communication

所以我正在尝试创建一个C#代码,以便与连接到我的PC的串行设备进行通信。但是该设备需要一个Start Byte来与我的代码通信。我尝试在创建SerialDevice类后发送它,然后我得到它的OutputStream,但设备根本就没有响应。

该设备的DeviceInformation表示它无法配对。我认为这是因为DeviceInformation类请求与我的设备进行通信,并且它没有响应,因为它缺少Start字节。

我可以在此类旁边使用我的SerialDevice创建自定义连接吗?

或者我有办法在SerialDevice类的声明中配置起始字节吗?

2 个答案:

答案 0 :(得分:0)

起始字节为:STX,0x02。

如果您需要更多帮助,请详细说明您迄今为止所做的工作!

答案 1 :(得分:0)

我正在尝试集成的设备要求起始字节如下:

#define FINGERPRINT_STARTCODE 0xEF01

这是设备文档中的C代码。 由于我正在尝试将其迁移到C#,因此我无法更改起始字节,因此设备无法响应我的C#代码。

这是我声明SerialDevice:

string aqs = SerialDevice.GetDeviceSelector("UART0");

            var dis = await DeviceInformation.FindAllAsync(aqs);

            UartPort = await SerialDevice.FromIdAsync(dis[0].Id);

            UartPort.WriteTimeout = TimeSpan.FromMilliseconds(1000);   
            UartPort.ReadTimeout = TimeSpan.FromMilliseconds(1000);    
            UartPort.BaudRate = 9600;
            UartPort.Parity = SerialParity.None;
            UartPort.StopBits = SerialStopBitCount.One;
            UartPort.DataBits = 8;

            DataWriterObject = new DataWriter(UartPort.OutputStream);
            DataReaderObject = new DataReader(UartPort.InputStream);

然后我尝试使用我的起始字节通过DataWriter发送数据:

 private async Task<int> EnviarPacote(Package package)
    {
        int sum;
        DataWriterObject.WriteBytes(package.start);
        DataWriterObject.WriteByte(package.address[0]);
        DataWriterObject.WriteByte(package.address[1]);
        DataWriterObject.WriteByte(package.address[2]);
        DataWriterObject.WriteByte(package.address[3]);
        DataWriterObject.WriteInt16(package.type);
        int tamanho = 12;
        DataWriterObject.WriteInt32(tamanho);
        //DataWriterObject.WriteBytes(package.length);
        sum = tamanho + package.type;
        foreach (var dado in package.data)
        {
            DataWriterObject.WriteByte(dado);

        }
        DataWriterObject.WriteInt32(12);
        await UartPort.OutputStream.WriteAsync(DataWriterObject.DetachBuffer());
        return sum;
    }

它只是不起作用。

我想我应该在我的SerialDevice声明中更改一些内容,以便该类知道如何与我的设备通信。但我不知道如何。