c#可以通过串口发送数据但不能接收

时间:2019-11-28 11:38:51

标签: c# serial-port

所以我有一个PTZ摄像机通过一个串行端口连接到PC,我可以向它发送命令来控制它。我的问题是,当我问它具有哪个缩放比例或其他任何内容时,我永远都不会得到回应。

首先,我打开我的串行端口:

public static void StartCOM(string COMPort, ref SerialPort serialPort)
{
    serialPort = new SerialPort(COMPort, 9600, Parity.None, 8, StopBits.One);
    serialPort.Handshake = Handshake.None;
    serialPort.DtrEnable = true;
    serialPort.RtsEnable = true;
    serialPort.ReadTimeout = 500;
}

然后我添加事件以在接收数据时触发:

serialPort.DataReceived += new SerialDataReceivedEventHandler(OnDataReceived);
private void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
{
    Debug.Log("Data recibida");
    Debug.Log(serialPort.ReadExisting());
}

然后打开它:

public static void OpenCOM(ref SerialPort serialPort)
{
    //Comprobamos si el serial port existe
    if (serialPort != null)
    {
        //Si ya está abierto no hacemos nada
        if (serialPort.IsOpen)
        {
            Debug.Log("El puerto " + serialPort.PortName + " ya estaba abierto");
        }
        //Si está cerrado lo abrimos
        else
        {
            Debug.Log("Abrimos puerto: " + serialPort.PortName);
            serialPort.Open();
        }
    }
}

最后,我给它写了一个命令,该命令应该可以给我返回一些东西,但是它从不执行:

 byte[] byteToSend = { 0x81, 0x09, 0x04, 0x00, 0xFF };
 COMUtility.WriteToCOM(serialPort, byteToSend);

我从以下页面获得命令的页面:https://www.epiphan.com/userguides/LUMiO12x/Content/UserGuides/PTZ/3-operation/VISCAcommands.htm#CamValues

更新:

所以,我开始读取数据。

我写到COM端口:

    if (Input.GetKeyDown(KeyCode.R))
    {
        //DebugAbsolutePosition();
        byte[] checkZoom = {0x81, 0x09, 0x04, 0x47, 0xFF };
        COMUtility.WriteToCOM(serialPort, checkZoom);
    }

    try
    {
        string data = serialPort.ReadExisting();
        Debug.Log("Data leida");
        Debug.Log(data);
    }
    catch { }

这将检查相机的变焦。 并在外部软件中收到
90 50 00 00 00 00 ff,这是正确的。

我的问题是,如果我调试得到以下信息,则在我的应用中

“?P \ 0 \ 0”。

1 个答案:

答案 0 :(得分:0)

您可能在设置硬件流控制时出错。

根据相机的the documentation,您应该只使用RTS / CTS,但是您要同时设置RTS / CTS和DTR / DSR的端口。

如果一开始就完全放弃流量控制可能是一个好主意。对于如此低的波特率和较短的数据交换,您可能根本不需要任何流量控制。