From 5bb6920c89cd251db5478fda1a995e3651bb5051 Mon Sep 17 00:00:00 2001 From: "Rich.wu" Date: Mon, 20 Mar 2023 20:43:42 +0800 Subject: [PATCH] =?UTF-8?q?feat=20(dataCall):=20dataCall=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E6=8C=87=E5=AF=BC=E6=8F=90=E4=BA=A4=EF=BC=8Cnet=E9=83=A8?= =?UTF-8?q?=E5=88=86=E5=8F=82=E6=95=B0=E4=BC=98=E5=8C=96=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 固件版本: N/A 是否需要文案翻译: 是 ######################################################################################## # # # 示例: # # # # fix (network): 重复创建并关闭socket一定次数后,无法再次创建socket。 # # # # 1. 调用select接口并在其它线程调用socket.close()时,socket引用计数没有自减, # # 由于socket总数(即引用计数)有上限,导致创建一定数量的socket无法再次创建socket。 # # # # 2. 调用socket.close()释放资源时,将引用计数自减,及时释放出被占用的资源,修复该问题。# # # # 固件版本:EC600MCNLAR02_QPY # # # # 是否需要文案翻译: 是 # # # ######################################################################################## # # # 说明: # # # # <提交类型> 用于说明提交的类型,一般有以下几种: # # - feat: 新增feature。 # # - fix: 修复bug。 # # - docs: 仅仅修改了文档,如readme.md。 # # - style: 仅仅是对格式进行修改,如逗号、缩进、空格等。不改变代码逻辑。 # # - refactor: 代码重构,没有新增功能或修复bug。 # # - perf: 优化相关,如提升性能、用户体验等。 # # - test: 测试用例,包括单元测试、集成测试。 # # - chore: 改变构建流程、或者增加依赖库、工具等。 # # - revert: 版本回滚。 # # # # <功能范围> 用于说明提交影响的功能范围。 # # # # <修改点简述> 提交目的的简短描述。 # # # # <修改点详述> 用于详细描述修改点,可选。不填写,请删除该行;若填写,请描述以下内容: # # - 为何进行修改 # # - 如何解决问题的 # # - 是否有副作用(必要时) # # # ######################################################################################## --- .../net.md" | 2 +- .../network/dataCall/network.dataCall-1.png | Bin 0 -> 51690 bytes docs/Application_guide/zh/network/datacall.md | 383 ++++++++++++++++++ 3 files changed, 384 insertions(+), 1 deletion(-) create mode 100644 docs/Application_guide/zh/media/network/dataCall/network.dataCall-1.png diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/net.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/net.md" index eb03388b..3c2110df 100644 --- "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/net.md" +++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/net.md" @@ -101,7 +101,7 @@ net.getCellInfo([sinrEnable]) | `pci` | 物理层小区标识号,0 ~ 503 | | `tac` | 跟踪区域码,0 ~ 65535 | | `earfcn` | 无线频道编号,范围 0 ~ 65535 | -| `rssi` | LTE网络下,表示接收的信号强度,单位dBm,范围 -140 ~ -44 dBm
注:目前除BC25系列和BG77/BG95系列,其它平台均无法获取rssi,显示值使用RSRP代替:
RSRP(负数)= RSRP测量报告值 - 140,单位dBm,范围 -140 ~ -44 dBm | +| `rssi` | LTE网络下,rssi:表示接收的所有信号强度,单位dBm,范围 -140 ~ -44 dBm
注:目前除BC25系列和BG77/BG95系列,其它平台均无法获取rssi,使用RSRP代替:
RSRP:表示接收到的有效信号强度,单位dBm,范围 -140 ~ -44 dBm | | `rsrq` |LTE网络参考信号接收质量,范围 -20 ~ -3
注:理论上rsrq的范围应该是-19.5 ~ -3,但由于计算方法问题,目前能给出的是-20 ~ -3
目前仅BC25系列、BG77/BG95系列和EC600E/EC800E系列获取该参数有意义,其它平台该参数无意义| | `sinr` |信噪比(目前仅BC25系列和EC600E/EC800E系列支持获取该参数)范围-10 ~ 40 | diff --git a/docs/Application_guide/zh/media/network/dataCall/network.dataCall-1.png b/docs/Application_guide/zh/media/network/dataCall/network.dataCall-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2492a659e58bf886766d236cda0c1f857884ad83 GIT binary patch literal 51690 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 literal 0 HcmV?d00001 diff --git a/docs/Application_guide/zh/network/datacall.md b/docs/Application_guide/zh/network/datacall.md index e69de29b..b0140964 100644 --- a/docs/Application_guide/zh/network/datacall.md +++ b/docs/Application_guide/zh/network/datacall.md @@ -0,0 +1,383 @@ +# 数据拨号 + +## 引言 + +移远通信LTE Standard 模块支持QuecPython方案,本文档主要描述QuecPython模块无线数据业务的建立过程,即数据拨号的过程。本文主要介绍数据拨号功能的实际应用,包含开机自动拨号、拨号重连以及手动拨号的基础的用法和注意事项。同时介绍了拨号功能在常见场景中的使用。 + +### 适用模块 + +| **模块系列** | +| ------------------------------------------------------ | +| EC100Y/EC200N/EC600N/EC600S/EC800N/EG912N/EG915N 系列 | +| EC600M/EC800M/EG810M/EC200A系列 | +| EC200U/EC600U/EG912U/EG915U/EC600G/EC800G系列 | +| BC25系列 | +| EC600E/EC800E 系列 | +| BG77/BG95系列 | + +### 设备检查 + +本文档介绍的内容是基于Python SDK中包含的API来实现的,本文中使用的相关API具体详情见[dataCall](../../../API_reference/zh/QuecPython类库/dataCall.html)。 + +拨号之前需做一系列基本检查,判断模块是否处于基本的正常工作状态,具体步骤如下: + +1. 通过USB转串口线连接PC至模块的主串口或者USB端口。 + +2. 插入(U)SIM卡和天线,并上电。 + +3. 通过如下API函数,检查设备状态。 + + a) 检测(U)SIM卡:sim.getStatus() + + b) 检测信号强度:net.getSignal() + + c) 检测模块注网:net.getState() + + d) 查询第一路拨号服务状态:dataCall.getInfo(1,0) + +4. 使用QPYcom工具和模组进行交互,检查如下操作: + +![image-20230320192624802](F:\teedoc_with_qpydoc\docs\Application_guide\zh\media\network\dataCall\network.dataCall-1.png) + + + +## 开机自动拨号 + +所谓开机自动拨号,是指模组上电运行时,自动进行拨号的行为,无需用户再去执行拨号。用户只需要在模组开机后确认已经拨号成功,即可开始正常使用网络功能。 + +### 功能实现 + +根据profileID来设置对应那一路是否开机自动拨号。profileID为1的那一路初始默认使能开机自动拨号。 + +1. 查询是否拨号成功。使用API和示例代码如下: + + dataCall.getInfo(profileID, ipType) + +```python +import dataCall +dataCall.getInfo(1,0) #查看第一路是否拨号成功 +#返回结果 (1, 0, [1, 0, '10.146.83.168', '211.138.180.2', '211.138.180.3']) +dataCall.getInfo(2,0) #查看第二路是否拨号成功 +dataCall.getInfo(3,0) #查看第三路是否拨号成功 +``` + +2. 设置为自动拨号。使用API和示例代码如下: + + dataCall.setAutoActivate(profileID, enable) + +```python +import dataCall +# 第一路默认为自动拨号 +dataCall.setAutoActivate(2, 1) #设置第二路自动拨号 +dataCall.setAutoActivate(3, 1) #设置第三路自动拨号 +``` + +2. 取消自动拨号。示例代码如下: + +```python +import dataCall +dataCall.setAutoActivate(1, 0) #取消第一路自动拨号 +dataCall.setAutoActivate(2, 0) #取消第二路自动拨号 +dataCall.setAutoActivate(3, 0) #取消第三路自动拨号 +``` + +### 注意事项 + +> 1. 第一路(profileID为1)初始默认开机自动拨号。 +> 2. 拨号前请先通过 setPDPContext配置APN相关信息。 +> 3. 如没有配置对应profileID的APN相关信息,默认使用空字符串进行拨号。 +> 4. 当设置多路自动拨号时,会依照profileID从小到大依次进行拨号。 +> 5. 如全部取消自动拨号,则模组上电运行时不会进行拨号,需要进行手动拨号。 + + + +## 手动拨号 + +拨号,指的是PDP Context的激活操作,激活成功后,核心网的PDN网关才会分配一个IP地址给模组。手动拨号是指用户自己使用拨号接口去进行拨号,手动拨号前需要先配置PDP Context相关信息(APN,用户名,密码以及鉴权参数等信息)。 + +### 配置APN + +配置APN相关信息,拨号时使用该方法配置的相关信息进行PDP Context激活。 + +1. 配置PDP Context信息。使用API和示例代码如下: + +​ dataCall.setPDPContext(profileID, ipType, apn, username, password, authType) + +```python +import dataCall +#配置第一路PDP Context相关信息 +dataCall.setPDPContext(1, 0, "3gnet", "", "", 0) +#配置第二路PDP Context相关信息 +dataCall.setPDPContext(2, 0, "3gnet.mnc001.mcc460.gprs", "", "", 0) +#配置第三路PDP Context相关信息 +dataCall.setPDPContext(3, 0, "3gnet.mnc001.mcc460.gprs", "", "", 0) +``` + +​ 2. 查询PDP Context信息。使用API和示例代码如下: + +​ dataCall.getPDPContext(profileID) + +```python +import dataCall +dataCall.getPDPContext(1) #查询第一路PDP Context相关信息 +#返回结果 (0, '3gnet', '', '', 0) +dataCall.getPDPContext(2) #查询第一路PDP Context相关信息 +#返回结果 (0, '3gnet.mnc001.mcc460.gprs', '', '', 0) +dataCall.getPDPContext(3) #查询第一路PDP Context相关信息 +``` + +### 拨号实现 + +手动拨号,激活profileID指定的那一路PDP Context。 + +1. 手动激活,进行拨号。使用API和示例代码如下: + + dataCall.activate(profileID) + +```Python +import dataCall +# 激活之前,应先配置APN +dataCall.setPDPContext(1, 0, '3gnet', '', '', 0) # 这里配置第一路的APN +dataCall.setPDPContext(2, 0, '3gnet', '', '', 0) # 这里配置第二路的APN +dataCall.setPDPContext(3, 0, '3gnet', '', '', 0) # 这里配置第三路的APN +dataCall.activate(1) # 激活第一路 +dataCall.activate(2) # 激活第二路 +dataCall.activate(3) # 激活第三路 +``` + +2. 去激活,取消拨号。使用API和示例代码如下: + + dataCall.deactivate(profileID) + +```Python +import dataCall +dataCall.deactivate(1) # 去激活第一路 +dataCall.deactivate(2) # 去激活第二路 +dataCall.deactivate(3) # 去激活第三路 +``` + +### 注意事项 + +> 1. 模组会在开机时自动拨号,一般不需要用户执行激活操作。 +> 2. 如用户关闭了开机自动拨号功能,则需要用户调用此方法来进行手动拨号。 +> 3. 手动拨号之前,应该先配置对应profileID的APN相关信息。 +> 4. 如没有配置对应profileID的APN相关信息,默认使用空字符串进行拨号。 + + + +## 拨号重连 + +自动重连功能是指,因网络异常、信号差等异常场景导致模组与网络断开连接,当异常场景恢复正常后,模组自动进行拨号重连的行为。 + +### 功能实现 + +根据profileID来设置对应那一路是否使能自动重连。profileID为1的那一路默认使能自动重连功能。 + +1. 设置开启自动重连。使用API和示例代码如下: + + dataCall.setAutoConnect(profileID, enable) + +```python +import dataCall +# 第一路默认开启自动重连 +dataCall.setAutoConnect(2, 1) #开启二路为自动重连 +dataCall.setAutoConnect(3, 1) #开启三路为自动重连 +``` + +2. 关闭自动重连。示例代码如下: + + 如用户关闭了自动重连功能,网络状态发生变化时,如网络断开等情况下,则需要用户进行手动拨号。 + +```python +import dataCall +dataCall.setAutoConnect(1, 0) #关闭第一路自动重连 +dataCall.setAutoConnect(2, 0) #关闭第二路自动重连 +dataCall.setAutoConnect(3, 0) #关闭第三路自动重连 +``` + +### 注册回调函数 + +当网络状态发生变化时,如网络断开、拨号重连成功时,会触发注册的回调函数,告知用户网络状态。 + +1. 定义回调函数并注册。使用API和示例代码如下: + + dataCall.setCallback(fun) + +```python +import dataCall +#定义回调函数 +def netCallback(args): + pdp = args[0] + datacallState = args[1] + if datacallState == 0: + print('*** network {} disconnected.'.format(pdp)) + elif datacallState == 1: + print('*** network {} connected.'.format(pdp)) +#注册回调函数 +dataCall.setCallback(netCallback) + +#此时第一路网络断开 +*** network 1 disconnected. +#此时第一路自动重连成功 +*** network 1 connected +``` + +### 注意事项 + +> 1. 第一路(profileID为1)初始默认为自动重连。 +> 2. 如用户关闭了自动重连功能,则在网路断开恢复时需要用户进行手动拨号。 +> 3. 当注册了回调函数后,在网络断开、拨号重连成功时,会触发注册的回调函数的运行。 + + + +## 不同场景下的使用 + +### 场景一:第一次使用 + +第一次插入sim卡,之前没有配置过PDP Context相关信息,文件系统也没有保存过PDP Context相关信息。 + +模组烧录QuecPython的固件,开机后,默认会自动执行第一路拨号,使用默认APN进行拨号。可以直接查询拨号信息。 + +1. 拨号成功--能够查询到拨号信息 + + 对于大部分公网卡和可以连上公网的专网卡而言,一般利用核心网下发的APN,进行拨号,并保存在文件系统里面,可以通过dataCall.getPDPContext(1)查询PDP Context相关信息。 + +```python +import dataCall +dataCall.getInfo(1, 0) #查询拨号结果信息 +#返回结果 (1, 0, [1, 0, '10.91.44.177', '58.242.2.2', '218.104.78.2']) +dataCall.getPDPContext(1) #查询第一路PDP Context信息 +#返回结果 (0, '3gnet', '', '', 0) +``` + +2. 拨号失败--查询不到拨号信息 + +对于少部分公网卡,不是所有核心网都支持不设置APN;大部分专网卡必须提前设置APN,导致拨号失败。需要进行正常单路拨号,见场景二。 + +```python +import dataCall +dataCall.getInfo(1, 0) #查询拨号结果信息 +#返回结果 (1, 0, [0, 0, '', '', '']) +dataCall.getPDPContext(1) #查询第一路PDP Context信息 +#返回结果 (0, '', '', '', 0) +``` + +### 场景二:正常单路拨号 + +在场景一和场景三拨号失败或不使用默认APN拨号的情况下,使用用户自己配置对应运营商的APN信息的进行拨号。 + +示例一如下: + +```python +import dataCall +from misc import Power +# 用户需要配置的APN信息,根据实际情况修改 +usrConfig = {'apn': '3gnet', 'username': '', 'password': ''} +# 获取第一路的APN信息,确认当前使用的是否是用户指定的APN +pdpCtx = dataCall.getPDPContext(1) +if pdpCtx != -1: + if pdpCtx[1] != pdpConfig['apn']: + # 如果不是用户需要的APN,使用如下方式配置 + ret = dataCall.setPDPContext(1, 0, usrConfig['apn'], usrConfig['username'], usrConfig['password'], 0) + if ret == 0: + print('APN 配置成功。') + # 重启后按照配置的信息进行拨号 + Power.powerRestart() + else: + print('APN 配置失败。') + else: + print('APN 已经配置过了。') +else: + print('获取PDP Context失败。') + +``` + +示例二 如下: + +```python +>>> import dataCall +>>> dataCall.getPDPContext(1) #查询APN +(0, 'cmnet.mnc001.mcc460.gprs', '', '', 0) + #设置成用户指定的APN +>>> dataCall.setPDPContext(1, 0, '3gnet', '', '', 0) + +0 +>>> dataCall.getPDPContext(1) #查询是否配置成功 +(0, '3gnet', '', '', 0) + +>>> from misc import Power +>>> Power.powerDown() #重启 +``` + +重启后: + +1. 拨号成功--能够查询到正确的拨号信息 + +正常情况下使用正确的APN进行拨号,都能够拨号成功,并保存在文件系统里面,可以通过dataCall.getPDPContext(1)查询PDP Context相关信息。 + +```python +import dataCall +dataCall.getInfo(1, 0) #查询第一路拨号信息 +#返回结果 (1, 0, [1, 0, '10.91.44.177', '58.242.2.2', '218.104.78.2']) +dataCall.getPDPContext(1) +#返回结果(0, '3gnet', '', '', 0) +``` + +2. 拨号失败--查询不到拨号信息 + +部分为APN配置错误造成的,如没有配置对应运营商的APN,配置错专网卡特有的APN。需要先确认APN的正确性。 + +部分为网络、SIM卡或模块自身问题造成的,如SIM卡欠费、限制,网络断开,信号质量差等其它原因,需要和运营商或研发人员确认。 + +### 场景三:中途换卡 + +非第一次插入卡,中途换卡(公网换公网、公网换专网、专网换专网,专网换公网),因为之前卡拨号成功过,所以无论有没有配置过PDP Context,文件系统都保存过PDP Context相关信息。 + +如删除过文件系统的PDP Context相关信息,拨号场景见场景一。 + +开机后,默认会自动执行第一路拨号,使用文件系统中配置的APN进行拨号。可以直接查询拨号信息。 + +1. 拨号成功--能够查询到拨号信息 + +对于部分同运营商内换卡或部分公网换公网,APN信息是一样的能够拨号成功; + +对于部分公网换公网或专网换公网,因为核心支持APN纠错,能够拨号成功,但是不建议使用,不是所有核心网都支持这个纠错功能。 + +2. 拨号失败--查询不到拨号信息 + +对于中途换卡场景拨号失败情况基本上都是APN错误导致的,需要进行正常单路拨号,见场景二。 + +### 场景四:多路拨号 + +用户除了使用第一路数据拨号外还需要使用其它路进行数据拨号。 + +1. 由于除了第一路外,其他路没有自带自动拨号,自动重连功能,可以使用手动拨号。 + +```python +import dataCall +#查询第二路拨号信息;由于没有拨号,返回空 +dataCall.getInfo(2, 0) +#返回结果 (2, 0, [0, 0, '', '', '']) +#设置第二路拨号的PDP Context相关信息,如不设置,拨号时使用空字符串进行拨号 +dataCall.setPDPContext(2, 0, '3gnet', '', '', 0) +# 开启第二路开机自动拨号功能 +dataCall.setAutoActivate(2, 1) +# 开启第二路自动重连功能 +dataCall.setAutoConnect(2, 1) +#手动激活第二路PDP Context +dataCall.activate(2) +#返回结果 0 拨号成功 +dataCall.getInfo(2, 0) #查询第二路拨号信息 +#返回结果 (2, 0, [1, 0, '10.91.44.177', '58.242.2.2', '218.104.78.2']) +dataCall.getPDPContext(2) +#返回结果(0, '3gwap', '', '', 0) +``` + +2. 注意事项 + + 在配置其它路为自动拨号,自动重连后,拨号场景同场景一、场景二、场景三。 + + 多路手动拨号成功与失败原因,同场景一、场景二、场景三。 + + 如设置第一路为取消自动拨号,取消自动重连,同场景四。 + -- Gitee