0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术Linux主板4G通讯断线重连的自动管理

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-02-11 17:01 次阅读

在工控主板使用的现场环境中,可能会有一部分不能够提供以太网的情形,所以3G和4G网络以其便捷的使用方式,得到越来越广泛的应用。但是在使用无线通讯的时候,为了保证通讯的稳定性,断线重连机制是必须在程序中实现的。

为了让客户能够更加便捷的进行开发,英创公司在Linux主板上实现了自动拨号和断线重连的管理功能,并以库文件的形式放在主板文件系统中提供给客户。通过拨号管理库提供的API函数,客户就能够方便的实现自动拨号以及断线重连的功能,下面就详细介绍针对英创Linux主板的拨号管理库及导出的API函数。

英创公司提供的拨号管理库文件名为libautodial.so,在编译应用程序的时候,需要链接这个库文件,如果客户使用光盘资料中提供的eclipse工具进行开发,在编译之前需要对工程进行设置,设置方法为选择对应的工程,通过右键菜单进入properties,点击右侧C/C++ Build子栏目,选择其中Settings这一项,在C++ Linker子项中添加库文件和路径,如下图:

工程设置

Windows开发环境和Ubuntu开发环境下面的eclipse设置方法相同。对运行环境的英创主板,其根文件系统/lib路径下已经做好了相应设置,客户不需要再做任何操作,直接运行编译好的程序即可。

拨号管理库文件libautodial.so一共提供了三个API函数,分别实现连接,查询和断开的功能,函数接口定义如下:

/**
* 启用拨号管理线程
*
* 函数会创建一个线程用来进行拨号管理
* 实现自动拨号,以及断线重连
*
* 返回值说明:
* 0 表示成功开启拨号管理线程。
* -1 表示在当前环境无法运行。
*
*/
intpppconnt_start();
/**
* 查询连接状态
*
* 返回值说明:
* 0 表示运行连接正常。
* -1 表示连接断开。
* -2表示信号太差或者没有读取到SIM卡导致连接失败。
* -3表示连接模块无响应,建议检查硬件连接和驱动是否加载成功。
*
*/
intpppconnt_check();
/**
* 关闭连接
*
* 关闭拨号管理功能,并关闭已建立的连接。
*
*/
voidpppconnect_stop();

pppconnt_start()函数会创建一个线程来对整个拨号的流程实现自动管理,管理线程一开始便会自动判断接入的模块型号,根据模块型号调用对应的拨号脚本,然后进行拨号和断线重连。所以对于客户来说,只需要调用一次pppconnt_start()函数,就会创建出一个实现拨号管理的线程,不需要再执行其他任何操作。

pppconnt_check()函数提供了查询功能,如果在使用过程中客户想获取连接状态,可以通过调用该函数的返回值来判断,0为正常连接,-1为连接断开,-2为信号弱或者无信号,可能是由于没有接天线或者没有读取到SIM卡造成的,-3为模块无响应,可能是由于没有识别到外部模块或者没有加载驱动造成的。如果一直无法连接成功,客户可以根据查询的返回值判断原因,还可以增加硬件复位和重新上电等操作来保证模块的正常工作。

pppconnt_stop()函数,这个函数会关闭拨号管理线程,以及已经建立好的连接。在客户需要关闭拨号连接或是对模块进行复位等操作时,建议先调用pppconnt_stop()函数释放相关资源。

客户在主板上电后,需要先加载4G模块对应的驱动,因为需要驱动加载成功后,才能通过虚拟串口使用程序与模块之间进行交互,加载驱动可以放在程序或者脚本中进行,驱动加载的方法可以参考文章:《英创Linux主板基于3G和4G的无线通讯方案》中的说明。驱动加载成功后,系统会生成对应的虚拟串口,这时就可以调用拨号管理库中提供的pppconnt_start()函数进行拨号连接了。根据上面的介绍和对API函数的描述,我们使用以下代码进行简单的测试:

