今天在搞海康某个CameraLink相机,准备写控制程序时突然发现它的串口是这样的:
image.png

ASCII???

好吧,看了下它的示例,还挺容易理解,不难写。
image.png

就按照字符来呗,虽然它串口返回的是不固定长度的数据,不过也不是不能用。

但是问题就在写发送数据时,比如我现在要实现一个设置ExposureTime的命令,根据上面的示例很容易理解成:

// 伪代码
std::string str="w ExposureTime 1000";
serial.send(str.c_str(),str.length());

感觉该有的都有了,对吧。
但是测试了几次,从串口接收的返回信息都是乱码。由于是在公司测试的,现在手头没有测试截图,就不放测试结果了。
而且,全部是乱码也就算了,肯定是哪里写错了(波特率、memset忘了之类的),然而串口偶尔接收到

HKVS > w ExposureTime 1000

me SUCCESS!

这样的返回信息。
很郁闷,最开始以为是串口接收时间不够长,延长到10s都不行。

就在这时,想起平时用cutecom明明就可以,遂打开一看。选择的发送是LF/CR。
!!!
突然惊醒,不会是换行符的问题吧!
遂在发送字符最后面添加换行符,果不其然,从串口接收到的数据立马正常了。

唉,所以海康相机为什么要这样搞呢,用以前那种不是挺好的。
这种除了在界面下使用方便,对开发者而言一点都不友好。
而且要发送的字符更多了......
就算是从用户角度考虑,一般的用户也不怎么使用串口调试助手吧。会用到串口调试助手的多多少少都要写代码来控制。
反正我是理解不了海康的这个操作。


yufeng0213
1 声望0 粉丝