记录一个小项目——道岔机遥控
使用场景为工厂,环境存在433MHz对讲机干扰,通信要求可以一对一通信,也可以多对一通信,但是发送端同时还要接收接收端的回传信息,同时接收端留485进行MODBUS RTU通信,接入PLC。(最多99发99收)
开始考虑第一种方案:时分,也就是一个固定频率,利用信道侦测技术进行随机避让发送,但是这存在一个问题,太容易撞包,并且毫无并发能力,同时工作的设备一多直接趴窝了,实际测试后放弃。
后面采用了第二种方案,采用频分,因为设备的ID是固定的,我们可以设定一个base freq,同时规定interval freq,在发射端内部维护一张表,记录不同ID的接收机的频率,需要与某个ID通信时进入对应频率即可,由此杜绝撞包,后面实测效果不错。
这讲的都是一对一通信,还要求可以多对一,这里多对一的意思是,PLC下还会挂一些有线设备,这些设备是不具备无线能力的,所以设计了接收机的“网关”模式,也就是可以设置接收机为网关,并且设定其下面挂载的PLC下的执行机构的ID,当发射机发现该设备ID挂载在网关下后,就会切换到对应网关ID的频率,这部分通信采用时分,自动避让设计,最后效果还行,暂时没出问题。
如果是一对一通信,则这个设备不会接入485 MODBUS,仅仅作为远程IO,控制道岔机;如果是多对一,也就是作为网关模式,才使用MODBUS接入PLC,更新对应寄存器后,PLC对执行机构下达指令控制IO,达到对应控制目的。
发射机选的MCU是GD32E230C8T6,接收机GD32F303CCT6
RF芯片选择了国产的PAN3060,这个芯片可以在433M频段,915M频段工作,比较灵活,用的时候发现一些坑,要注意,发射结束后,要手动关闭PA,要不然内置PA一直工作会导致大范围填塞信道,如图

MODBUS协议栈用的国人写的agile_modbus,写从机的话还是很好用的。
暂时写这么多,后面再写一写这块的硬件设计
