S7comm(S7 通信)是西门子专有协议,可在西门子 S7-300/400 系列的可编程逻辑控制器 (PLC) 之间运行。它用于 PLC 编程、PLC 之间的数据交换、从 SCADA(监控和数据采集)系统访问 PLC 数据以及诊断目的。
S7comm 数据作为 COTP 数据包的有效载荷出现,第一个字节总是 0x32 作为协议标识符。
要建立与 S7 PLC 的连接,有 3 个步骤:
步骤 1:使用 PLC/CP 的 IP 地址。
步骤 2:用作两个字节长度的目标 TSAP。目标 TSAP 的第一个字节编码通信类型(1=PG,2=OP)。目标 TSAP 的第二个字节编码机架和插槽号:这是 PLC CPU 的位置。插槽编号在位 0-4 中编码,机架编号在位 5-7 中编码。
步骤 3:用于协商 S7comm 的具体细节(如 PDU 大小)。
1. TPKT协议
TPKT协议是一个传输服务协议,它为上层的COPT和下层TCP进行了过渡。我们常用的RDP协议(remote desktop protocol,windows的远程桌面协议)也是基于TPKT的,TPKT的默认TCP端口为102(RDP为3389),其实它本身为payload增加的数据并不多,主要就是以下几个:
2. COTP
COTP协议的全称是Connection-Oriented Transport Protocol,即面向连接的传输协议,从这个名字就可以看出,它的传输必然是依赖于连接的,所以在传输数据前必然有类似TCP握手建立链接的操作。
这里wireshark为我们标注出了CR和CC,后面的COTP包都是DT,这里的CR和CC其实分别是connect request和connet confirm的,也就是建立连接的过程,之后连接建立成功后,发送DT包,也就是data,是在发送数据。
接下来我们看一下COTP的连接包:
第一部分:
包含:length、PDU type、DST reference、SRC reference length :标识长度(但是length这个标识位不计入长度)
PDU type:标识类型,常见的值有:
DST reference:目标标识。
SRC reference:源标识。
第二部分(option):
可以看到在wireshark中将这部分(1个byte拆成了前四位和后两位),其中:
第三部分(parameter):
分为三部分:parameter code、parameter length、data。
parameter code:标识类型,主要有:
COPT功能包:
可以看到COTP功能包的PDU type为0X0f,只有三部分:length,type,opt。
以上便是TPKT和COTP协议的解析过程。
S7Comm数据作为COTP数据包的有效载荷,第一个字节总是0x32作为协议标识符。
S7Comm协议包含三部分:
根据实现的功能不同,S7comm协议的结构会有所不同。
1. Header部分
在Header中最重要的字段就是ROSCTR,它决定了后续参数的结构。ROSCTR的类型常见有以下值:
2. Parameter部分
Parameter的第一个字段为function,根据Header中ROSCTR的类别和Parameter中function的不同,parameter的结构,目的也会有所不同。
下面根据不同的功能码(function的值)讲解parameter的字段的构成:
建立通信在每个会话开始时被发送,然后可以交换任何其他消息。它用于协商ACK队列的大小和最大PDU长度,双方声明它们的支持值。ACK队列的长度决定了可以同时启动而不需要确认的并行作业的数量。PDU和队列长度字段都是大端。
当PDU类型为Job(ROSCTR的值为0x01),function为0xf0时,Paramter的结构为:
具体的Parameter结构,如下:
从响应包可以看出ack队列为1,PDU最大长度为240(不同的function的值,parameter的结构不一样)。
当PDU类型为Job,function为0x04时,Parameter的结构为:
这三层不用管由计算机自行完成 重点是看S7comm这一层。
功能码附录:
0x00 CPU services CPU服务;
0xf0 Setup communication 建立通信;
0x04 Read Var 读取值;
0x05 Write Var 写入值;
0x1a Request download 请求下载;
0x1b Download block 下载块;
0x1c Download ended 下载结束;
0x1d Start upload 开始上传;
0x1e Upload 上传;
0x1f End upload 上传结束;
0x28 PI-Service 程序调用服务;
0x29 PLC Stop 关闭PLC;
S7协议一般具有三层 header、parameter、data 根据事先功能不同,协议结构会有所不同。
发送包:
回包:
红框内的与发送的一样不做描述了:
Header头地方与其他都较为一致,可自行对比,不在描述了。
重点是Parameter这个地方:
Data部分:
SZL部分:
前四位为操作的对象是什么 0000 为CPU 1100为cp 1000为fm 0100为im。
中间0000 0000 0000 0000是wireshark解析错了按照官方的应该为四位后八位,表明的是局部列表的序号,我们只需要关注最后两位就行(0x00)。
下面是各类的序号图:
回包:
Header头部不做描述了,与之前都相同的。
Data部分:
后面的PDU就不在分析了都是做读取相关类的相关信息、只不过是指定的局部列表不同、index不同罢了。
Header头部,与之前都一样的不再描述了。
Parameter,参数部分。
Item部分:
| :----- | :----- | :----- |
| 0 | NULL |
| 3 | BIT | bit access, len is in bits
| 4 | BYTE/WORD/DWORD | byte/word/dword access, len is in bits
| 5 | INTEGER | integer access, len is in bits
| 6 | DINTEGER | integer access, len is in bytes
| 7 | REAL | real access, len is in bytes
| 9 | OCTET STRING | octet string, len is in bytes
图示整体解析一下:
回包:
Header部分:
除了红框内的其他都与发包一致。
Parameter部分:
Byte[0] 04 功能码:
Byte[1] 01 代表一个Item。
Data部分:
Byte[0] FF 为返回码,返回码如下:
Byte[1] 04 为数据传输大小,data数据传输大小值如下:
0 NULL
3 BIT bit access, len is in bits
4 BYTE/WORD/DWORD byte/word/dword access, len is in bits
5 INTEGER integer access, len is in bits
6 DINTEGER integer access, len is in bytes
7 REAL real access, len is in bytes
9 OCTET STRING octet string, len is in bytes
Byte[2] Byte[3]为data数据的长度。
Byte[4] 即数据。
有时候会有填充数据 即在byte[4]之后、如果数据长度不满足length的话会填充0x00。例如 byte[2]byte[3] 的长度值为3 就会在byte[4]后填充两个0x00。
发包:
Header 都与读取值一样的,就不在说了。
Parameter也一样,再说一次吧。
根据读取值对比写入值只比它多了个data部分:
回包:
Header部分和parameter部分都一样。
data部分:
Byte[0] FF 即为返回码。
上面介绍有返回码的类型,FF标识向0x000000地址写入成功。
发包:
整个意思就是请求下载(请求的标识是 5f 、请求的块类型是 DB 块的编号是0001 、目标块文件系统是P、所以文件名为_0A00001P,用于将DB1复制到被动文件系统或从被动文件系统复制)。
回包:
参数部分只回复了1a 代表确认请求了 确认请求之后就会进行下载块(功能码为:1b)。
发包:
红框内都一样(其他的也都一样) 从length开始加深一下吧。
回包:
与发包相比较只多了个data部分,介绍data部分就行了。
发包:
与0x1a和0x1b都一样 ,少了装载长度和MC7长度 意思就是结束下载了,这里就不做描述了。
回包:
也很简单,参数部分只回复了个1c 就是下载结束的意思了。
发包:
可以看到,开始上传的结构和请求下载的前部分结构一致。
如上图所示的内容,其实就是告诉 PLC 一个文件名,文件标识是_ (Complete Module),块类型为0B(SDB),块的编号为00000,目标块的文件系统是A (Active embedded module),所以文件名为_0B00000A,基本与请求下载都一样 Fliename就是文件名长度UploadID即为会话ID的意思。
回包:
发包:
这个就不做介绍了UploadID与1d回应的ID是对照的。
回包:
如之前的一样、不做介绍了。
Length:数据内容长度。
Unknown byte(s) in blockcontrol:未知字节。
Data:数据。
发包:
都一样不描述了,其中只是多了个错误代码Errorcode。
回包:
只回复了个1f 是上传结束了。
发包:
回包 :
Header头不讲,parameter只回复了0x28就是说明确认请求成功。
这个跟之前的都一样、我再整体的图示一下吧,不一个字节一个字节说了。
发包:
回包:
时间设置 (包含读时间、写时间)。
读时间的发包:
可以看出,基本与读SZL状态是一样的,我在整体标记一下吧。
回包:
Parameter:
Data:
写时间。
发包:
与读时间是一样的,只不过data部分是在发包阶段 。
回包:
也都一样,只是返回码不一样。
其他的也都大差不差,自己比对一下就OK了。
附录一:错误码具体含义。
0x0000 |
没有错误 |
0x0110 |
块号无效 |
0x0111 |
请求长度无效 |
0x0112 |
参数无效 |
0x0113 |
块类型无效 |
0x0114 |
找不到块 |
0x0115 |
块已存在 |
0x0116 |
块被写保护 |
0x0117 |
块/操作系统更新太大 |
0x0118 |
块号无效 |
0x0119 |
输入的密码不正确 |
0x011A |
PG资源错误 |
0x011B |
PLC资源错误 |
0x011C |
协议错误 |
0x011D |
块太多(与模块相关的限制) |
0x011E |
不再与数据库建立连接,或者S7DOS句柄无效 |
0x011F |
结果缓冲区太小 |
0x0120 |
块结束列表 |
0x0140 |
可用内存不足 |
0x0141 |
由于缺少资源,无法处理作业 |
0x8001 |
当块处于当前状态时,无法执行请求的服务 |
0x8003 |
S7协议错误:传输块时发生错误 |
0x8100 |
应用程序,一般错误:远程模块未知的服务 |
0x8104 |
未在模块上实现此服务或报告了帧错误 |
0x8204 |
对象的类型规范不一致 |
0x8205 |
复制的块已存在且未链接 |
0x8301 |
模块上的内存空间或工作内存不足,或者指定的存储介质不可访问 |
0x8302 |
可用资源太少或处理器资源不可用 |
0x8304 |
无法进一步并行上传。存在资源瓶颈 |
0x8305 |
功能不可用 |
0x8306 |
工作内存不足(用于复制,链接,加载AWP) |
0x8307 |
保持性工作记忆不够(用于复制,链接,加载AWP) |
0x8401 |
S7协议错误:无效的服务序列(例如,加载或上载块) |
0x8402 |
由于寻址对象的状态,服务无法执行 |
0x8404 |
S7协议:无法执行该功能 |
0x8405 |
远程块处于DISABLE状态(CFB)。该功能无法执行 |
0x8500 |
S7协议错误:帧错误 |
0x8503 |
来自模块的警报:服务过早取消 |
0x8701 |
寻址通信伙伴上的对象时出错(例如,区域长度错误) |
0x8702 |
模块不支持所请求的服务 |
0x8703 |
拒绝访问对象 |
0x8704 |
访问错误:对象已损坏 |
0xD001 |
协议错误:非法的作业号 |
0xD002 |
参数错误:非法的作业变体 |
0xD003 |
参数错误:模块不支持调试功能 |
0xD004 |
参数错误:作业状态非法 |
0xD005 |
参数错误:作业终止非法 |
0xD006 |
参数错误:非法链路断开ID |
0xD007 |
参数错误:缓冲区元素数量非法 |
0xD008 |
参数错误:扫描速率非法 |
0xD009 |
参数错误:执行次数非法 |
0xD00A |
参数错误:非法触发事件 |
0xD00B |
参数错误:非法触发条件 |
0xD011 |
调用环境路径中的参数错误:块不存在 |
0xD012 |
参数错误:块中的地址错误 |
0xD014 |
参数错误:正在删除/覆盖块 |
0xD015 |
参数错误:标签地址非法 |
0xD016 |
参数错误:由于用户程序错误,无法测试作业 |
0xD017 |
参数错误:非法触发号 |
0xD025 |
参数错误:路径无效 |
0xD026 |
参数错误:非法访问类型 |
0xD027 |
参数错误:不允许此数据块数 |
0xD031 |
内部协议错误 |
0xD032 |
参数错误:结果缓冲区长度错误 |
0xD033 |
协议错误:作业长度错误 |
0xD03F |
编码错误:参数部分出错(例如,保留字节不等于0) |
0xD041 |
数据错误:非法状态列表ID |
0xD042 |
数据错误:标签地址非法 |
0xD043 |
数据错误:找不到引用的作业,检查作业数据 |
0xD044 |
数据错误:标签值非法,检查作业数据 |
0xD045 |
数据错误:HOLD中不允许退出ODIS控制 |
0xD046 |
数据错误:运行时测量期间非法测量阶段 |
0xD047 |
数据错误:“读取作业列表”中的非法层次结构 |
0xD048 |
数据错误:“删除作业”中的非法删除ID |
0xD049 |
“替换作业”中的替换ID无效 |
0xD04A |
执行'程序状态'时出错 |
0xD05F |
编码错误:数据部分出错(例如,保留字节不等于0,...) |
0xD061 |
资源错误:没有作业的内存空间 |
0xD062 |
资源错误:作业列表已满 |
0xD063 |
资源错误:触发事件占用 |
0xD064 |
资源错误:没有足够的内存空间用于一个结果缓冲区元素 |
0xD065 |
资源错误:没有足够的内存空间用于多个结果缓冲区元素 |
0xD066 |
资源错误:可用于运行时测量的计时器被另一个作业占用 |
0xD067 |
资源错误:“修改标记”作业过多(特别是多处理器操作) |
0xD081 |
当前模式下不允许使用的功能 |
0xD082 |
模式错误:无法退出HOLD模式 |
0xD0A1 |
当前保护级别不允许使用的功能 |
0xD0A2 |
目前无法运行,因为正在运行的函数会修改内存 |
0xD0A3 |
I / O上活动的“修改标记”作业太多(特别是多处理器操作) |
0xD0A4 |
'强制'已经建立 |
0xD0A5 |
找不到引用的作业 |
0xD0A6 |
无法禁用/启用作业 |
0xD0A7 |
无法删除作业,例如因为当前正在读取作业 |
0xD0A8 |
无法替换作业,例如因为当前正在读取或删除作业 |
0xD0A9 |
无法读取作业,例如因为当前正在删除作业 |
0xD0AA |
处理操作超出时间限制 |
0xD0AB |
进程操作中的作业参数无效 |
0xD0AC |
进程操作中的作业数据无效 |
0xD0AD |
已设置操作模式 |
0xD0AE |
作业是通过不同的连接设置的,只能通过此连接进行处理 |
0xD0C1 |
访问标签时至少检测到一个错误 |
0xD0C2 |
切换到STOP / HOLD模式 |
0xD0C3 |
访问标记时至少检测到一个错误。模式更改为STOP / HOLD |
0xD0C4 |
运行时测量期间超时 |
0xD0C5 |
块堆栈的显示不一致,因为块被删除/重新加载 |
0xD0C6 |
作业已被删除,因为它所引用的作业已被删除 |
0xD0C7 |
由于退出了STOP模式,因此作业被自动删除 |
0xD0C8 |
由于测试作业和正在运行的程序之间不一致,“块状态”中止 |
0xD0C9 |
通过复位OB90退出状态区域 |
0xD0CA |
通过在退出前重置OB90并访问错误读取标签退出状态范围 |
0xD0CB |
外设输出的输出禁用再次激活 |
0xD0CC |
调试功能的数据量受时间限制 |
0xD201 |
块名称中的语法错误 |
0xD202 |
函数参数中的语法错误 |
0xD205 |
RAM中已存在链接块:无法进行条件复制 |
0xD206 |
EPROM中已存在链接块:无法进行条件复制 |
0xD208 |
超出模块的最大复制(未链接)块数 |
0xD209 |
(至少)模块上找不到给定块之一 |
0xD20A |
超出了可以与一个作业链接的最大块数 |
0xD20B |
超出了一个作业可以删除的最大块数 |
0xD20C |
OB无法复制,因为关联的优先级不存在 |
0xD20D |
SDB无法解释(例如,未知数) |
0xD20E |
没有(进一步)阻止可用 |
0xD20F |
超出模块特定的最大块大小 |
0xD210 |
块号无效 |
0xD212 |
标头属性不正确(与运行时相关) |
0xD213 |
SDB太多。请注意对正在使用的模块的限制 |
0xD216 |
无效的用户程序 - 重置模块 |
0xD217 |
不允许在模块属性中指定的保护级别 |
0xD218 |
属性不正确(主动/被动) |
0xD219 |
块长度不正确(例如,第一部分或整个块的长度不正确) |
0xD21A |
本地数据长度不正确或写保护错误 |
0xD21B |
模块无法压缩或压缩早期中断 |
0xD21D |
传输的动态项目数据量是非法的 |
0xD21E |
无法为模块(例如FM,CP)分配参数。系统数据无法链接 |
0xD220 |
编程语言无效。请注意对正在使用的模块的限制 |
0xD221 |
连接或路由的系统数据无效 |
0xD222 |
全局数据定义的系统数据包含无效参数 |
0xD223 |
通信功能块的实例数据块错误或超出最大背景数据块数 |
0xD224 |
SCAN系统数据块包含无效参数 |
0xD225 |
DP系统数据块包含无效参数 |
0xD226 |
块中发生结构错误 |
0xD230 |
块中发生结构错误 |
0xD231 |
至少有一个已加载的OB无法复制,因为关联的优先级不存在 |
0xD232 |
加载块的至少一个块编号是非法的 |
0xD234 |
块在指定的内存介质或作业中存在两次 |
0xD235 |
该块包含不正确的校验和 |
0xD236 |
该块不包含校验和 |
0xD237 |
您将要加载块两次,即CPU上已存在具有相同时间戳的块 |
0xD238 |
指定的块中至少有一个不是DB |
0xD239 |
至少有一个指定的DB在装载存储器中不可用作链接变量 |
0xD23A |
至少有一个指定的DB与复制和链接的变体有很大不同 |
0xD240 |
违反了协调规则 |
0xD241 |
当前保护级别不允许该功能 |
0xD242 |
处理F块时的保护冲突 |
0xD250 |
更新和模块ID或版本不匹配 |
0xD251 |
操作系统组件序列不正确 |
0xD252 |
校验和错误 |
0xD253 |
没有可用的可执行加载程序; 只能使用存储卡进行更新 |
0xD254 |
操作系统中的存储错误 |
0xD280 |
在S7-300 CPU中编译块时出错 |
0xD2A1 |
块上的另一个块功能或触发器处于活动状态 |
0xD2A2 |
块上的触发器处于活动状态。首先完成调试功能 |
0xD2A3 |
块未激活(链接),块被占用或块当前被标记为删除 |
0xD2A4 |
该块已被另一个块函数处理 |
0xD2A6 |
无法同时保存和更改用户程序 |
0xD2A7 |
块具有“未链接”属性或未处理 |
0xD2A8 |
激活的调试功能阻止将参数分配给CPU |
0xD2A9 |
正在为CPU分配新参数 |
0xD2AA |
当前正在为模块分配新参数 |
0xD2AB |
当前正在更改动态配置限制 |
0xD2AC |
正在运行的激活或取消激活分配(SFC 12)暂时阻止R-KiR过程 |
0xD2B0 |
在RUN(CiR)中配置时发生错误 |
0xD2C0 |
已超出最大工艺对象数 |
0xD2C1 |
模块上已存在相同的技术数据块 |
0xD2C2 |
无法下载用户程序或下载硬件配置 |
0xD401 |
信息功能不可用 |
0xD402 |
信息功能不可用 |
0xD403 |
服务已登录/注销(诊断/ PMC) |
0xD404 |
达到的最大节点数。不再需要登录诊断/ PMC |
0xD405 |
不支持服务或函数参数中的语法错误 |
0xD406 |
当前不可用的必需信息 |
0xD407 |
发生诊断错误 |
0xD408 |
更新已中止 |
0xD409 |
DP总线错误 |
0xD601 |
函数参数中的语法错误 |
0xD602 |
输入的密码不正确 |
0xD603 |
连接已合法化 |
0xD604 |
已启用连接 |
0xD605 |
由于密码不存在,因此无法进行合法化 |
0xD801 |
至少有一个标记地址无效 |
0xD802 |
指定的作业不存在 |
0xD803 |
非法的工作状态 |
0xD804 |
非法循环时间(非法时基或多个) |
0xD805 |
不能再设置循环读取作业 |
0xD806 |
引用的作业处于无法执行请求的功能的状态 |
0xD807 |
功能因过载而中止,这意味着执行读取周期所需的时间比设置的扫描周期时间长 |
0xDC01 |
日期和/或时间无效 |
0xE201 |
CPU已经是主设备 |
0xE202 |
由于闪存模块中的用户程序不同,无法进行连接和更新 |
0xE203 |
由于固件不同,无法连接和更新 |
0xE204 |
由于内存配置不同,无法连接和更新 |
0xE205 |
由于同步错误导致连接/更新中止 |
0xE206 |
由于协调违规而拒绝连接/更新 |
0xEF01 |
S7协议错误:ID2错误; 工作中只允许00H |
0xEF02 |
S7协议错误:ID2错误; 资源集不存在 |
附录二:程序服务调用名称。
服务名称 | 值(描述)
| :----- | :-----|
| UNKNOWN | PI-Service目前不详
| _INSE | PI-Service _INSE(激活PLC模块)
| _DELE | PI-Service _DELE(从PLC的被动文件系统中删除模块)
| P_PROGRAM | PI-Service P_PROGRAM(PLC启动/停止)
| _MODU | PI-Service _MODU(PLC Copy Ram to Rom)
| _GARB | PI-Service _GARB(压缩PLC内存)
| _NLOGIN | PI-Service _NLOGIN(登录)
| _N_LOGOUT | PI-Service _N_LOGOUT(退出)
| _N_CANCEL | PI-Service _N_CANCEL(取消NC报警)
| _N_DASAVE | PI-Service _N_DASAVE(用于将数据从SRAM复制到FLASH的PI-Service)
| _N_DIGIOF P| I-Service _N_DIGIOF(关闭数字化)
| _N_DIGION | PI-Service _N_DIGION(打开数字化)
| _NDZERO | PI-Service _NDZERO(设置所有D nos。对于函数无效\“唯一D号。\”)
| _N_ENDEXT | PI-Service _N_ENDEXT()
| _N_F_OPER | PI-Service _N_F_OPER(以只读方式打开文件)
| _N_OST_OF | PI-Service _N_OST_OF(Overstore OFF)
| _N_OST_ON | PI-Service _N_OST_ON(Overstore ON)
| _NSCALE | PI-Service _NSCALE(测量单位设置(公制< - > INCH))
| _N_SETUFR | PI-Service _N_SETUFR(激活用户帧)
| _N_STRTLK | PI-Service _N_STRTLK(设置全局启动禁用)
| _N_STRTUL | PI-Service _N_STRTUL(重置全局启动禁用)
| _N_TMRASS | PI-Service _N_TMRASS(重置活动状态)
| _N_F_DELE | PI-Service _N_F_DELE(删除文件)
| _N_EXTERN | PI-Service _N_EXTERN(选择外部程序执行)
| _N_EXTMOD | PI-Service _N_EXTMOD(选择外部程序执行)
| _N_F_DELR | PI-Service _N_F_DELR(即使没有访问权限也删除文件)
| _N_F_XFER | PI-Service _N_F_XFER(选择要上传的文件)
| _NLOCKE | PI-Service _NLOCKE(锁定活动文件以进行编辑)
| _N_SELECT | PI-Service _N_SELECT(选择要执行的程序)
| _N_SRTEXT | PI-Service _N_SRTEXT(文件正在/ _N_EXT_DIR中标记)
| _N_F_CLOS | PI-Service _N_F_CLOS(关闭文件)
| _N_F_OPEN | PI-Service _N_F_OPEN(打开文件)
| _N_F_SEEK | PI-Service _N_F_SEEK(定位文件搜索指针)
| _N_ASUP | PI-Service _N_ASUP (分配中断)
| _N_CHEKDM | PI-Service _N_CHEKDM(对D号码启动唯一性检查)
| _N_CHKDNO | PI-Service _N_CHKDNO(检查工具是否具有唯一的D编号)
| _N_CONFIG | PI-Service _N_CONFIG(重新配置机器数据)
| _N_CRCEDN | PI-Service _N_CRCEDN(通过指定边数来创建切削刃)
| _N_DELECE | PI-Service _N_DELECE(删除最前沿)
| _N_CREACE | PI-Service _N_CREACE(创造最前沿)
| _N_CREATO | PI-Service _N_CREATO(创建工具)
| _N_DELETO | PI-Service _N_DELETO(删除工具)
| _N_CRTOCE | PI-Service _N_CRTOCE(生成具有指定边数的工具)
| _N_DELVAR | PI-Service _N_DELVAR(删除数据块)
| _N_F_COPY | PI-Service _N_F_COPY(复制NCK中的文件)
| _N_F_DMDA | PI-Service _N_F_DMDA(删除MDA内存)
| _N_F_PROT | PI-Service _N_F_PROT(为文件指定保护级别)
| _N_F_RENA | PI-Service _N_F_RENA(重命名文件)
| _N_FINDBL | PI-Service _N_FINDBL(激活搜索)
| _N_IBN_SS | PI-Service _N_IBN_SS(设置设置开关)
| _N_MMCSEM | PI-Service _N_MMCSEM(MMC-Semaphore)
| _N_NCKMOD | PI-Service _N_NCKMOD(正在设置NCK工作的模式)
| _N_NEWPWD | PI-Service _N_NEWPWD(新密码)
| _N_SEL_BL | PI-Service _N_SEL_BL(选择新块)
| _N_SETTST | PI-Service _N_SETTST(激活替换工具组的工具)
| _N_TMAWCO | PI-Service _N_TMAWCO(在一个杂志中设置有效磨损组)
| _N_TMCRTC | PI-Service _N_TMCRTC(创建具有指定边数的工具)
| _N_TMCRTO | PI-Service _N_TMCRTO(在工具管理中创建工具)
| _N_TMFDPL | PI-Service _N_TMFDPL(搜索空白处加载)
| _N_TMFPBP | PI-Service _N_TMFPBP(搜索空位)
| _N_TMGETT | PI-Service _N_TMGETT(使用Duplono确定特定工具ID的T编号)
| _N_TMMVTL | PI-Service _N_TMMVTL(加载或卸载工具)
| _N_TMPCIT | PI-Service _N_TMPCIT(设置计件器的增量值)
| _N_TMPOSM | PI-Service _N_TMPOSM(定位杂志或工具)
| _N_TRESMO | PI-Service _N_TRESMO(重置监控值)
| _N_TSEARC | PI-Service _N_TSEARC(通过搜索屏幕进行复杂搜索)
附:
S7协议Pcap数据包下载地址。
链接:百度网盘 请输入提取码
提取码:8djr