mcu和服务器通讯协议pdf,Modbus DTU与服务端间的通讯协议

一.数据帧格式

为防止DTU和服务器传输过程中因网络原因导致拆包、粘包,因此约定传输的基本数据帧格式如下,DTU上传和服务器下发的数据包均需满足此数据帧格式要求。服务器应解决TCP传输过程中的拆包粘包问题,确保每次处理的是完整的数据包。

基本数据帧格式:域名TypeLengthData[n]CheckSum

长度(byte)12n1

含义包类型包长n个数据校验和

备注决定了Data的内容从Data到CheckSum的字节数。大端格式(高字节在前)从Type开始按字节累加到本域的前一字节.每次累加进位去掉。

Type:数据包类型,也理解为Command. 不同的Tyep其对应的Length大小可能不同,Data也有所区别。

Length:在此之后的数据长度。大端格式。

CheckSum:校验和,虽然TCP传输协议本身已经有CRC校验,但网络传输路径的复杂性仍然无法保证数据一定无误,因此需要对每个数据帧(包)再进行简单的校验。

二.Login和LoginAck及其Data含义

DTU每次和服务器建立TCP连接后,首先必须先往服务器发Login命令,服务器根据业务需要判断其合法性(鉴权),然后回复LoginAck命令。传输方向Type名称Type值含义Data内容格式

(按顺序排列,排在前面的先传输,大端格式)

上行Login0x12DTU请求登陆服务器PSN(uint32)|PASS(uint32)|PName(uchar[8])|CurVer(uint16)| CCID(char[20]) |

下行LoginAck0x12服务器应答DTU登陆请求Right(uchar)|FoTaFlag(uchar)|TickTime(uchar)|SendTestMode(uchar)|SendTestTime(uchar)|NewVer(uint16)|NewPort(uint16)|NewIP(uchar[4])|

PSN:DTU编码.每个DTU都有唯一的产品序列号(或简称DTU编码)。

PASS: DTU密码。

服务器建立PSN和PASS关系表,初始化情况下PASS为0,当DTU请求Login时,如果数据库里PSN对应的PASS为0时,不需比对直接通过,并将DTU上传的PASS值写入数据库中,下次DTU再登录服务器时,因数据库的PASS非0而需要比较DTU上传的PASS和数据库的PASS是否相同,不同则认为鉴权失败。

PName:产品名称,如HS121, 不够8字节的后面补0.

CurVer:当前DTU应用版本号。

CCID:  SIM卡的ICCID号(20个字符)。

Right:服务器鉴权结果。

Right=0xEA表示鉴权成功! 其他值均表示鉴权失败。如果鉴权失败,服务器应在发完这条响应数据包后主动关闭此TCP连接。

FoTaFlag:  空中升级配置标志:

FoTaFlag =0--不支持空中升级;

FoTaFlag =1--可手动空中升级;用户通过串口或按键组合才能触发触发空中升级。

FoTaFlag =2--可自动空中升级。DTU收到此信息后应马上进入空中升级模式。

TickTime:上传心跳时间间隔

SendTestMode:  数据上传模式,可以选择服务器查询,或者DTU自动上传。(目前此模式无效,只支持定时上传)

SendTestMode=0 :任何一个测量值发生变化终端马上上传,但上传速度不大于SendTestTime              所设定的时间。如SendTestTime=3则最快上传速度为3              秒一次。

SendTestMode =255:忽略Test值是否有变化,只按照SendTestTime设定的时间间隔上传。

