ISO15765-2中定义了网络层和传输层的内容,下面就对这两部分分别进行介绍。
所有网络层的服务都有统一的结构,为了定义服务,有三种服务原语:
所有的网络层服务也有统一的格式,如下:
service_name.type {
parameter A,
parameter B,
[,parameter C,...]
}
网络层提供了两种服务:
N_USData.request {
Mtype
N_SA
N_TA
N_TAtype
[N_AE]
}
N_USData.confirm {
Mtype
N_SA
N_TA
N_TAtype
[N_AE]
}
N_USData_FF.indication {
Mtype
N_SA
N_TA
N_TAtype
[N_AE]
}
用于把接收到的分段报文的首帧发送给上层,如果首帧发现任何错误,那么整个报文都将被忽略;如果数据长度(FF_DL)大于接收方可用的缓冲区,也会被认为是一个错误。
N_USData.indication {
Mtype
N_SA
N_TA
N_TAtype
[N_AE]
}
用于给上层提供接收到的数据。
N_ChangeParameter.request {
Mtype
N_SA
N_TA
N_TAtype
[N_AE]
}
用于对特定内部参数的动态配置请求。
N_ChangeParameter.confirm {
Mtype
N_SA
N_TA
N_TAtype
[N_AE]
}
用于向上层确认修改特定协议的请求已经完成(成功与否)。
Mtype —— 报文类型,有两种:
N_AI —— Address Information
(1)N_SA,network source address,长度8位
(2)N_TA,network target address,长度8位
(3)N_TAtype,network target address type,枚举类型
物理寻址:一对一通信,支持网络层所有类型的报文
功能寻址:一对多通信,只支持单帧传输(广播)
(4)N_AE,network address extension,长度8位
(1)N_OK:服务执行成功
(2)N_TIMEOUT_A:超过时间N_Asmax/N_Armax
(3)N_TIMEOUT_Bs:超过时间N_Bsmax
(4)N_TIMEOUT_Cr:超过时间N_Crmax
(5)N_WRONG_SN:接收到非预期序列号(PCI.SN)
(6)N_INVALID_FS:流控帧接收到无效的状态
(7)N_UNEXP_PDU:接收到非预期的PDU
(8)N_WFT_OVRN:接收方在流控帧中发出等待状态
(9)N_BUFFER_OVFLW:接收方在流控帧中发出溢出状态
(10)N_ERROR:网络层发现除上述错误之外的错误
(1)N_OK:服务执行成功
(2)N_RX_ON:服务没有执行
(3)N_WRONG_PARAMETER:参数没有定义
(4)N_WRONG_VALUE:参数值超出范围
(1)传送/接收报文
(2)报告传送/接收报文的结果
2.2.1 单帧传输(SingleFrame transmission)
2.2.2 多帧传输(Multiple-frametransmission)
2.2.2.1 多帧包含:
① 首帧(First Frame)
② 连续帧(Consecutive Frame)
接收端通过流控机制(FlowControl)防止传输过程中帧丢失,在缓冲区已满时,接收端发送流控帧(FlowControl Frame)通知发送端暂时先不要发报文。
2.2.2.1.1 流控帧(FlowControl Frame)包含以下两个内容:
2.2.2.1.2 流控机制(Flow Control)的两种模式:
2.2.2.1.3 接收段缓冲区存储以下状态来控制连续帧(Consecutive Frame)的发送:
2.2.2.2 传输层PDU(Protocol Data Unit):
(1)N_AI:Address Information,参见本章小节(网络层)内容
(2)N_PCI:Protocol Control Information,定义了发送的N_PDU是哪一种帧
(3)N_Data:需要发送的数据
本文参考的标准是ISO15765-2:2016(E),与旧版相比又有所扩充,并且把协议分成了网络层和传输层两部分。网络层提供了交换报文的地址信息,决定帧的接收端和发送端;传输层则主要在于帧的传输机制及多帧的拆分,协议后面还讲了四类帧的错误处理机制,这里没有讲,感兴趣的可以自行研究一下。以上均是笔者自己的理解,如有错误欢迎指正。