int i1;
//先调用一次pppconnt_stop,关闭连接
pppconnt_stop();
//通过代码加载驱动,测试使用华为ME909s,VID=0x12d1,PID=15c1
system("insmod /lib/modules/4.1.15/usbserial.ko vendor=0x12d1 product=0x15c1");
//开启拨号管理
i1 = pppconnt_start( );
printf("i1 = %d\n", i1);
while(1)
{
i1 = pppconnt_check();
if(!i1) {
printf("connected!\n");
//main processing
//...
sleep(5);
}
else {
//返回值为-,说明连接断开
if(i1 == -1)
printf("disconnect!\n");
//返回值为-2,说明检测不到信号,可能是没有检测到SIM卡,这里执行退出
else if(i1 == -2) {
printf("singal is weak, please check SIM card!\n");
break;
}
//返回值为-3,说明模块无响应,这里执行退出
else if(i1 == -3) {
printf("there is no response, please check hardware!\n");
break;
}
}
sleep(1);
}
//退出循环,调用pppconnt_stop,释放相关资源
pppconnt_stop();
return 0;

例程中对于查询到的状态,我们只是做了简单的打印,方便观看效果,在遇到没有读取到SIM卡和模块无响应的情况下就退出,在实际使用中可以加入硬件复位和重新上电等操作。应用处理由sleep函数代表,可更换为其他处理代码。例程测试效果如下:

建立连接

可以看到系统通过程序加载驱动后,生成了相应的虚拟串口,然后启用了拨号管理功能,start_connect()函数读出模块为ME909s,根据模块型号调用了对应的拨号脚本,连接成功后,检测线程打印出connected,说明连接已经成功。为了测试效果我们通过终端关闭拨号连接,模拟断线的情况,来测试是否能够实现自动重连:

断开模块

从打印信息可以看到,在我们通过终端关闭拨号连接后,检测程序打印的信息提示disconnect,说明此时拨号连接已经断开。pppconnt_check()函数检测到连接断开但是硬件正常,于是返回-1,根据测试代码,就会打印disconnect信息。接下来我们查看拨号管理线程是否会自动重连,打印信息如下:

重连过程

根据打印信息可以看出,在断开连接以后,10s左右的时间便重新连接上了,重新连接的过程是在拨号管理线程内部进行的,当检测程序提示了connected,就说明重连成功。

成功连接后,会生成ppp0网口,可以使用ifconfig命令查看,如果要使用ppp0网络,采用linux标准的网络编程就可以了,即创建套接字绑定ppp0,然后进行需要的设置和操作,关于这部分的说明,可以参考我们提供的编程应用手册以及例程step3_tcpserver、step4_tcpclient。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • WINDOWS
    +关注

    关注

    3

    文章

    3504

    浏览量

    88027
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6083

    浏览量

    35004
