function
--系统等待15s
sys.wait(15000)
--相关变量赋值
local taskname="userTask"
log.info(taskname,"start")
--赋值nid网络通道序号,后面获取网络通道状态api PronetGetNetSta(id)用
local nid=1
--赋值uid,后面没用到?
local uid=1
--将获取网络通道状态返回值赋予netsta
local netsta =0
--需要上传数据信息时,needup变为1
local needup =1
--计数器,用来计算发送数据间隔,每秒加1
local count =0
local count2 =0
--local lastlnglat = 0
--初始化GPS
GpsInit()
--执行AGNSS辅助定位,下载星历成功返回1
GpsExecAgnss()
--执纪一个while循环,因为直接检测true的值,所以一直循环
while true do
--声明局部变量d为一个表
local d ={}
--获取系统日期,并赋值给d.datetime
d.datetime=os.date("%Y-%m-%d %H:%M:%S")
--获取sim卡信号强度
d.xinhao=mobile.csq()
--获取sim卡imei
d.imei=mobile.imei()
--获取sim卡用户识别码(ICCID)
d.iccid = PerGetIccid()
--获取外部供电电压,通道为1
d.adc = PerGetAdcGatherValByAdcId(1)
--获取外部高低电平输入端状态
d.input=PerGetDiById(1)
--获取GPS震动情况
d.shake=PerGetGpsZdSta()
--赋值d.gps为空表
d.gps={}
--用libgnss.isfix获取gps是否定位成功并赋值给d.gps.isFix
d.gps.isFix=libgnss.isFix()
--如果gps定位成功,则通过libgnss.getRmc(2)api获取相关数据并赋值给d.gps
if libgnss.isFix() then
local tg =libgnss.getRmc(2)
d.gps.lat=tg.lat
d.gps.lng=tg.lng
--gps返回速度为海里(节),转换为公里
d.gps.speed=tg.speed * 1.85
--variation地面航向,单位度,从正北顺时针算;year\moth\day\hour\min\sec时间
--local lnglat = tg.lng + tg.lat
--local deltalnglat = math.abs(lnglat - lastlnglat)
--lastlnglat = lnglat
end
--将Lua的数据结构(如表、数组、字符串、数字等)转换为 JSON 格式的字符串并赋值给updata
local updata = json.encode(d)
--获取网络通道状态,并赋值给netsta
local netsta = PronetGetNetSta(nid)
log.info(taskname,"updata",updata,"netsta",netsta)
--如果needup为1,且updata不为空,网络通道状态正常,就调用网络通道发送数据PronetSetSendCh(id,s)上报数据,并将needup和count归零
if needup ==1 and updata and netsta ==1 then
needup =0
count =0
PronetSetSendCh(nid,updata)
end
--计数器加1
count = count+1
count2 = count2+1
-- CX4 电压大于13700,A4L 电压大于13500视为车辆启动,10秒将needup设为1,上传一次数据
if PerGetAdcGatherValByAdcId(1) > 13700 and count > 10 then
needup =1
count =0
end
--如果电压高于13.7视为车辆启动,且gps未获取成功,每300秒GpsExecAgnss获取下辅助定位数据
if PerGetAdcGatherValByAdcId(1) > 13700 and libgnss.isFix() == false and count2 > 300 then
GpsExecAgnss()
count2 =0
end
--平常600秒上传次数据
if count > 600 then
needup =1
count =0
end
sys.wait(1000)
end
end