发明内容
为了克服已有方法不能实时的将现场生产数据和上层管理分析系统关联起来的不足,本发明提供一种在保证数据传输真实可靠、数据实时性高的同时,能将生产现场和上层管理分析系统紧密结合起来的制造物联实时数据传输方法。
本发明解决其技术问题所采用的技术方案是:
一种制造物联实时数据传输方法,所述实时数据传输方法包括以下步骤:
1)参数初始化:
1.1)设置紧急数据包编号Anum=0,紧急数据包总数Acount=0;
1.2)设置超时计数count=0,最大允许超时次数SUM;
1.3)设置数据块编号dataBlock=0,数据优先级priority=0;
2)封装传输数据包:
2.1)封装数据请求包;
2.2)封装普通数据包;
2.3)封装数据块结束包;
2.4)封装数据结束包;
2.5)定义响应包;
3)数据发送过程;
4)数据接收过程。
进一步,所述步骤2.1)中,数据请求包的包格式如下:
2 |
3 |
2 |
4 |
1 |
— |
1 |
ENQ |
Type |
Group |
Size |
NameLength |
Name |
校验 |
其中,ENQ表示请求包的包标识,占用2个字节,值为0x05;Type表示请求包请求的数据包类型,占用2个字节,取值为0x00到0xFF区间的十六进制数,表示不同组别的数据;Group表示请求包的数据组成,占用2个字节,值为0x01到0x0F区间的十六进制数,表示同一种组别的不同类型的数据;Size表示传送文件的长度,占用4字节。NameLength表示数据名的长度,占用1字节;Name表示传送数据的名称,占用长度有文件名长度字节内容决定;校验占用1个字节,是从ENQ开始到校验前所有字节的异或运算和。
再进一步,所述步骤2.2)中,数据普通数据包的包格式如下:
2 |
2 |
— |
— |
1 |
STX |
DataType |
Priority |
Data |
校验 |
其中,STX是普通数据包的包标识,占用2个字节,值为0x02;Type表示请求包的类型,占用2个字节,取值分别为0x01、0x02、0x04、0x08,其中0x01表示周期采样数据普通数据包,0x02表示事件触发信号普通数据包,0x04表示管理信息数据普通数据包,0x08表示其他类型普通数据包;Priority用于标识当前数据包在整个传输过程中的优先级,占用1字节;Data为传输的具体内容,占用1024个字节;校验占用1个字节,是从STX开始到校验前所有字节的异或运算和。
更进一步,所述步骤2.3)中,数据块结束包的包格式如下:
2 |
2 |
— |
— |
1 |
ETB |
Type |
Length |
Data |
校验 |
其中,ETB是数据块结束包的包标识,占用1个字节,值为3;Type表示请求包的类型,占用2个字节,取值分别为0x01、0x02、0x04、0x08,其中0x01表示周期采样数据普通数据包,0x02表示事件触发信号普通数据包,0x04表示管理信息数据普通数据包,0x08表示其他类型普通数据包;Length表示数据包传送数据的长度,占用2个字节;Data表示传送的具体数据内容,长度由数据长度的值决定;校验占用1个字节,是从ETB开始到校验前所有字节的异或运算和。
进一步,所述步骤2.4)中,数据结束包的包格式如下:
2 |
2 |
— |
1 |
ETX |
Quality |
Remark |
校验 |
ETX是数据结束包包标识,占用2个字节,值为3;Quality表示整条数据的数据包传输品质,占用2个字节,取值分别为0x00、0x01、0x02,其中0x00表示数据包全部传输失败,0x01表示传输了部分数据包,0x02表示数据包全部传输成功;Remark表示整条数据的备注,长度不固定;校验占用1个字节,是从ETX开始到校验前所有字节的异或运算和。
进一步,所述步骤2.4)中,响应包的包格式如下:
再进一步,所述步骤3)中,数据发送方法如下:
3.1)阻塞等待有客户端连入,如果有客户端连入,与客户端创建数据交互通道,进入步骤3.2);
3.2)向客户端发送SOH响应,并开启监视事件;
3.3)判断是否有紧急数据向客户端发送,如果没有紧急数据,则进入步骤3.3),否则跳入步骤3.10);
3.4)监视客户端是否接收到新字符,如果有新字符,进入步骤3.5),否则进入步骤3.15);
3.5)解析接收到字符的包标识,如果是ENQ,进入步骤3.6);如果是NAK,跳入步骤3.7);如果是ACK,跳入步骤3.8);如果是EOT,跳入步骤3.9);
3.6)收到请求包,解析请求包,根据请求包封装数据,并向客户端发送ACK响应;
3.7)收到初次请求数据或者客户端要求数据重发,进入步骤3.17);
3.8)客户端成功收到数据,优先级priority=priority+1,跳入步骤3.17);
3.9)客户端发起关闭请求,传输完毕,关闭数据传输通道;
3.10)判断报警序号Anum是否为0,如果Anum等于0,则进入步骤3.11),否则跳入步骤3.12);
3.11)获取数据包包数Acount,判断Acount是否等于1,如果Acount等于1,则跳入步骤3.13),否则跳入步骤3.14);
3.12)判断Anum是否等于Acount,如果相等则进入步骤3.13),否则跳入步骤3.14);
3.13)发送数据块结束包,发送数据结束包,跳入步骤3.3);
3.14)发送紧急数据的普通数据包;
3.15)判断等待是否超时,如果没有超时,则跳入3.3),否则进入步骤3.10);
3.16)超时计数器count=count+1,判断超时计数是否达到允许超时总数SUM,如果count<SUM,向服务器发送NAK响应,请求重新发送指令或者数据,否则传输出错,关闭数据通道;
3.17)判断数据是否发送完毕,如果data不为空,进入步骤3.18),否则表示数据发送完毕,跳入步骤3.22);
3.18)判断数据块数据datadataBlock是否为最后一包数据,如果datadataBlock为最后一包数据,进入步骤3.19),否则跳入步骤3.20);
3.19)客户端发送数据块结束包,数据块序号dataBlock=dataBlock+1,优先级priority=0;
3.20)发送数据块datadataBlock中优先级为priority的数据并进入步骤3.21);
3.21)判断超时计数器count是否大于0,如果count>0,将count置为0;
3.22)向客户端发送数据结束包,将数据块序号dataBlock置为0,优先级priority置为0。
更进一步,所述步骤4)中,数据发送方法如下:
4.1)与服务器创建连接,创建数据交互通道,开启监视事件;
4.2)监视客户端指令或数据接收情况;
4.3)判断是否有指令发送给服务器,如果有指令发送给服务器,向服务器发送指令包,否则进入4.4);
4.4)判断是否接收到新字符,如果接收到新字符进入4.5),否则跳入4.11);
4.5)解析接收到字符的包标识,如果是SOH,进入步骤4.6);如果是ACK,跳入步骤4.7);如果是STX,跳入步骤4.8);如果是ETB,跳入步骤4.9);如果是EOT,跳入步骤4.10);
4.6)向服务器发送数据请求包;
4.7)接收到数据,向服务器发送NAK响应包;
4.8)接收到普通数据包,跳入4.13);
4.9)接收到数据块结束包,跳入4.13);
4.10)接收到数据结束包,向服务器发送数据请求包;
4.11)判断等待是否超时,如果没有超时,则跳入4.1),否则进入步骤4.12);
4.12)超时计数器count=count+1,判断超时计数是否达到允许超时总数SUM,如果count<SUM,向服务器发送NAK响应,请求重新发送指令或者数据,否则传输出错,关闭数据通道;
4.13)校验数据包是否正确,如果数据正确,发送ACK响应包,否则发送NAK响应,向服务请求重新发送数据包。
本发明的技术构思为:首先,将制造物联实时数据传输方法参数初始化;然后,根据数据包格式封装数据;其次,开启数据发送过程;再次,开启数据接收过程;最后,数据发送和数据接受交换数据。应用制造物联实时数据传输方法,不仅提高了数据传输的效率,而且保证了数据传输的准确性。
本发明的有益效果为:在保证数据传输准确性的基础上,提高数据传输效率。
具体实施方式
下面结合附图对本发明作进一步描述。
参照图1~图3,一种制造物联实时数据传输方法,所述实时数据传输方法包括以下步骤:
1)参数初始化:
1.1)设置紧急数据包编号Anum=0,紧急数据包总数Acount=0;
1.2)设置超时计数count=0,最大允许超时次数SUM;
1.3)设置数据块编号dataBlock=0,数据优先级priority=0;
2)封装传输数据包:
2.1)封装数据请求包;
2.2)封装普通数据包;
2.3)封装数据块结束包;
2.4)封装数据结束包;
2.5)定义响应包;
3)数据发送过程;
4)数据接收过程。
进一步,所述步骤2.1)中,数据请求包的包格式如下:
2 |
3 |
2 |
4 |
1 |
— |
1 |
ENQ |
Type |
Group |
Size |
NameLength |
Name |
校验 |
其中,ENQ表示请求包的包标识,占用2个字节,值为0x05;Type表示请求包请求的数据包类型,占用2个字节,取值为0x00到0xFF区间的十六进制数,表示不同组别的数据;Group表示请求包的数据组成,占用2个字节,值为0x01到0x0F区间的十六进制数,表示同一种组别的不同类型的数据;Size表示传送文件的长度,占用4字节。NameLength表示数据名的长度,占用1字节;Name表示传送数据的名称,占用长度有文件名长度字节内容决定;校验占用1个字节,是从ENQ开始到校验前所有字节的异或运算和。
进一步,所述步骤2.2)中,数据普通数据包的包格式如下:
2 |
2 |
— |
— |
1 |
STX |
DataType |
Priority |
Data |
校验 |
其中,STX是普通数据包的包标识,占用2个字节,值为0x02;Type表示请求包的类型,占用2个字节,取值分别为0x01、0x02、0x04、0x08,其中0x01表示周期采样数据普通数据包,0x02表示事件触发信号普通数据包,0x04表示管理信息数据普通数据包,0x08表示其他类型普通数据包;Priority用于标识当前数据包在整个传输过程中的优先级,占用1字节;Data为传输的具体内容,占用1024个字节;校验占用1个字节,是从STX开始到校验前所有字节的异或运算和。
进一步,所述步骤2.3)中,数据块结束包的包格式如下:
2 |
2 |
— |
— |
1 |
ETB |
Type |
Length |
Data |
校验 |
其中,ETB是数据块结束包的包标识,占用1个字节,值为3;Type表示请求包的类型,占用2个字节,取值分别为0x01、0x02、0x04、0x08,其中0x01表示周期采样数据普通数据包,0x02表示事件触发信号普通数据包,0x04表示管理信息数据普通数据包,0x08表示其他类型普通数据包;Length表示数据包传送数据的长度,占用2个字节;Data表示传送的具体数据内容,长度由数据长度的值决定;校验占用1个字节,是从ETB开始到校验前所有字节的异或运算和。
进一步,所述步骤2.4)中,数据结束包的包格式如下:
ETX是数据结束包包标识,占用2个字节,值为3;Quality表示整条数据的数据包传输品质,占用2个字节,取值分别为0x00、0x01、0x02,其中0x00表示数据包全部传输失败,0x01表示传输了部分数据包,0x02表示数据包全部传输成功;Remark表示整条数据的备注,长度不固定;校验占用1个字节,是从ETX开始到校验前所有字节的异或运算和。
进一步,所述步骤2.4)中,响应包的包格式如下:
名称 |
取值 |
含义 |
ACK |
0x06 |
接收方收到的数据正确 |
NAK |
0x15 |
接收方收到的数据有误,请求重发 |
CAN |
0x18 |
接收方取消发送方的发送请求 |
SOH |
0x01 |
发送方向接收方请求数据请求包 |
EOT |
0x04 |
数据传输完毕,关闭传输通道 |
再进一步,所述步骤3)中,数据发送方法如下:
3.1)阻塞等待有客户端连入,如果有客户端连入,与客户端创建数据交互通道,进入步骤3.2);
3.2)向客户端发送SOH响应,并开启监视事件;
3.3)判断是否有紧急数据向客户端发送,如果没有紧急数据,则进入步骤3.3),否则跳入步骤3.10);
3.4)监视客户端是否接收到新字符,如果有新字符,进入步骤3.5),否则进入步骤3.15);
3.5)解析接收到字符的包标识,如果是ENQ,进入步骤3.6);如果是NAK,跳入步骤3.7);如果是ACK,跳入步骤3.8);如果是EOT,跳入步骤3.9);
3.6)收到请求包,解析请求包,根据请求包封装数据,并向客户端发送ACK响应;
3.7)收到初次请求数据或者客户端要求数据重发,进入步骤3.17);
3.8)客户端成功收到数据,优先级priority=priority+1,跳入步骤3.17);
3.9)客户端发起关闭请求,传输完毕,关闭数据传输通道;
3.10)判断报警序号Anum是否为0,如果Anum等于0,则进入步骤3.11),否则跳入步骤3.12);
3.11)获取数据包包数Acount,判断Acount是否等于1,如果Acount等于1,则跳入步骤3.13),否则跳入步骤3.14);
3.12)判断Anum是否等于Acount,如果相等则进入步骤3.13),否则跳入步骤3.14);
3.13)发送数据块结束包,发送数据结束包,跳入步骤3.3);
3.14)发送紧急数据的普通数据包;
3.15)判断等待是否超时,如果没有超时,则跳入3.3),否则进入步骤3.10);
3.16)超时计数器count=count+1,判断超时计数是否达到允许超时总数SUM,如果count<SUM,向服务器发送NAK响应,请求重新发送指令或者数据,否则传输出错,关闭数据通道;
3.17)判断数据是否发送完毕,如果data不为空,进入步骤3.18),否则表示数据发送完毕,跳入步骤3.22);
3.18)判断数据块数据datadataBlock是否为最后一包数据,如果datadataBlock为最后一包数据,进入步骤3.19),否则跳入步骤3.20);
3.19)客户端发送数据块结束包,数据块序号dataBlock=dataBlock+1,优先级priority=0;
3.20)发送数据块datadataBlock中优先级为priority的数据并进入步骤3.21);
3.21)判断超时计数器count是否大于0,如果count>0,将count置为0;
3.22)向客户端发送数据结束包,将数据块序号dataBlock置为0,优先级priority置为0;
更进一步,所述步骤4)中,数据发送方法如下:
4.1)与服务器创建连接,创建数据交互通道,开启监视事件;
4.2)监视客户端指令或数据接收情况;
4.3)判断是否有指令发送给服务器,如果有指令发送给服务器,向服务器发送指令包,否则进入4.4);
4.4)判断是否接收到新字符,如果接收到新字符进入4.5),否则跳入4.11);
4.5)解析接收到字符的包标识,如果是SOH,进入步骤4.6);如果是ACK,跳入步骤4.7);如果是STX,跳入步骤4.8);如果是ETB,跳入步骤4.9);如果是EOT,跳入步骤4.10);
4.6)向服务器发送数据请求包;
4.7)接收到数据,向服务器发送NAK响应包;
4.8)接收到普通数据包,跳入4.13);
4.9)接收到数据块结束包,跳入4.13);
4.10)接收到数据结束包,向服务器发送数据请求包;
4.11)判断等待是否超时,如果没有超时,则跳入4.1),否则进入步骤4.12);
4.12)超时计数器count=count+1,判断超时计数是否达到允许超时总数SUM,如果count<SUM,向服务器发送NAK响应,请求重新发送指令或者数据,否则传输出错,关闭数据通道;
4.13)校验数据包是否正确,如果数据正确,发送ACK响应包,否则发送NAK响应,向服务请求重新发送数据包;
本实施例以模块化柔性制造综合实训系统为实施例,一种制造物联实时数据传输方法,其中包含以下步骤:
1)参数初始化:
1.1)设置紧急数据包编号Anum=0,紧急数据包总数Acount=0;
1.2)设置超时计数count=0,最大允许超时次数SUM;
1.3)设置数据块编号dataBlock=0,数据优先级priority=0;
2)封装传输数据包:
2.1)封装数据请求包;
2.2)封装普通数据包;
2.3)封装数据块结束包;
2.4)封装数据结束包;
2.5)定义响应包;
3)数据发送过程;
4)数据接收过程。
进一步,所述步骤2.1)中,数据请求包的包格式如下:
2 |
3 |
2 |
4 |
1 |
— |
1 |
ENQ |
Type |
Group |
Size |
NameLength |
Name |
校验 |
其中,ENQ表示请求包的包标识,占用2个字节,值为0x05;Type表示请求包请求的数据包类型,占用2个字节,取值为0x00到0xFF区间的十六进制数,表示不同组别的数据;Group表示请求包的数据组成,占用2个字节,值为0x01到0x0F区间的十六进制数,表示同一种组别的不同类型的数据;Size表示传送文件的长度,占用4字节。NameLength表示数据名的长度,占用1字节;Name表示传送数据的名称,占用长度有文件名长度字节内容决定;校验占用1个字节,是从ENQ开始到校验前所有字节的异或运算和。
进一步,所述步骤2.2)中,数据普通数据包的包格式如下:
2 |
2 |
— |
— |
1 |
STX |
DataType |
Priority |
Data |
校验 |
其中,STX是普通数据包的包标识,占用2个字节,值为0x02;Type表示请求包的类型,占用2个字节,取值分别为0x01、0x02、0x04、0x08,其中0x01表示周期采样数据普通数据包,0x02表示事件触发信号普通数据包,0x04表示管理信息数据普通数据包,0x08表示其他类型普通数据包;Priority用于标识当前数据包在整个传输过程中的优先级,占用1字节;Data为传输的具体内容,占用1024个字节;校验占用1个字节,是从STX开始到校验前所有字节的异或运算和。
进一步,所述步骤2.3)中,数据块结束包的包格式如下:
2 |
2 |
— |
— |
1 |
ETB |
Type |
Length |
Data |
校验 |
其中,ETB是数据块结束包的包标识,占用1个字节,值为3;Type表示请求包的类型,占用2个字节,取值分别为0x01、0x02、0x04、0x08,其中0x01表示周期采样数据普通数据包,0x02表示事件触发信号普通数据包,0x04表示管理信息数据普通数据包,0x08表示其他类型普通数据包;Length表示数据包传送数据的长度,占用2个字节;Data表示传送的具体数据内容,长度由数据长度的值决定;校验占用1个字节,是从ETB开始到校验前所有字节的异或运算和。
进一步,所述步骤2.4)中,数据结束包的包格式如下:
2 |
2 |
— |
1 |
ETX |
Quality |
Remark |
校验 |
ETX是数据结束包包标识,占用2个字节,值为3;Quality表示整条数据的数据包传输品质,占用2个字节,取值分别为0x00、0x01、0x02,其中0x00表示数据包全部传输失败,0x01表示传输了部分数据包,0x02表示数据包全部传输成功;Remark表示整条数据的备注,长度不固定;校验占用1个字节,是从ETX开始到校验前所有字节的异或运算和。
进一步,所述步骤2.4)中,响应包的包格式如下:
名称 |
取值 |
含义 |
ACK |
0x06 |
接收方收到的数据正确 |
NAK |
0x15 |
接收方收到的数据有误,请求重发 |
CAN |
0x18 |
接收方取消发送方的发送请求 |
SOH |
0x01 |
发送方向接收方请求数据请求包 |
EOT |
0x04 |
数据传输完毕,关闭传输通道 |
再进一步,所述步骤3)中,数据发送方法如下:
3.1)阻塞等待有客户端连入,如果有客户端连入,与客户端创建数据交互通道,进入步骤3.2);
3.2)向客户端发送SOH响应,并开启监视事件;
3.3)判断是否有紧急数据向客户端发送,如果没有紧急数据,则进入步骤3.3),否则跳入步骤3.10);
3.4)监视客户端是否接收到新字符,如果有新字符,进入步骤3.5),否则进入步骤3.15);
3.5)解析接收到字符的包标识,如果是ENQ,进入步骤3.6);如果是NAK,跳入步骤3.7);如果是ACK,跳入步骤3.8);如果是EOT,跳入步骤3.9);
3.6)收到请求包,解析请求包,根据请求包封装数据,并向客户端发送ACK响应;
3.7)收到初次请求数据或者客户端要求数据重发,进入步骤3.17);
3.8)客户端成功收到数据,优先级priority=priority+1,跳入步骤3.17);
3.9)客户端发起关闭请求,传输完毕,关闭数据传输通道;
3.10)判断报警序号Anum是否为0,如果Anum等于0,则进入步骤3.11),否则跳入步骤3.12);
3.11)获取数据包包数Acount,判断Acount是否等于1,如果Acount等于1,则跳入步骤3.13),否则跳入步骤3.14);
3.12)判断Anum是否等于Acount,如果相等则进入步骤3.13),否则跳入步骤3.14);
3.13)发送数据块结束包,发送数据结束包,跳入步骤3.3);
3.14)发送紧急数据的普通数据包;
3.15)判断等待是否超时,如果没有超时,则跳入3.3),否则进入步骤3.10);
3.16)超时计数器count=count+1,判断超时计数是否达到允许超时总数SUM,如果count<SUM,向服务器发送NAK响应,请求重新发送指令或者数据,否则传输出错,关闭数据通道;
3.17)判断数据是否发送完毕,如果data不为空,进入步骤3.18),否则表示数据发送完毕,跳入步骤3.22);
3.18)判断数据块数据datadataBlock是否为最后一包数据,如果datadataBlock为最后一包数据,进入步骤3.19),否则跳入步骤3.20);
3.19)客户端发送数据块结束包,数据块序号dataBlock=dataBlock+1,优先级priority=0;
3.20)发送数据块datadataBlock中优先级为priority的数据并进入步骤3.21);
3.21)判断超时计数器count是否大于0,如果count>0,将count置为0;
3.22)向客户端发送数据结束包,将数据块序号dataBlock置为0,优先级priority置为0。
更进一步,所述步骤4)中,数据发送方法如下:
4.1)与服务器创建连接,创建数据交互通道,开启监视事件;
4.2)监视客户端指令或数据接收情况;
4.3)判断是否有指令发送给服务器,如果有指令发送给服务器,向服务器发送指令包,否则进入4.4);
4.4)判断是否接收到新字符,如果接收到新字符进入4.5),否则跳入4.11);
4.5)解析接收到字符的包标识,如果是SOH,进入步骤4.6);如果是ACK,跳入步骤4.7);如果是STX,跳入步骤4.8);如果是ETB,跳入步骤4.9);如果是EOT,跳入步骤4.10);
4.6)向服务器发送数据请求包;
4.7)接收到数据,向服务器发送NAK响应包;
4.8)接收到普通数据包,跳入4.13);
4.9)接收到数据块结束包,跳入4.13);
4.10)接收到数据结束包,向服务器发送数据请求包;
4.11)判断等待是否超时,如果没有超时,则跳入4.1),否则进入步骤4.12);
4.12)超时计数器count=count+1,判断超时计数是否达到允许超时总数SUM,如果count<SUM,向服务器发送NAK响应,请求重新发送指令或者数据,否则传输出错,关闭数据通道;
4.13)校验数据包是否正确,如果数据正确,发送ACK响应包,否则发送NAK响应,向服务请求重新发送数据包。
以上阐述的是本发明给出的一个实施例表现出来的优良效果,显然本发明不仅适合上述实施例,在不偏离本发明基本精神及不超出本发明实质内容所涉及内容的前提下可对其做种种变化加以实施。