这是我第一次在C#应用程序中集成Serial到USB,所以请原谅我这听起来像是一个愚蠢的问题。 我有IV级激光。我正在将它集成到我的C#应用程序中。 我的问题是我可以连接到激光器,我可以将数据发送到激光器,但我不能从激光器获得任何回报。
private void Bt_Start_Click(object sender, EventArgs e)
{
SerialPort serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
serialPort.Handshake = Handshake.XOnXOff;
serialPort.DtrEnable = true;
serialPort.RtsEnable = true;
serialPort.ReadTimeout = 500;
serialPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
ConenctToLaser("COM3", serialPort);
}
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
byte[] buffer = new byte[sp.BytesToRead];
int bytesRead = sp.Read(buffer, 0, buffer.Length);
var message = Encoding.ASCII.GetString(buffer, 0, bytesRead);
MessageBox.Show(message);
}
public void ConenctToLaser(string port, SerialPort serialPort)
{
StreamReader openfile = new StreamReader(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\commands.txt");
if (serialPort.IsOpen == false)
{
serialPort.Open();
string command = "";
command = openfile.ReadLine();
while(command!=null)
{
byte[] buffer = Encoding.ASCII.GetBytes(command);
serialPort.Write(buffer, 0, buffer.Length);
command = openfile.ReadLine();
}
}
}
commands.txt包含我的命令。哪个是 \ r MTT \ r MCM \ r SPR300 \ r 在不同的线上 当我将这些命令发送到激光器时,我所得到的就是回声。所以实际上当我发送(" MTT \ r")时我应该恢复硬件的温度。当我在putty中测试我的硬件时,它可以返回上面的所有命令。这里是他们提供的.pdf中的一个命令的定义。 激光温度命令:MTT \ r \ n 描述:激光实际激光温度以XX.X degC 表示
经过几个小时的研究,我找到了问题的答案。从我在网上看到的情况来看,微软的SerialPort课程似乎并不适用于所有的串行硬件。所以我需要使用包装类来使用Win32 API。 我发现这篇文章解释了如何使用Win32类与串行设备进行通信。它还有一个包装器来调用Win32方法。您可以阅读所有相关内容并从以下链接下载所有代码。 https://msdn.microsoft.com/en-us/magazine/cc301786.aspx
希望这可以帮助那些遇到同样问题的人。