RTU数据转发与接收
在硬件上,串口屏的串口已经连接到扩展板上,因此一些串口设备,尤其是MODBUS设备就无法直接接到串口屏上,考虑到STM32还有一个对外的串口,因此串口屏可以通过STM32进行MODBUS RTU数据转发,从而使用扩展板可以控制485设备;
发送RTU数据
语句:
void e1.usend(int bs,int len);
//bs:bin数组句柄
//len:数据的长度
示例:
void demosend()
{ int len;
int bs;
str hex= "00 01 02 03 04"; //发送数据
len=(strlen(hex)+1)/3;
bs=newbin(16);
defbin(bs,0,hex);
e1.usend(bs,len);
freestr(bs);
}
接收RTU数据
当STM32扩展板收到RTU数据后,会封装一个数据头转发到串口屏,并在串口屏扩展板驱动控件中恢复RTU数据,然后调用recvExtend事件,此时事件中mode=1;bs是传入bin数据的句柄,len是传入数据的长度。
void e1.recvExtend( int mode, int bs, int len){
int i;
if(mode == 1){ // 串口接收数据处理
m1.text="";
for(i=0;i<len;i++){
m1.text = m1.text + int2hex(getbin( bs, i),2) + " ";
}
m1.text = m1.text + "\r\n";
m1.rebuild();
}
}
注意:
- 由于RTU转发需要封装,因此支持的RTU数据最大比实际最大要小8个字节,不过按照RTU数据越短可靠性越高的特性,因此建议数据包不超过64字节。
- 扩展板内部采用LOOP环形buf的算法,因此在存储转发的情况下不会丢包。