e-works数字化企业网  »  文章频道  »  工业自动化控制  »  总线及网络

浅谈远程诊断技术在电控发动机方面的应用(下)

2014/7/1    来源:e-works    作者:ECTEK      皮聃      
关键字:远程诊断  发动机  无线网络  
Internet全球信息化进程的飞速发展,为汽车维修行业间的资源共享,信息交流提供了快捷和自由的途径,也使建立一个基于网络的电控发动机远程故障诊断系统成为可能。因为汽车位置的不确定性,实现远程故障诊断不适宜通过有线的方式连接到Internet上,而GPRS作为一种比较成熟的无线数据传输技术,恰好可以弥补上述缺点。通过GPRS模块,实现和Internet的无线连接,从而为电控发动机远程故障诊断提供了最基本的技术保证。
    由于DTU上电后主动向服务器端发送连接请求,所以故障诊断软件主要基于服务器端SOCKET编程,具体服务器端操作如下。

    服务器端操作 socket(套接字)

    (1)在初始化阶段调用wsastartup()

此函数在应用程序中初始化windows sockets dll ,只有此函数调用成功后,应用程序才可以再调用其他windows sockets dll中的api函数。在程式中调用该函数的形式如下:wsastartup(0x0202,(lpwsadata)&wsadata),其中0x0202表示我们用的是winsocket2.0版本,wsaata用来存储系统传回的关于winsocket的资料。

    (2)建立socket

    初始化winsock的动态连接库后,需要在服务器端建立一个监听的socket,为此可以调用socket()函数用来建立这个监听的socket,并定义此socket所使用的通信协议。此函数调用成功返回socket对象,失败则返回invalid_socket(调用wsagetlasterror()可得知原因,所有winsocket 的函数都可以使用这个函数来获取失败的原因)。

    socket pascal far socket( int af, int type, int protocol )

    参数: af:目前只提供 pf_inet(af_inet);

    type:socket 的类型 (sock_stream、sock_dgram);

    protocol:通讯协定(如果使用者不指定则设为0);

    如果要建立的是遵从tcp/ip协议的socket,第二个参数type应为sock_stream,如为udp(数据报)的socket,应为sock_dgram。

    (3)绑定端口

    接下来要为服务器端定义的这个监听的socket指定一个地址及端口(port),这样客户端才知道待会要连接哪一个地址的哪个端口,为此我们要调用bind()函数,该函数调用成功返回0,否则返回socket_error。

    int pascal far bind( socket s, const struct sockaddr far *name,int namelen );

    参 数: s:socket对象名,即通过socket函数创建的socket对象;

    name:socket的地址值,这个地址必须是执行这个程式所在机器的ip地址,这个地址为地址结构,其中包含了本机的ip地址和监听端口号;

    namelen:name的长度,即地址结构的长度;

    如果使用者不在意地址或端口的值,那么可以设定地址为inaddr_any,及port为0,windows sockets 会自动将其设定适当之地址及port (1024 到 5000之间的值)。此后可以调用getsockname()函数来获知其被设定的值。

责任编辑:陈浩
本文为e-works原创投稿文章,未经e-works书面许可,任何人不得复制、转载、摘编等任何方式进行使用。如已是e-works授权合作伙伴,应在授权范围内使用。e-works内容合作伙伴申请热线:editor@e-works.net.cn tel:027-87592219/20/21。
e-works
官方微信
掌上
信息化
编辑推荐
新闻推荐
博客推荐
视频推荐