如何用智能手机监控CAN总线设备?

来源:互联网 发布:matlab数据分析案例 编辑:程序博客网 时间:2024/05/21 22:25
CAN(Controller Area Network)是ISO国际标准化的串行通信协议。在汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”,1986 年德国电气商BOSCH公司开发出面向汽车的CAN 通信协议。此后,CAN 通过ISO11898及ISO11519 进行了标准化,在欧洲已是汽车网络的标准协议。CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。现场总线是当今自动化领域技术发展的热点之一,被誉为自动化领域的计算机局域网。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。

在工业自动化现场我们一直使用笔记本电脑调试设备。随着智能手机的发展,使用智能手机连接CAN总线设备进行调试和监控,成为了可能。

如何实现CAN总线设备与手机的连接呢?


我们使用的智能手机都有WiFi接口,如果可以使用手机通过WiFi连接CAN bus设备,那么我们就可以摆脱笔记本电脑使用手机来调试和监控CAN bus设备。那么,如何能使CAN现场控制总线网络与无线网络转换,由于CAN总线协议数据与TCP/IP协议数据在桢结构上完全不同,所以我们必须使用转换接口对其数据包重新封装。

使用“K9130 CAN转WiFi”或“CAN转WLAN”无线数据采集收发器实现CAN总线设备无线连接Android设备。


K9130是工业级CAN转WiFi无线数据采集收发器。内部集成一路CAN-bus接口,一路WiFi无线接口,及TCP/IP协议栈,符合 IEEE802.11b/g/n标准,具有传输速率高,接收灵敏度高等特点。K9130通过与无线路由器配合使用,设备可以在拥有相同SSID的接入点之间自由漫游,通过无线WiFi把CAN接入Wireless Ethernet,也可以自建热点允许手机,平板,笔记本等设备连接组成无线局域网。用户可以使用K9130轻松完成CAN-bus网络和 Wireless Ethernet的互联互通,进一步拓展CAN-bus网络和WiFi网络的应用范围。使用K9130实现CAN总线设备WiFI无线连接Android手机示意图如图1所示:

手机通过K9130 CAN转WiFi无线数据收发器连接CANbus设备


K9130可以在-25℃~75℃的温度范围内工作。K9130具有接入WiFi网络的能力,CAN口通信波特率最高支持1Mbps,完善支持TCP Server,TCP Client和UDP等多种工作模式。支持AP与Station模式,既可做热点被电脑,平板、手机直接接入,也可做客户端接入路由器。K9130是开放的标准通讯协议,可支持各类开发环境,如VB、VC、C#、Labview、Java、PHP等。支持Windows、Linux、Android、iOS等操作系统。

我们通过使用“K9130 CAN转WiFi”无线数据采集收发器成功实现CAN总线设备无线连接Android设备,方便的实现调试CAN设备,并对CAN设备进行无线数据采集和监控。

以下是Android手机软件收发CAN数据截图:

Android手机软件收发CAN数据截图

Android代码如下:
package com.cankau.k9130;


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.SocketAddress;


public class K9130 {
public static boolean reconect(){
try {
socket = new Socket();
socket.connect(addr, time);
in = socket.getInputStream();
out = socket.getOutputStream();
connect = true;
return true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}

public static boolean connect(SocketAddress remoteAddr,int timeout){

addr = remoteAddr;
time = timeout;
return reconect();
}


public static boolean dicconnect(){
try {
in.close();
out.close();
socket.close();
in = null;
out = null;
socket = null;
connect = false;
return true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
public static boolean isConnect(){
return connect;
}
public static boolean write(byte[] buffer,int offset,int count){
if(false == connect){
return false;
}
try {
out.write(buffer, offset, count);
return true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
connect = false;
return false;
}
}
public static int read(byte[] buffer,int byteOffset,int byteCount){
int len;
if(false == connect){
return -1;
}
try {
len = in.available();
byteCount = (byteCount < len?byteCount:len);
in.read(buffer, byteOffset, byteCount);
return byteCount;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
connect = false;
return -1;
}
}
private static SocketAddress addr;
private static int time;
private static Socket socket;
private static InputStream in;
private static OutputStream out;
private static boolean connect = false;;
}


在很多场合我们不必背着笔记本前往现场采集那么几组数据,完全可以掏出随身携带的手机实现对CAN总线设备的调试和监控。
0 0
原创粉丝点击