所以我有一个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”。
答案 0 :(得分:0)
您可能在设置硬件流控制时出错。
根据相机的the documentation,您应该只使用RTS / CTS,但是您要同时设置RTS / CTS和DTR / DSR的端口。
如果一开始就完全放弃流量控制可能是一个好主意。对于如此低的波特率和较短的数据交换,您可能根本不需要任何流量控制。