问题背景
移远那种4G模块,设备有安卓核心板和底板,通过转换芯片、串口完成与外接设备的通讯。
但是发现485串口通信存在问题,外接设备无响应,也可能是未成功发送数据。
设备端软件是需要手动对收发进行切换的,实现方式是读写一个指定文件,设置0 1 进行读写的控制。
解决
PWMCtl.getInstance().switchWrite();
byte[] sendData = modbusRequest.getMessageData();
outputStream.write(sendData);
outputStream.flush();
TimeUnit.MILLISECONDS.sleep(2);
PWMCtl.getInstance().switchRead();
核心代码如上,切换后对串口的流进行
代码逻辑没有问题,关键点在于TimeUnit.MILLISECONDS.sleep(2); 这一行
因为切换,或者可能是外接设备响应的问题,比如如果延时过长,数据已经返回但是无法准确接收等。
如果不设置延时,将会大概率无法准确地把数据发送出去。
经过测试2毫秒延时刚好。
转载务必注明出处:程序员潇然,疯狂的字节X,https://crazybytex.com/thread-215-1-1.html |