SendTestMode=x( 0

SendTestTime: DTU上传Test时间,在没有服务端下发查询的时候DTU以此时间间隔上传DTU保存值,为0时表示不自动上传。

NewVer:表示当前DTU软件的最新版本号,0表示没有新版本。当DTU检查到当前版本小于最新版本时,DTU根据FoTaFlag决定是否远程升级。

NewPort:新服务器端口。

NewIP:新服务器端IP地址。如123.86.55.33 第一个字节为123 按此顺序。

NewPort和NewIP 可用于服务器迁移和负载均衡需要。为0时终端不处理,非0时终端将更新存储的服务器IP和Port,下次链接服务器将用新的IP和Port.三、SendTick和SendTickAck及其Data含义:

DTU Login到服务器时,服务器下发的LoginAck中包含了TickTime参数(单位为秒),其值代表了DTU应该至少在多长时间内发起一次上行数据,如果在这个时间段内没有任何上行数据传输(如SendTest或SendSetup),则必须发一个SendTick 数据包到服务器,以便服务器持续保持TCP链路。传输方向Type名称Type值含义Data内容格式

上行SendTick0x13DTU上传心跳包无

下行SendTickAck0x13服务器回应心跳无四. SaveSetup和SaveSetupAck及其相关的Data含义:

SaveSetup用于服务器配置自动上传数据的时间间隔,以及DTU里关于寄存器地址的信息列表,即“寄存器列表”,DTU将根据此列表读取对应寄存器地址的值(value)。配置成功后DTU用SaveSetupAck包把所配置的寄存器列表返回给服务器,可供服务器用于校验配置成功与否。传输方向Type名称Type值含义Data内容格式

(按顺序排列,排在前面的先传输,大端格式)

下行SaveSetup0x16服务器配置DTU的地址列表SendTestTime(uchar)| SetDev1(uchar)|SetAddr1 (int16)|SetDev2(uchar)| SetAddr2(int16)|...

上行SaveSetupAck0x16DTU响应服务器Result(uchar)|SendTestTimeAck(uchar)|SetDevAck1(uchar)|SetAddrAck1 (int16)|SetDevAck2(uchar)| SetAddrAck2(int16)|...

寄存器地址列表:从机号(uchar)寄存器地址(int16)

10x55

10x56

10x57

20x55

......

下行SaveSetup:

SendTestTime:配置自动上传数据的时间间隔(单位:秒)

SetDev1,SetAddr1:从机号,寄存器地址

SetDev2,SetAddr2:从机号,寄存器地址

SetDev3,SetAddr3:从机号,寄存器地址

SetDev4,SetAddr4:从机号,寄存器地址

SetDev5,SetAddr5:从机号,寄存器地址

......

上行SaveSetupAck:

成功返回:

Result:1

SendTestTimeAck: 自动上传数据的时间间隔(单位:秒)

SetDevAck1,SetAddrAck1:从机号,寄存器地址

SetDevAck2,SetAddrAck2:从机号,寄存器地址

SetDevAck3,SetAddrAck3:从机号,寄存器地址

SetDevAck4,SetAddrAck4:从机号,寄存器地址

SetDevAck5,SetAddrAck5:从机号,寄存器地址

......

失败返回:

Result:0五. ReadSetup和ReadSetupAck及其相关的Data含义:

ReadSetup用于服务器读取DTU里存储的自动上传时间间隔参数,以及“寄存器列表”。传输方向Type名称Type值含义Data内容格式

(按顺序排列,排在前面的先传输,大端格式)

下行ReadSetup0x19服务器配置DTU的地址列表无

上行ReadSetupAck0x19DTU响应服务器SendTestTime (uchar)|ReadDev1(uchar)|ReadAddr1 (int16) | ReadDev2(uchar)|ReadAddr2(int16)|...

SendTestTime:自动上传时间间隔

ReadDev1,ReadAddr1:从机号,寄存器地址

ReadDev2,ReadAddr2:从机号,寄存器地址

ReadDev3,ReadAddr3:从机号,寄存器地址

ReadDev4,ReadAddr4:从机号,寄存器地址

ReadDev5,ReadAddr5:从机号,寄存器地址

......

六、SendTest和SendTestAck及其相关的Data含义:

SendTest是DTU定时自动上传的数据包,数据内容为寄存器里的值(value)。DTU将根据“寄存器列表”去获取从机的对应的寄存器里对应值(value),按顺序排列为如Value1,Value2,Value3... 将所有测量数据一起打包成SendTest数据包上传给服务器。传输方向Type名称Type值含义Data内容格式

(按顺序排列,排在前面的先传输,大端格式)

上行SendTest0x14DTU上传测量数据NetState(uchar)|TestCode(uchar)|Value1(int16) | Value2(int16)...

下行SendTestAck0x14服务器响应DTU上传测量数据TestCode(uchar)

NetState: 网络状态.DTU通讯模块的CSQ值。

TestCode: 测量值标识码。为了DTU同步Value数据到服务器,服务器收到SendTest数据包并成功解析、存储后将此TestCode回传给DTU。

当DTU本地的各种Value发生变化且满足SendTestMode要求时,本地记录的TestCode加一(255加1等于0),然后和所有的Value打包成SendTest数据包上传给服务器,当服务器收到SendTest数据包且成功解析并保存后将其值返回给DTU即可,假如服务器收到的SendTest数据包和事先约定的数据包不相符(比如个数少了),则服务器可以通过将TestCode减一(0减1等于255)后再回传给DTU,这样DTU会触发重传。TestCode服务器不需要保存在数据库中。

Value1 : 第一个寄存器地址里的值;

Value2 : 第二个寄存器地址里的值;

Value3 : 第三个寄存器地址里的值;

Value4 : 第四个寄存器地址里的值;

......七.ReadTest和ReadTestACK及相关的Data含义

ResdTest用于服务器查询指定寄存器的数据。

ResdTestAck是DTU返回给服务器的数据包,由对应的寄存器的值(value)组成。传输方向Type名称Type值含义Data内容格式

(按顺序排列,排在前面的先传输,大端格式)

下行ResdTest0x18服务器查询DTUReadValueDev1(uchar)|ReadValueAddr1 (int16)|ReadValueDev2(uchar)| ReadValueAddr2(int16)|...

上行ResdTestAck0x18DTU响应服务器查询Result(uchar)|ReadValue1(int16)| ReadValue12(int16)......

上行ResdTest:

ReadValueDev1,ReadValueAddr1:从机号,寄存器地址

ReadValueDev2,ReadValueAddr2:从机号,寄存器地址

ReadValueDev3,ReadValueAddr3:从机号,寄存器地址

ReadValueDev4,ReadValueAddr4:从机号,寄存器地址

ReadValueDev5,ReadValueAddr5:从机号,寄存器地址

......

下行ResdTestAck:

成功返回:

Result:1

ReadValue1: 第一个寄存器地址里的值

ReadValue2:第一个寄存器地址里的值

ReadValue3:第一个寄存器地址里的值

ReadValue4: 第一个寄存器地址里的值

ReadValue5:第一个寄存器地址里的值

......

失败返回:

Result:0八. SetControl和SetControl Ack及相关的Data含义

从机中,某些寄存器是用于配置的。SetControl用于服务器给DTU下发指令,让DTU去设置某些寄存器的参数. SetControlAck为DTU响应服务器的数据包,跟服务器下发的配置参数一致,可供服务器校验配置成功与否。传输方向Type名称Type值含义Data内容格式

(按顺序排列,排在前面的先传输,大端格式)

下行SetControl0x17服务器控制DTUSetValueDev1 (uchar) |SetValueAddr 1(int16)| SetValue(int16)1| SetValueDev2 (uchar) |SetValueAddr 2(int16)| SetValue(int16)2|......

上行SetControlAck0x17DTU响应服务器Result(uchar)|SetValueDevAck1 (uchar)|SetValueAddrAck1 (int16)| SetValueAck1 (int16) |SetValueDevAck2 (uchar)|SetValueAddrAck2 (int16)| SetValueAck2 (int16)|......

下行SetControl:

SetValueDev1:              从机号

SetValueAddr1:寄存器地址

SetValue1:参数

SetValueDev2:              从机号

SetValueAddr2:寄存器地址

SetValue2:参数

......

上行SetControlAck:

成功返回:

Result:1

SetValueDevAck1:              从机号

SetValueAddrAck1:寄存器地址

SetValueAck1:参数

SetValueDevAck2:              从机号

SetValueAddrAck2:寄存器地址

SetValueAck2:参数

......

失败返回:

Result:0

附:

DTUDTU内的寄存器列地址和寄存器值列表示意:从机号(uchar)寄存器地址(int16)值(int16)

10x330x12

10x340x34

10x550x56

10x560x78

10x570x90

20x550x12

20x880x12

完整的Word格式文档51黑下载地址:

7269ff8fd7142ea0f1528660ab33985d.gif

2018-9-15 15:26 上传

点击文件名下载附件

下载积分: 黑币 -5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DTU版本默认上电是透传模式还是非透传模式,两个模式如何转换?答:默认只配置了串口115200,8位数据模式,1个停止位,无校验,通道默认关闭。是否有可能让在第一次去连接server时上报自己ID(可以自定义)功能?答:支持自定义,详见“配置保存指令”的register字段。在非透传模式报文也是发的AT命令格式吗?答:不用AT,非透传模式参考指令“多通道通信报文恢复默认设置有条件吗?比如低电平保持多长时?上电前拉低?答:拉低25mS以上即可,不需要上电前拉低。使用云参数的话,基本上不会用到这个脚心跳包是否支持自定义,有没有长度限制?答:心跳包支持自定义,默认是字符串“ping”,长度最大1460字节是否可以指定透传模式下每次上报添加I答: 支持,详见“配置保存指令”的plate字段。MCU配置是否有保存命令?保存以后需要命令重启还是立刻生效?答:发送保存指令后,模块自动重启并立刻生效。如果连上server后MCU如何知道已经连上?会不会有字符串提示?答:连上server后,透传模式下相当于一条网线,不会有字符提示,MCU不用去维护DTU的状态。可否设置如果一定时内收不到server的心跳包,dtu自动掉电重连?答:内部有自动重连,开关飞行模式,重启模式,线程守护来保证DTU的网络链接正常,用户不需要干预。是否支持定时采集功能?答:支持,以后升级会逐渐支持更多的RTU的功能,比如定时采集,定时任务预置指令采集等。如何知道是SIM卡是否欠费,是否连上服务器?答:有两个办法: 1 看指示灯,心跳灯(100ms亮,1900毫秒灭表示脸上服务器),快闪通常表示卡不良或欠费,慢闪表示GSM正常但是网络附着不成功。 2 读取RDY信号(net ready信号),高电平是服务器链接成功,低电平是未连接。串口是否支持流量控制?答:支持,在保存参数配置的“flow"参数设置每分钟最大流量值,如果流量超过,则数据丢弃。是否支持短信或电话配置参数或更新答:支持,客户预定义电话,短信,短信内容,指定电话打电话或者发短信内容为指定内容即可远程更新参数。是否发送完成返回标志给MCU?答:支持,在MCU控制模式的时候,发送数据成功后会返回"SEND_OK"给MCU,方便MCU关闭模块。网络是否连接能不能通知MCU?答:支持 AIR202U的RDY信号--第6脚(GPIO_3)上电输出低电平,网络链接成功后输出高电平。 AIR720 的RDY信号--第5脚(GPIO_65)上电输出低电平,网络链接成功后输出高电平。定时采集功能支持透传和非透传模式吗?答:定时采集功能只有透传模式才能支持,支持串口1和2单独设

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值