问个js调组件的问题,见图
程序猿灌水乐园吧
全部回复
仅看楼主
level 11
starytx 楼主
这是一个串口操作类,主要是require一个本地的node文件,然后用里边的那个串口东西,现在我连接的是个电子秤,会不停的发重量数据,我如果长时间不recv的话,好像取到的每次都是1000长度的数据,而且称的重量都变了,我取到的还是之前的旧数据,recv多次后才能拿到新数据,应该是缓冲区满了的问题,所以我想看看这个com里边还有啥方法,比如清除缓存的方法,这样就能随时拿到新的数据了。有没有对这个熟悉的同学
2020年08月13日 07点08分 1
level 13

2020年08月13日 07点08分 2
level 11
starytx 楼主
补充一下现象:基本是就是可能他缓冲区挺大,称会一直发数据到缓冲区,我recv一次就会取缓冲区未读的数据,最多一次取1000字节,如果我很久没recv,那么可能攒了很多数据,这样我要取好多次(每次都是1000字节)后才能取到最新的重量,怎么办
2020年08月13日 07点08分 3
level 12
[蹭]
2020年08月13日 07点08分 4
level 11
starytx 楼主
我突然想到一个好主意,应该可行,正在测试
在recv的时候弄个循环,判断长度是1000(一次取到最多的数据量)就在循环里继续recv,直到长度小于1000,这时候肯定能拿到新数据[哈哈]
let recv_data = global.scale.recv();
while(recv_data.length == 1000){
recv_data = global.scale.recv();
}
2020年08月13日 07点08分 6
牛皮
2020年08月13日 08点08分
@七彩筋斗云- 这个方法虽然土,但很管用,哈哈哈哈
2020年08月13日 08点08分
level 12
按照modbus协议,一般在3.5t内认为是一帧数据,超过了就是下一帧
如果你不接收数据,建议在3.5t时间后用定时器清一次缓存,这样保证缓存不会炸
t应该是等于1000/波特率*(开始位+数据位+奇偶校验位+停止位), 单位是毫秒
可以参考一下写一个符合你的程序的
2020年08月13日 07点08分 7
难道这个recv取满一次不一定是1000?和串口参数设置有关?我试试改一下参数
2020年08月13日 07点08分
@starytx c++里面缓存区大小是可以设置的,但是一般还是建议用异步的方式处理串口,避免出现异常数据
2020年08月13日 08点08分
@adeng 要是c++早搞定了。
2020年08月13日 08点08分
level 8
完全不会[黑线]
2020年08月13日 08点08分 8
1