Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 串行端口:与设备不同的答案_C#_C++_Qt_Serial Port - Fatal编程技术网

C# 串行端口:与设备不同的答案

C# 串行端口:与设备不同的答案,c#,c++,qt,serial-port,C#,C++,Qt,Serial Port,我在翻译代码方面有点问题。我试着让一些继电器(设置在定制的PCB上)在我按下按钮时打开和关闭。 问题是我编写了执行该操作的代码(因此它根据我的操作打开和关闭),但我还需要从机器上读取答案。重点是我有一个较旧版本的代码,用C语言编写,当通过程序发送代码时,我得到了OK答案,而使用C++编写的代码的新版本,我只得到了答案的第一个字母。 我使用串行端口监视器来观察机器发送回来的内容,得到了相同的结果(不像我的代码只读取一个字母)。所以,重点是:C++代码得到完整的答案(“AWOK11”),而C++代码

我在翻译代码方面有点问题。我试着让一些继电器(设置在定制的PCB上)在我按下按钮时打开和关闭。 问题是我编写了执行该操作的代码(因此它根据我的操作打开和关闭),但我还需要从机器上读取答案。重点是我有一个较旧版本的代码,用C语言编写,当通过程序发送代码时,我得到了OK答案,而使用C++编写的代码的新版本,我只得到了答案的第一个字母。 我使用串行端口监视器来观察机器发送回来的内容,得到了相同的结果(不像我的代码只读取一个字母)。所以,重点是:C++代码得到完整的答案(“AWOK11”),而C++代码只得到它的第一个字母(“A”)。 在SharpDevelop中完成的C代码和Qt创建者的C++代码。 C++代码:

QSerialPort portverf;
portverf.setBaudRate(QSerialPort::Baud9600);
portverf.setDataBits(QSerialPort::Data8);
portverf.setParity(QSerialPort::NoParity);
portverf.setStopBits(QSerialPort::OneStop);
portverf.setFlowControl(QSerialPort::NoFlowControl);
portverf.setPortName("COM41");
portverf.open();
port.write(command);
QString result = portverf.readAll();

提前感谢您的帮助

该方法从设备读取所有可用数据。如果只有
A
可用,它将返回
A
。它不会等待其他字符。由于您在写入后立即读取,因此只能读取第一个字符。

我有4台不同的机器连接到PC。我正在尝试让程序单独识别每个设备。你建议我做什么?是否应该在程序开始时发送命令,然后在以后读取,这样做呢?@Alex因为你没有流量控制,这个问题可能有点棘手。正如您所说,添加延迟可以工作(在9600波特时,每个字节必须等待至少1ms)。你必须考虑设备可能的反应时间。另一种方式是定长消息;如果你需要6个字节,你可以一直读到6个字节。您还可以有一个结束标记,例如,读取直到您得到一个
\0
。你决定什么对你最好。实际上,设备在发送命令后读取时只返回一个字节。我将创建一个配置文件,其中包含所有端口以及它们的分配方式,如果端口不相同,程序将再次搜索它们。这就像是一次性设置。我认为这是最好(也是最简单)的解决方案。非常感谢:D