当前位置:文档之家› 3-工业以太网协议--接口定义

3-工业以太网协议--接口定义

接口定义:
支持基于报文的节点间任意点对点通讯以及广播通讯方式,每个数据包必须在以太网物理帧的限定之内,即1500字节:
物理帧:6+6+2+[46-1500]+4CRC字节
对应Baidu Nhomakorabea目的地址+源地址+类型+数据区+32bit校验和
提供C语言编写的接收、发送API接口,该接口是:
非面向连接的
非阻塞的
支持类似UDP的“端口”的概念。且多个进程可同时操作工业以太网接口。
unsigned char Data[1514-14-8-sizeof(MsgHead)=1476];/*应用层使用的消息数据区*/
}Msg;
/*
功能描述:初始化工业以太网协议,并设置本机节点号,
输入说明:nodeID定义,共8bit,最高bit:0表示A机、1表示B机,低位的6bits:站号,
例如:
BYTE Protocol=xx;
BYTE SID=10;
BYTE SIDEXT=00000010B;
BYTE DID=1;
BYTE DIDEXT=00000011B(即3);
BYTE Reserved[4]={0,0,0,0};
BYTE srcPort = 20;
BYTE dstPort =21;
unsigned char Reserved[4];/*保留*/
unsigned char srcPort;//源端口
unsigned char dstPort;//目的端口
}MsgHead;
/*应用层消息结构*/
typedef struct s_Msg{
MsgHead Head;/*应用层使用的消息包头,与HS2000CAS、MACSx消息结构兼容*/
srcPort = 21;
dstPort =20;
Data[]=实际的请求内容。
道理同上,只是这次所有的IO站AB机都收到该消息,然后所有的IO站主机都发应答,由于协议已经对碰撞问题做了处理,所有这种方式可以减少请求数据包数,但又不会出现网络拥塞问题。
应答消息如下:
Length=xx(根据实际填)。
应答消息如下:
Length=xx(根据实际填)。
Type=4;
Protocol=xx(应用自己定)
SID=10;
SIDEXT=00000011B;
DID=1;
DIDEXT=00000011B;
Reserved[4]={0,0,0,0,}
srcPort = 21;
dstPort =20;
Data[]=实际的应答内容。
输入说明:
输出说明:返回true:设置成功,false:设置失败
*/
WIN2K_API bool IEClose();
/*
功能描述:发送应用层消息
输入说明:pMsgBuf,指向待发送的消息地址。
输出说明:返回true:成功,false:失败
*/
WIN2K_API bool IESend(Msg *pMsgBuf);
接口原形如下:
#ifndef IEAPI_H
#define IEAPI_H
/*应用层使用的消息包头,
与HS2000CAS、MACSx消息结构兼容,
例如:10号站的B机端口20要从系统网发送1000字节长的消息给1号站A、B两机端口21,则消息格式如下:
int Length=1000。
BYTE Type=4;
*/
#define TYPE_CMD 0/*工业以太网协议控制通道*/
#define TYPE_RNET 3/*备份网*/
#define TYPE_SNET 4/*系统网*/
#define INDEX_SNETA 0/*系统网A*/
#define INDEX_SNETB 1/*系统网B*/
#define INDEX_RNET 2/*备份网*/
/*
功能描述:接收外部网络节点发向本地port端口的消息
输入说明:pMsgBuf,指接收使用的消息缓冲区地址。
输出说明:返回true:成功,false:失败
*/
WIN2K_API bool IEReceive(unsigned char port, Msg *pMsgBuf);
#end
应用模式:
下面以MACSV1.X为例,给出工业以太网协议的应用模式:
工业以太网--接口定义
(方垒2005.1.4)
目的:
为了节约时间,将工业以太网协议开发与应用开发并行进行,我们通过“接口定义讨论稿”――>“讨论”――>“接口定义”正式版的方式来预先定义“应用开发”使用“工业以太网协议”的方式。该接口定义直接关系到应用开发和协议开发双方后期工作是否能顺利进行,所以请相关人员务必重视,详细考虑以下接口,最终确定的接口应该是:即能够满足应用开发需求,对于协议开发方又是简洁可实现的。
typedef struct s_MsgHead{
unsigned long Length;/*纯数据的长度,注意,不包括该头的长度16字节,只是后面数据部分的长度。*/
unsigned char Type;/*消息类型,3:备份网,4:系统网*/
unsigned char Protocol;/*协议号*/
DID=10;
DIDEXT=00000011B;
Reserved[4]={0,0,0,0,}
srcPort = 20;
dstPort =21;
Data[]=实际的请求内容。
此时10号IO站AB机都能收到请求,但只有主应答,应答时沿原路返回,将SID、SIDEXT变为DID、DIDEXT,这样请求方可以控制是要IO站应答给服务器AB双机,还是只应答给服务器单台机器。(端口的操作也类似,颠倒即可实现沿原路返回)而且一个来回就可以使服务器AB机、IO站AB机都同步(只有主机作出响应动作,从机可以只听)。
Type=4;
Protocol=xx(应用自己定)
SID=10;
SIDEXT=00000011B;
DID=1;
DIDEXT=00000011B;
Reserved[4]={0,0,0,0,}
srcPort = 21;
dstPort =20;
Data[]=实际的应答内容。
unsigned char SID;/*源节站号,*/
unsigned char SIDEXT;/*源节子站号,*/
unsigned char DID;/*目的站号,比如:10号站A或B机,都填10,注意:DID = 0表示广播,网上所有节点都接收该报文*/
unsigned char DIDEXT;/*目的子站号,比如:10号站A机,则填00000001B,B机则填00000010B,AB机则填00000011B*/
10号站A机,则:nodeID=00001010B=0+10=10
10号站B机,则:nodeID=10001010B=128+10=138
输出说明:返回true:设置成功,false:设置失败
*/
WIN2K_API bool IEOpen(unsigned char nodeID);
/*
功能描述:关闭工业以太网协议,
下面是系统拓扑结构:
系统中需要实现的功能包括:
功能描述
服务器发送的消息
IO站应答的消息
点对点请求应答模式:
比如:点名变地址请求
中,1号站(服务器)主机向10号IO站请求。
发送点对点消息,消息如下:
Length=xx(根据实际填)。
Type=4;
Protocol=xx(应用自己定)
SID=1;
SIDEXT=00000011B;
点对多点请求应答模式:
比如服务器采集周期到时向所以IO发出采集请求
发送广播消息,消息如下:
Length=xx(根据实际填)。
Type=4;
Protocol=xx(应用自己定)
SID=1;
SIDEXT=00000011B;
DID=0;
DIDEXT=00000100B;
Reserved[4]={0,0,0,0}
相关主题