首页 > 其他分享 >COTP协议--电脑与PLC通信之表示层

COTP协议--电脑与PLC通信之表示层

时间:2022-11-01 17:23:47浏览次数:72  
标签:COTP 表示层 -- Unsigned PLC integer byte 连接

22.10.31

今天来讲一讲COTP协议。

咱们电脑想要通过S7协议与PLC进行一个通讯,那么就必须得使用到COTP协议。COTP协议是作为应用层的S7协议的表示层。而TPKT协议则是会话层。咱们下一次在讲。

 

 

 从图中来看我们就可以发现TCP传输的数据并不都是S7协议的数据,里面还包含了COTP层以及TPKT层的。

我们首先来讲一下PLC与电脑通讯的过程。

第一个阶段为我们电脑与PLC的TCP三次握手。

  • 首先我们电脑会发送TCP的SYN包给PLC
  • PLC在接受到SYN包后,会进行响应,回复SYN,ACK包给电脑
  • 到此完成了两次握手,电脑在接受到响应包后,会进行发送一个ACK的一个TCP包

第二个阶段则为我们表示层和会话层的连接。

  • 电脑向PLC构建一个COTP包,在这个包里面会发送我们的一个CR连接请求信息,当然啦,这个COTP包是已经包含了TPKT协议的了。
  • PLC在接受到电脑的COTP连接请求包后呢,就会进行回复一个CC连接确认信息,这个信息在包中占一个字节。位与COTP层的第二个字

22.11.1

第三个阶段为S7构建连接阶段。

  • 这一阶段,电脑会向PLC发送S7协议的请求连接报文
  • PLC进行回复一个连接确认报文

我们接下来注重讲一下COTP协议里面的具体部分字节以及其内涵吧

 COTP部分分为两种,COTP连接包和COTP功能包,COTP握手阶段使用的是COTP连接包,S7数据传输阶段使用的是COTP功能包

 COTP有两种类型,一种是连接包(握手包),是用于建立连接的,其主要包括1字节的COTP协议数据包后续部分长度值、1字节的PDU类型、2字节的目的地址、2字节的源地址、1字节的是否为拓展格式和是否为没有明确的流控、以及不限制字节参数块。

COTP连接包的结构

其中, COTP连接包的头结构为:

0 (Unsigned integer, 1 byte): Length,COTP后续数据的长度(注意:长度不包含length的长度),一般为17 bytes。

1 (Unsigned integer, 1 byte): PDU typ,类型有:

0×1: ED Expedited Data,加急数据

0×2: EA Expedited Data Acknowledgement,加急数据确认

0×4: UD,用户数据

0×5: RJ Reject,拒绝

0×6: AK Data Acknowledgement,数据确认

0×7: ER TPDU Error,TPDU错误

0×8: DR Disconnect Request,断开请求

0xC: DC Disconnect Confirm,断开确认

0xD: CC Connect Confirm,连接确认

0xE: CR Connect Request,连接请求

0xF: DT Data,数据传输

2~3 (Unsigned integer, 2 bytes): Destination reference.  目的地址

4~5 (Unsigned integer, 2 bytes): Source reference.  源地址

6 (1 byte): opt,其中包括Extended formats、No explicit flow control,值都是Boolean类型。

7~? (length-7 bytes, 一般为11 bytes): Parameter,参数。一般参数包含Parameter code(Unsigned integer, 1 byte)、Parameter length(Unsigned integer, 1 byte)、Parameter data三部分。

相对而言,COTP Fuction Packet比COTP Connection Packet简单多了,其结构如图8所示:

COTP功能包的格式

其中, COTPP功能包的头结构为:

0 (Unsigned integer, 1 byte): Length,COTP后续数据的长度(注意:长度不包含length的长度),一般为2 bytes。

1 (Unsigned integer, 1 byte): PDU type,类型有:

0×1: ED Expedited Data,加急数据

0×2: EA Expedited Data Acknowledgement,加急数据确认

0×4: UD,用户数据

0×5: RJ Reject,拒绝

0×6: AK Data Acknowledgement,数据确认

0×7: ER TPDU Error,TPDU错误

0×8: DR Disconnect Request,断开请求

0xC: DC Disconnect Confirm,断开确认

0xD: CC Connect Confirm,连接确认

0xE: CR Connect Request,连接请求

0xF: DT Data,数据传输

2 (1 byte): opt,其中包括Extended formats、No explicit flow control,值都是Boolean类型。

标签:COTP,表示层,--,Unsigned,PLC,integer,byte,连接
From: https://www.cnblogs.com/wgd-elwood/p/16845903.html

相关文章

  • Oracle生成日期维度
    一、创建一张表用于保存日期维度数据日期维度表createtablet_date(sys_datenumberprimarykeynotnull,--系统日期yearnumbernotnull,--年份......
  • python批量发送post请求
    importrequestsimportjsonimportpandasaspdlist2=[]false=Falsetrue=True#postheaders={"content-type":"charset=utf8"}url="url链接"#获取......
  • Prometheus发送告警机制
    Prometheus会根据rules中的规则,不断的评估是否需要发出告警信息,如果满足规则中的条件,则会向alertmanagers中配置的地址发送告警,告警是通过alertmanager配置的地址post......
  • matplotlib
    importmatplotlibasplt#matlab语法plt.figure(figsize=(9,3))#表示图表的长度为9,高度为3#在2行1列位置,画第一个图plt.subplot(211)plt.bar(seasons.stock1)#2......
  • sed基本用法与正则表达式
    sed工作原理sed即StreamEditor,和vi不同,sed是行编辑器。Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把......
  • android中EditText有光标不弹出软键盘处理(转)
    当我们点击Edittext时(获得焦点),都会弹出系统默认的软键盘,在有时候会需要做到点击EditText不想显示软键盘,这时候我们就要想方法把软键盘给你从隐藏掉。有几种方法,方法一:在An......
  • Django FileResponse下载文件
    djangoFileResponse下载文件代码如下:fromdjango.httpimportFileResponsedefget(self,request,*args,**kwargs):file_path=/Users/zonghan/Deskto......
  • 音频和base64的转化实现
    1.语音文件路径转化为BASE64格式的String源码publicstaticStringencodeBase64File(Stringpath)throwsException{Filefile=newFile(path);;......
  • CyclicBarrier、CountDownLatch、Semaphore的用法
    CyclicBarrier、CountDownLatch、Semaphore的用法CountDownLatch(线程计数器)CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有......
  • python名称空间及作用域
    名称空间存放名字的地方,是对栈区的划分,有了名称空间,可以在栈区中存放相同的名字内置名称空间存放python解释器内置的名称存活周期:python解释器启动-关闭>>>print<......