RS485通信字符串数据接收处理的问题

RS485通信字符串数据接收处理的问题

前段时间用51单片机写了一个步进电机的控制程序,想模仿一下云台的运行,但是在对通过485通信接收到上位机传来的数据进行分析时,发生了一个比较智障的小插曲,所以特地把它记下来,时时警醒自己这个菜鸡~~~

RS485通信程序参考了金沙滩工作室宋雪峰老师的《手把手教你单片机》中的例程。设置接收字节数为8位,粗糙的从接收数组中提取数据给步进电机的各种状态量进行初始化

void UartDrive()
{
    unsigned char len;
    unsigned char pdata buf[8];

    if(flagFame)  
    {
        flagFame=0;  
        recTimes=1;
        len=UartRead(buf,sizeof(buf)); 
        UartWrite(buf,len);  
        SFLAG=buf[0]-48;
        recNum=buf[1]-48;
        Speed_Levle=buf[2]-48;      
}
}

其中如

    Speed_Levle=buf[2]-48

将上位机发来的ASCALL码值转化对应的数值,这样后面处理会匹配了。

if(recNum==0 || Speed_Levle==0);

当然,转化为16进制数会方便一点,或者用单引号,如 ‘1’。

好的,我可以为您提供一些 Java 实现 RS485 串口通信的基本步骤: 1. 导入相应的 Java 串口通信类库,例如 RXTX 或 jSerialComm。 2. 创建一个串口对象并设置串口参数,如波特率、数据位、停止位、校验等。 3. 实现串口事件监听器,当串口接收数据时,会触发相应的事件,从而执行数据接收操作。 4. 调用串口对象的 write() 方法发送数据,可以发送字符串或字节数组。 5. 解析接收到的数据,根据数据格式进行相应的处理。可以使用 Java 的字符串解析方法或者字节数组解析方法进行解析。 下面是一个简单的 Java RS485 串口通信示例代码: ```java import gnu.io.*; import java.io.*; public class SerialPortTest implements SerialPortEventListener { private SerialPort serialPort; private BufferedReader input; private OutputStream output; public static void main(String[] args) { try { SerialPort serialPort = (SerialPort) CommPortIdentifier.getPortIdentifier("COM1").open("SerialPortTest", 2000); serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); BufferedReader input = new BufferedReader(new InputStreamReader(serialPort.getInputStream())); OutputStream output = serialPort.getOutputStream(); serialPort.addEventListener(new SerialPortTest()); serialPort.notifyOnDataAvailable(true); } catch (Exception e) { e.printStackTrace(); } } public void serialEvent(SerialPortEvent event) { if (event.getEventType() == SerialPortEvent.DATA_AVAILABLE) { try { String inputLine = input.readLine(); System.out.println("Received data: " + inputLine); // 解析接收到的数据 // ... } catch (Exception e) { e.printStackTrace(); } } } public void sendData(String data) { try { output.write(data.getBytes()); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们首先通过 CommPortIdentifier 类获取串口对象,并设置串口参数。然后创建 BufferedReader 和 OutputStream 对象用于读取和写入数据。接着实现 SerialPortEventListener 接口,当串口接收数据时,会触发 serialEvent() 方法进行数据接收和解析。最后,我们可以调用 sendData() 方法发送数据。 需要注意的是,在使用串口通信时,可能会遇到各种不同的问题,例如串口无法打开、数据接收错误等等。因此,在实际开发中,需要仔细测试和调试代码,确保串口通信能够正常进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值