协议版本:1.0
MTCP协议全称为:消息传输控制协议,英文全称为:Message Transopration Control Protocol。协议规定了MTJMCN模块透过移动GPRS网络进行透明消息传输的技术方法。 其中具体包括
1 数据传输模型
2 数据传输格式,
3 消息分发、传输机制
4 消息传输性能
5 MTJMCN 控制消息
6 MTJMCN 通讯 API
MTCP协议底层基于移动通信网提供的标准GPRS数据包服务,根据通讯终端类型不同,通讯层为UDP/Websokcet协议两种协议的混合架构。
MTCP-UDP架构主要用于MTJMCN模块与UPW消息伺服器间的通讯。
MTCP-Websocket架构主要用于网页远程控制端与UPW消息伺服器间的通讯。
两种架构底层实现不同,协议实现机制基本相同
MTCP协议被设计为高丢包率,高延迟,不可靠网络条件下实现“尽力而为”的消息传输。 “尽力而为”是指在不进行丢包重传的情况下最大程度的保证数据被正确的传送,当数据传输发生无法纠正的差错、如发生传输差错情况下,发送端应可探知。 具体传输策略如下:
1 发送的数据包被转发或接收时,UPW伺服器抄送包裹并广播给所有ID相同的结点,发送端可以据此探知信息被正确发送。
2 发送的数据包含有4位数据长度校验,UPW伺服器设备对包长度进行校验,并丢弃校验失败的包。
消息是由纯ASCII码构成的数据包,格式如下:
MTCP采用广播机制进行通讯,当终端向UPW伺服器发送信息时,伺服器将按以下规则进行处理
1 向伺服器上连接的具有相同ID的设备广播该数据包
2 MTJMCN模块收到消息后,更改包类型为“F回声包”发送到UPW伺服器
MTCP的协议被设计为低速状况下硬件传送消息之用,数据最大发送性能如下。超过该性能约定的消息发送将发生阻塞并被丢弃。
最大发送频率: 1 package/秒
最大数据吞吐量:1K byte/秒
MTJMCN模块将主动响应如下控制消息:
//立即指令
//播放中文语音“你好”
HELLO
//OUTPUT引脚设置为低电平
OUTPUTLOW
//OUTPUT引脚设置为高电平
OUTPUTHIGH
//VOUT引脚导通为低电平
VOUTON
//VOUT引脚断开为高电平
VOUTOFF
//发声读英文字母和数字 (支持A-Z 以及 1-10 )
PLAY,A
//定时指令
//在0:00分打开VOUTON ,其中时间是可以使用任意24小时制双数位设定的
SETTIMERTABLE,00:00,VOUTON
//清空所有定时指令
CLEARTIMERTABLE
//获取当前定时指令,并以Json字符串形式返回
GETTIMERTABLE
//功能指令
//设置伺服器地址和端口
SETSERVERTABLE,box.miuser.net,7101
//重启模块
REBOOT
//参数恢复出厂设置并重启
FATORY
//进入休眠模式//
//进入休眠模式将停止一切网络活动以节约能源
SLEEPMODEON
//退出休眠模式
SLEEPMODEOFF
//打开串口通信
UARTON
//关闭串口通讯
UARTOFF
//打开ADC触发器
//AD发生改变后,将通过消息回报给上层API
ADCEVENTON
//关闭ADC触发器
ADCEVENTOFF
//使用如下命令打开脚本开关后,可以直接输入Lua语句,并在远程执行
//允许执行Lua脚本
LUALINKON
//禁止Lua脚本
LUALINKOFF
//打开脚本开关后,执行脚本函数体。 语句末尾以;结束
//E.g.返回OUTPUT变量的值
return tostring(NVMPara.OUTPUT);
当模块状态发生变化,会通过API返回如下消息
//按钮引脚被低电平触发一次
BTN Pressed
--NETSTATUS 0 不亮 未上电,1 常亮 已经联网运行,2 闪亮,联网中
--OUTPUT 0 低电平,1 高电平
--VOUT 1 低电平(带负载) 0 高电平(空载)
--INPUT 0 低电平,1 高电平
--BTN 0 低电平,按下,1 高电平,悬空
--ADCVOL ADC输入的电压值,mV 范围 0-1850
--LONGITUDE 设备基站
MTJMCN指令使用以下API通讯函数与模块进行通讯,发送控制消息
//1 发送心跳
function Send_HeartBeat(msg)
//2 发送透传命令
function Send_Cmd(cmd)
//3 发送消息
function Send_Message(msg)
//4 底层函数,功能是按照命令类型发送一个数据包
function SendRaw(msg,datatype)
模块的状态变化通过以下API回传消息
//1 处理收到的消息包, s为包内容
function ProceedRawMessage(s)
heart=
{
//网络状态
NETSTATUS,
//信号强度
RSSI=rssi,
//基站定位成功
isLocated,
//经度
LONGITUDE,
//维度
LATITUDE,
//输入
INPUT,
//输出
OUTPUT,
//按钮
BTN,
//电压输出
VOUT,
//ADC输出
ADCVOL,
//设备端时间戳
TIME,
}
//本浏览器客户端生存状态 大于0 在线 小于等于0 离线
TTL