收藏 人收藏

    评论

    相关推荐

    物联网行业中通信断线现象介绍以及如何实现

    断线是指在计算机网络中,当网络连接遇到异常中断或者断开时,系统会自动尝试重新建立连接,以保证网络通信的连续性和稳定性。这是一种常见的网络通信技术
    的头像 发表于 09-21 09:56 179次阅读
    物联网行业中通信<b class='flag-5'>断线</b><b class='flag-5'>重</b><b class='flag-5'>连</b>现象介绍以及如何实现

    N58在运行一段时间后,发现连接4G网络失败,导致MQTT不断的如何解决?

    N58在运行一段时间后,发现连接4G网络失败,导致MQTT不断的,这个时候如何让N58新初始化一下,重新附着网络。谢谢
    发表于 07-16 07:15

    嵌入式设备中的4G/5G模块管理

    在高度数字化的智能时代,Linux嵌入式板卡在各个领域都发挥着重要作用,然而,随着4G/5G技术的普及,如何高效、稳定地管理这些嵌入式设备上
    发表于 07-13 16:45

    基于4G工业路由器的信息发布系统物联网应用方案

    随着物联网技术的快速发展,智能信息发布系统已成为城市管理信息传播的重要工具。而4G工业路由器作为连接
    的头像 发表于 06-03 17:55 674次阅读
    基于<b class='flag-5'>4G</b>工业路由器的<b class='flag-5'>信息</b>发布系统物联网应用方案

    4g工业网关的特点及应用

    随着信息技术的飞速发展,工业互联网已成为推动工业现代化进程的重要力量。其中,4G工业网关以其高速、稳定、可靠的数据传输能力,正逐渐成为工业领域不可或缺的一部分。本文将从4G工业网关的基本概念、功能
    的头像 发表于 04-25 16:54 453次阅读
    <b class='flag-5'>4g</b>工业网关的特点及应用

    智慧园区预付费4G水电表管理系统

    智慧园区预付费4G水电表管理系统 ,作为智慧城市建设的重点之一,利用4G通信技术对园区内的水电使用进行实时监控和管理。这种系统借助现代通信
    的头像 发表于 04-09 15:01 246次阅读
    智慧园区预付费<b class='flag-5'>4G</b>水电表<b class='flag-5'>管理</b>系统

    STM32G473VET6如何才能和4G模块进行正常通讯

    大家好,我初次使用STM32G473VET6这颗料,本来计划用MCU的USB连接4G模块,实现无线通讯,结果调试时软件说这颗芯片的USB口只能作为从口来使用,没法和4G模块进行正常
    发表于 03-20 06:55

    ANet-M4G-可选配4G从模块 智能通讯管理

    安科瑞 程瑜 1 产品简介 功能: ANet/M4G可选配4G从模块 智能通讯管理机是一款采用嵌入式硬件计算机平台,具有多个下行通信接口及一个或者多个上行网络接口,作为
    的头像 发表于 03-13 09:59 735次阅读
    ANet-M<b class='flag-5'>4G</b>-可选配<b class='flag-5'>4G</b>从模块 智能<b class='flag-5'>通讯</b><b class='flag-5'>管理</b>机

    什么是4G Cat.1?4G Cat.1与4G有什么区别?

    什么是4G Cat.1?4G Cat.1与4G有什么区别? 4G Cat.1是一种特定的4G技术
    的头像 发表于 02-03 11:38 3138次阅读

    【飞腾派4G版免费试用】飞腾派4G版开发板套装测试及环境搭建

    先简单介绍一下这款飞腾派4G版开发板套装; 飞腾派是由中电港萤火工场研发的一款面向行业工程师、学生和爱好者的开源硬件。主板处理器采用飞腾嵌入式四核处理器,兼容ARM V8架构,包含2个FTC664核
    发表于 01-22 00:47

    【飞腾派4G版免费试用】大家来了解飞腾派4G版开发板

    今天把收到的飞腾派4G版开发板做各视频,让大家直观的了解一下做工精细,布线合理,做工扎实的飞腾派4G版开发板。 关于飞腾: 飞腾信息技术有限公司是国内领先的自主核心芯片提供商,致力于飞腾系列
    发表于 01-02 22:43

    【飞腾派4G版免费试用】初步认识飞腾派4G版开发板

    FTC310核,其中FTC664核主频可达1.8GHz,FTC310核主频可达1.5GHz。主板板载64位 DDR4内存,分2G4G两个版本,支持SD或者eMMC外部存储。
    发表于 01-02 22:23

    4G蓝牙网关M1000功能及产品介绍

    支持4G移动网络,能够快速、稳定地连接到互联网,实现远程数据传输和设备控制。 蓝牙通信:M1000支持蓝牙通信,可以与各种蓝牙设备进行连接和数据传输,如智能手机、平板电脑、智能手表等。 远程管理:通过
    发表于 12-22 14:38

    【飞腾派4G版免费试用】开箱测评

    ,其中 FTC664 核主频可达 1.8GHz,FTC310 核主频可达 1.5GHz。 板载 64 位 DDR4 内存,有 2G4G 两个版本,支持 SD 或者 eMMC 外部存储。
    发表于 12-10 21:27

    5G4G的区别 5g网络比4g网络耗电吗?5g功耗是4g的多少倍?

    5G4G的区别 5g网络比4g网络耗电吗?5g功耗是4g的多少倍? 随着移动通信
    的头像 发表于 10-19 17:08 3062次阅读