我正试图在Windows XP机器上使用C#.net 2.0中的以下代码从Sartorius称重秤型号No BS2202S读取重量:
public string readWeight()
{
string lastError = "";
string weightData = "";
SerialPort port = new SerialPort();
port.PortName = "COM1";
port.BaudRate = 9600;
port.Parity = Parity.Even;
port.DataBits = 7;
port.StopBits = StopBits.One;
port.Handshake = Handshake.RequestToSend;
try {
port.Open();
weightData = port.ReadExisting();
if(weightData == null || weightData.Length == 0) {
lastError = "Unable to read weight. The data returned form weighing machine is empty or null.";
return lastError;
}
}
catch(TimeoutException) {
lastError = "Operation timed out while reading weight";
return lastError;
}
catch(Exception ex) {
lastError = "The following exception occurred while reading data." + Environment.NewLine + ex.Message;
return lastError;
}
finally {
if(port.IsOpen == true) {
port.Close();
port.Dispose();
}
}
return weightData;
}
我可以使用Hyperterminal应用程序(Windows XP附带)读取重量,并使用上面给出的相同串口参数打开端口。但是从上面的代码片段中,我可以打开端口,每次返回空数据 我尝试使用给定this Stack Overflow thread的代码打开端口,但它仍返回空数据 请帮助我。
答案 0 :(得分:1)
我知道现在可能已经老了......但是为了将来参考...
看看握手。有硬件握手和软件握手。你的问题可能是 - 所以你需要尝试两者。
对于硬件握手,您可以尝试:
mySerialPort.DtrEnable = True
mySerialPort.RtsEnable = True
请注意
mySerialPort.Handshake = Handshake.RequestToSend
我不认为设置一些串行设备可能需要的DTR线
软件握手也称为XON / XOFF,可以用
设置 mySerialPort.Handshake = Handshake.XOnXOff
OR
mySerialPort.Handshake = Handshake.RequestToSendXOnXOff
您可能仍需要启用DTR
当其他所有方法都失败时 - 别忘了检查所有这些握手组合。
答案 1 :(得分:0)
由于其他人将来可能会遇到此问题,因此握手是一个可选择的选项。
在大多数余额中,您将看到Software,Hardware 2 char,Hardware 1 char的选项。 Sartorius天平的默认设置是Hardware 2 Char。我通常建议更改为软件。
此外,如果它一起停止工作,通常可以通过使用9 1 1参数默认单位来修复它。然后重置通信设置。
有关如何更改设置的示例,请参见本页手册:
http://www.dataweigh.com/products/sartorius/cpa-analytical-balances/