[西门子] 西门子 S7-1200 系列十七:干货!实例讲解如何实现s7-1200(150...

[复制链接]
查看121 | 回复0 | 2024-6-13 19:08:19 | 显示全部楼层 |阅读模式
S7-1200 TCP 通讯简介
S7-1200 CPU 本体上集成了一个 PROFINET 通信口(CPU 1211C - CPU 1214C)或者两个 PROFINET 通信口(CPU  1215C - CPU 1217C),支持以太网和基于 TCP/IP 和 UDP 的通信标准。
image-20240611140514757S7-1200 PLC的TCP通讯特点包括以下几点:
  • 集成以太网接口:S7-1200 PLC配备了集成的以太网接口,支持标准的TCP/IP协议,这使得它可以直接连接到现有的以太网网络中,无需额外的硬件。
  • 易于配置:使用西门子的TIA Portal编程软件,可以方便地配置S7-1200的TCP通讯参数,如IP地址、子网掩码、默认网关以及端口号等。
  • 开放性:由于TCP/IP协议的开放性和普遍性,S7-1200可以与各种使用TCP/IP协议的设备进行通讯,包括其他PLC、HMI、上位机、数据库服务器等。
  • 可靠性:TCP协议提供了一种可靠的传输机制,确保数据在传输过程中不会丢失或出错。如果发生数据包丢失,TCP会自动重传,直到数据正确到达目的地。
  • 数据交换:S7-1200可以通过TCP协议与网络中的其他设备进行数据交换,支持实时数据监控、远程编程和诊断等功能。
  • 支持标准编程语言:S7-1200支持LAD、FBD、STL和SCL等编程语言,这些语言可以用来编写TCP通讯所需的程序代码。
  • 安全性:虽然TCP本身不提供加密或认证机制,但可以在应用层实现额外的安全性措施,如使用VPN、防火墙或加密通讯等手段来保护数据安全。
  • 性能:S7-1200的TCP通讯性能能够满足大多数工业应用的需求,提供稳定可靠的数据传输。
  • 高级功能:S7-1200支持高级的通讯功能,如多客户端连接、数据块交换、动态IP地址分配等。
  • 跨平台兼容性:由于TCP/IP协议的普及,S7-1200可以与运行不同操作系统和应用程序的设备进行通讯,如Windows、Linux、Mac等。
S7-1200 与 S7-1200 之间的以太网通信可以通过 TCP 协议来实现,使用的通信指令是在双方 CPU 调用 T-block  (TSEND_C,TRCV_C,TCON,TDISCON,TSEND,TRCV) 指令来实现。通信方式为双边通信,因此 TSEND 和 TRCV  必须成对出现。
注:
  • TSEND_C,TRCV_C适用于s7-1200 CPU版本V4.0及以下版本,因此文章不再赘述;
  • 由于s7-1200 tcp篇幅过长且参数过多,文章将以多部分说明如何实现TCP通讯,敬请期待
S7-1200 与 s7-1200 CPU TCP通讯指令说明 TCON
"TCON": 建立通信连接(需要指定背景数据块)
使用“TCON”指令可设置并建立通信连接。设置并建立连接后,CPU 将自动持续监视该连接。“TCON”为异步执行指令。
为参数 CONNECT 和 ID 指定的连接数据用于设置通信连接。要建立该连接,必须检测到参数 REQ 的上升沿。成功建立连接后,参数 DONE 将被设置为“1”。
image-20240611150548797“TCON”指令参数说明如下:
[tr]参数
声明
数据类型
存储区
说明
[/tr]
REQ
Input
BOOL
I、Q、M、D、L 或常量
在上升沿时,启动相应作业以建立 ID 所指定的连接。
ID
Input
CONN_OUC
I、Q、M、D、L 或常量
指向已分配连接的引用。
值范围:W#16#0001 到 W#16#0FFF
CONNECT
InOut
TCON_Param
D
指向连接描述的指针
DONE
Output
BOOL
I、Q、M、D、L
状态参数,可具有以下值:
0:作业尚未启动或仍在执行
1:作业已执行,且无任何错误
BUSY
Output
BOOL
I、Q、M、D、L
状态参数,可具有以下值:
0:作业尚未启动或已完成
1:作业尚未完成。无法启动新作业
ERROR
Output
BOOL
I、Q、M、D、L
状态参数 ERROR:
0:无错误
1:出现错误
STATUS
Output
WORD
I、Q、M、D、L
指令的状态
“TCON”中connect引脚TCON_Param说明:
[tr]字节
参数
数据类型
起始值
说明
[/tr]
0 到 1
block_length
UINT
64
长度:64 个字节(固定)
2 到 3
id
CONN_OUC
1
引用该连接(值范围:1 到 4095)。
对于 TSEND_C、TRCV_C 或 TCON 指令,必须在 ID 中指定该参数的值。
4
connection_type
USINT
17
连接类型:
17:TCP (17 dec = 0x11 hex)
18:ISO-on-TCP (18 dec = 0x12 hex)
19:UDP(十进制 19 = 十六进制 0x13)
5
active_est
BOOL
TRUE
连接建立类型的标识符。UDP 总是为 FALSE,这是因为数据可以通过本地 ID 进行发送和接收。
以下设置适用于 TCP 和 ISO-on-TCP:
FALSE:被动连接建立
TRUE:主动连接建立
6
local_device_id
USINT
1
本地 PN/IE 接口的 ID。
7
local_tsap_id_len
USINT
0
所用参数 local_tsap_id 的长度(字节);可能值:
0 或 2(连接类型为 17 (TCP) 时)
主动端的值只能为 0。
2 到 16(连接类型为 18 (ISO-on-TCP) 时)
2,连接类型为 19 (UDP) 时
8
rem_subnet_id_len
USINT
0
该参数未使用。
9
rem_staddr_len
USINT
4
伙伴端点的地址长度(字节):
0:未指定,即参数 rem_staddr 不相关。
4:参数 rem_staddr 中的有效 IP 地址
(仅限 TCP 和 ISO-on-TCP)
10
rem_tsap_id_len
USINT
2
所用参数 rem_tsap_id 的长度(字节);可能值:
0 或 2(连接类型为 17 (TCP) 时)
被动端的值只能为 0。
2 到 16(连接类型为 18 (ISO-on-TCP) 时)
0,连接类型为 19 (UDP) 时
11
next_staddr_len
USINT
0
该参数未使用。
12 到 27
local_tsap_id
BYTE 类型的 ARRAY [1..16]
-
连接的本地地址部分:
TCP 和 UDP:本地端口号(可能值:1 到 49151;建议值:2000 到 5000);
local_tsap_id[1] = 端口号的高位字节(十六进制表示);
local_tsap_id[2] = 端口号的低位字节(十六进制表示);
local_tsap_id[3-16] = 不相关
ISO-on-TCP:本地 TSAP ID:
local_tsap_id[1] = B#16#E0;
local_tsap_id[2] = 本地端点的机架和插槽(位 0 到 4:插槽号;位 5 到 7:机架号);
?local_tsap_id[3-16] = TSAP 扩展(可选)
注:请确保 local_tsap_id 的每个值在 CPU 中都唯一。
28 到 33
rem_subnet_id
USINT 类型的 ARRAY [1..6]
-
该参数未使用。
34 到 39
rem_staddr
USINT 类型的 ARRAY [1..6]
-
仅限 TCP 和 ISO-on-TCP:伙伴端点的 IP 地址,例如,192.168.002.003:
rem_staddr[1] = 192
rem_staddr[2] = 168
rem_staddr[3] = 002
rem_staddr[4] = 003
rem_staddr[5-6]= 无关
40 到 55
rem_tsap_id
BYTE 类型的 ARRAY [1..16]
-
连接的伙伴地址部分
TCP:伙伴端口号(可能值:1 到 49151;建议值:2000 到 5000);
rem_tsap_id[1] = 端口号的高位字节(十六进制表示);
rem_tsap_id[2] = 端口号的低位字节(十六进制表示);
rem_tsap_id[3-16] = 不相关
ISO-on-TCP:伙伴 TSAP-ID:
rem_tsap_id[1] = B#16#E0;
rem_tsap_id[2] = 伙伴端点的机架和插槽(位 0 到 4:插槽号;位 5 到 7:机架号);
rem_tsap_id[3-16] = TSAP 扩展(可选)
UDP:该参数未使用。
56 到 61
next_staddr
BYTE 类型的 ARRAY [1..6]
-
该参数未使用。
62 到 63
spare
WORD
W#16#0000
预留。
ERROR 和 STATUS 参数说明如下:
[tr]ERROR
STATUS* (W#16#...)
说明
[/tr]
0
0000
已成功建立连接。
0
7000
当前无作业处理
0
7001
启动作业执行,建立连接。
0
7002
正在建立连接(与 REQ 无关)。
1
8085
连接 ID(ID 参数)已经被已组态的连接使用。
1
8086
ID 参数超出了有效范围。
1
8087
已达到最大连接数;无法建立更多连接
1
8089
CONNECT 参数没有指向某个数据块。
1
809A
集成接口不支持参数 CONNECT 中的结构,或长度无效,或连接描述 (SDT) 中指定的的“InterfaceID”错误。
1
809B
TCON_xxx 结构中的 InterfaceId 元素不会引用 CPU 或 CM/CP 接口的硬件标识符,或其值为“0”。
1
80A0
组错误,用于错误代码 W#16#80A1 和 W#16#80A2。
1
80A1
指定的连接或端口正在使用中。
1
80A2
系统正在使用本地或者远程端口。
1
80A3
正尝试重新建立现有连接。
1
80A4
连接远程端点的 IP 地址无效,即它与本地伙伴的 IP 地址重复。
1
80A5
连接 ID 已被使用。
1
80A7
通信错误:在“TCON”完成前执行了“TDISCON”。
1
80B2
CONNECT 参数指向通过属性“仅存储在装载存储器中”生成的某个数据块。
1
80B4
使用 ISO-on-TCP 协议选项 (connection_type =?B#16#12) 建立被动连接时,违反了以下一个或两个条件:
local_tsap_id_len >= B#16#02
local_tsap_id[1] = B#16#E0
local_tsap_id_len >=?B#16#03 时,local_tsap_id[1] 是 ASCII 字符。
local_tsap_id[1] 是 ASCII 字符,且 local_tsap_id_len >=?B#16#03。
1
80B5
连接类型 13 = UDP 仅支持建立被动连接。
1
80B6
SDT TCON_Param 的 connection_type 参数存在参数分配错误。
1
80B7
在进行连接描述的数据块中,以下某个参数错误:block_length、local_tsap_id_len、rem_subnet_id_len、rem_staddr_len、rem_tsap_id_len、next_staddr_len。
注:如果在 TCP 中为被动端调用 TCON,则 local_tsap_id_len 的值必须为 2 且 rem_tsap_id_len 的值必须为 0。
1
80B8
结构元素 ID 和块参数 ID 的连接描述不同。
1
80C3
所有连接资源均已使用。
1
80C4
临时通信错误:
此时无法建立连接。
由于连接路径中防火墙的指定端口未打开,无法建立连接。
接口当前正在接收新参数。
“TDISCON”指令当前正在删除已组态的连接。
S7-1200 与 s7-1200 CPU TCP通讯指令说明 TSEND
TSEND:通过通信连接发送数据(需要指定背景数据块)
使用指令“TSEND”,可以通过现有通信连接发送数据。TSEND 为异步执行指令,用户使用参数 DATA 指定发送区。这包括要发送数据的地址和长度。待发送的数据可以使用除 BOOL 和 Array of BOOL 外的所有数据类型。
image-20240611152051971“TSEND”指令的参数说明如下:
[tr]参数
声明
数据类型
存储区
说明
[/tr]
REQ
Input
BOOL
I、Q、M、D、L 或常量
在上升沿启动发送作业。
ID
Input
CONN_OUC
I、Q、M、D、L 或常量
引用由“TCON”建立的连接。
值范围:W#16#0001 到 W#16#0FFF
LEN
Input
UDINT
I、Q、M、D、L 或常量
随作业发送的最大字节数(S7-1200 的最大允许值:8192,S7-1500 允许的最大值:65536)。
对于 CM?1542-5 的 FDL 连接,最大长度为 240 个字节。在此,需注意连接伙伴可处理的最大长度。
DATA
InOut
VARIANT
I、Q、M、D、L
指向发送区的指针,该发送区包含要发送数据的地址和长度。该地址引用:
输入的过程映像
输出的过程映像
位存储器
数据块
本地数据
传送结构时,发送端和接收端的结构必须相同。
DONE
Output
BOOL
I、Q、M、D、L
状态参数,可具有以下值:
0:作业尚未启动,或仍在执行过程中
1:作业已经成功完成
BUSY
Output
BOOL
I、Q、M、D、L
状态参数,可具有以下值:
0:作业尚未启动或已完成
1:作业尚未完成。无法启动新作业。
ERROR
Output
BOOL
I、Q、M、D、L
状态参数,可具有以下值:
0:无错误
1:出错
STATUS
Output
WORD
I、Q、M、D、L
指令的状态
注:随作业发送的最大字节数(S7-1200 的最大允许值:8192,S7-1500 允许的最大值:65536)
ERROR和STATUS参数说明:
[tr]ERROR
STATUS* (W#16#...)
说明
[/tr]
0
0000
发送作业已完成且未出错。
0
7000
未激活任何作业处理。
0
7001
启动作业执行,正在发送数据。
处理该作业期间,操作系统访问 DATA 发送区中的数据。
0
7002
作业正在执行(与 REQ 无关)。
处理该作业期间,操作系统访问 DATA 发送区中的数据。
1
8085
参数 LEN 大于所允许的最大值。
S7-1200:8192;S7-1500 (TCP):65536;S7-1500 (FDL):240 / 236
DATA 和 LEN 参数值均为“0”。
1
8086
ID 参数超出了允许的地址范围。
1
8088
LEN 参数大于 DATA 中指定的区域。
1
80A1
通信错误:
尚未建立指定的连接。
正在终止指定的连接。无法通过此连接进行传送。
正在重新初始化接口。
1
80B1
在当前作业完成前更改了 DATA 参数。
1
80B3
协议选项(连接描述信息内的参数 ConnectionType)被设置为 UDP。UDP 连接使用指令“TUSEND”。
1
80C3
具有该 ID 的块正在一个具有不同优先级的组中处理。
内部资源不足。
1
80C4
临时通信错误:
此时无法建立与伙伴的连接。
接口正在接收新参数设置或正在建立连接。
仅对于 FDL/PROFIBUS:连接伙伴上暂时没有可用的接收资源。连接伙伴尚未就绪,无法接收。
R/H 系统为 SYNCUP 系统状态,或进行了主备份切换。连接关闭。TSEND 停止执行。
1
80C5
通信伙伴终止连接。
远程连接伙伴的 LSAP 未释放
1
80C6
网络错误:
远程伙伴无法访问。
PROFIBUS 物理断开
1
80C7
执行超时。
1
80EE
通信握手尚未完成
1
xxyy, xx > 80
有关常见错误信息,请参见通过输出参数 RET_VAL 评估错误



S7-1200 与 s7-1200 CPU TCP通讯指令说明 TRCV
TRCV:通过通信连接接收数据
使用指令“TRCV”,可以通过现有通信连接接收数据。TRCV 为异步执行指令,
参数 EN_R 设置为值“1”时,启用数据接收。接收到的数据将输入到接收区中。根据所用的协议选项,接收区长度通过参数 LEN 指定(如果 LEN 不等于 0),或者通过参数 DATA 的长度信息来指定(如果 LEN = 0)。
接收数据时,不能更改 DATA 参数或定义的接收区以确保接收到的数据一致。
成功接收数据后,参数 NDR 设置为值“1”。可在参数 RCVD_LEN 中查询实际接收的数据量。
image-20240611153002961"TRCV"指令的参数如下:
[tr]参数
声明
数据类型
存储区
说明
[/tr]
EN_R
Input
BOOL
I、Q、M、D、L 或常量
启用接收功能
ID
Input
CONN_OUC
I、Q、M、D、L 或常量
指向使用“TCON”建立的连接的引用。
值范围:W#16#0001 到 W#16#0FFF
LEN
Input
UDINT
I、Q、M、D、L 或常量
接收区长度(以字节为单位,隐藏)
S7-1200 的最大值:8192;S7-1500 的最大值:65536;CM?1542?5 (FDL) 的最大值:240。
如果在 DATA 参数中使用具有优化访问权限的接收区,LEN 参数值必须为“0”。
ADHOC
Input
BOOL
I、Q、M、D、L 或常量
TCP 协议选项使用 Ad-hoc 模式(隐藏)。
如果未使用 TCP 协议,则 ADHOC 的值需为 FALSE。
DATA
InOut
VARIANT
I、Q、M、D、L
指向接收区的指针
传送结构时,发送端和接收端的结构必须相同。
NDR
Output
BOOL
I、Q、M、D、L
状态参数 (New Data Received):
0:作业尚未启动,或仍在执行过程中
1:接收到新数据
BUSY
Output
BOOL
I、Q、M、D、L
状态参数,可具有以下值:
0:作业尚未启动或已完成
1:作业尚未完成。无法启动新作业
ERROR
Output
BOOL
I、Q、M、D、L
状态参数 ERROR:
0:无错误
1:出错
STATUS
Output
WORD
I、Q、M、D、L
指令的状态
RCVD_LEN
Output
UDINT
I、Q、M、D、L
实际接收到的数据量(以字节为单位)
ERROR 和 STATUS 参数
[tr]ERROR
STATUS* (W#16#...)
说明
[/tr]
0
0000
作业已成功完成。在参数 RCVD_LEN 中输出已接收数据的当前长度。
0
7000
块未做好接收准备。
0
7001
块已经准备好接收,接收作业已激活。
0
7002
中间调用,接收作业正在执行。
注:处理作业期间,数据会写入接收区。此时访问接收区可能会得到不一致的数据。
1
8085
参数 LEN 大于允许的最大值(对于 S7-1200:8192 字节,S7-1500:65536 字节)。
参数 LEN 或 DATA 的值在第一次调用后发生改变。
参数 LEN 与 DATA 的值均为“0”,或 LEN 的长度超出所允许的最大值(S7-1200:8192 字节,S7-1500:65536 字节)。
1
8086
ID 参数超出了有效范围。
1
8088
接收区过小。
参数 LEN 的值大于参数 DATA 中设置的接收区。
1
80A1
通信错误:
尚未建立指定的连接。
正在终止指定的连接。无法通过该连接执行接收作业。
正在重新初始化连接。
1
80B1
在当前作业完成前更改了 DATA 参数。
1
80B3
协议选项(连接描述信息内的参数 connection_type)被设置为 UDP。UDP 连接使用指令“TURCV”。
1
80C3

  • 具有该 ID 的块正在一个具有不同优先级的组中处理。
  • 内部资源不足。
1
80C4
临时通信错误:
  • 此时无法建立与伙伴的连接。
  • 接口正在接收新参数设置或正在建立连接。
  • R/H 系统为 SYNCUP 系统状态,或进行了主备份切换。连接关闭。TRCV 停止执行。
1
80C5
远程伙伴终止了连接。
1
80C6
无法访问远程伙伴(网络错误)。
1
80C7
执行超时。
1
80C9
接收区的长度小于发送数据的长度。
1
80EE
通信握手尚未完成
1
xxyy, xx > 80
有关常见错误信息,请参见通过输出参数 RET_VAL 评估错误



S7-1200 与 s7-1200 CPU TCP通讯指令说明 TDISCON
TDISCON:终止通信连接
指令“TDISCON”为异步执行指令。即,该作业的执行可跨多个调用。可通过调用指令“TDISCON”且 REQ = 1,启动连接终止作业。
成功执行“TDISCON”指令之后,为“TCON”指定的 ID 不再有效,且不能用于进行发送或接收。
image-20240611160325130“TDISCON”指令的参数如下:
[tr]参数
声明
数据类型
存储区
说明
[/tr][tr]S7-1200
S7-1500
[/tr]
REQ
Input
BOOL
I、Q、M、D、L 或常量
I、Q、M、D、L 或常量
控制参数 REQUEST 启动用于终止 ID 所指定的连接的作业。在上升沿时启动该作业。
ID
Input
CONN_OUC (WORD)
D、L 或常量
I、Q、M、D、L 或常量
指向要终止的连接的引用(连接 ID)
值范围:W#16#0001 到 W#16#0FFF
DONE
Output
BOOL
I、Q、M、D、L
I、Q、M、D、L
状态参数:
0:作业未启动,或者仍在执行之中。
1:作业已执行,且无任何错误
BUSY
Output
BOOL
I、Q、M、D、L
I、Q、M、D、L
状态参数:
BUSY = 1:作业尚未完成。
BUSY = 0:作业已完成或尚未启动。
ERROR
Output
BOOL
I、Q、M、D、L
I、Q、M、D、L
状态参数:
ERROR = 0:无错误。
ERROR=1:执行过程中发生错误。有关错误类型的详细信息,请参见“STATUS”。
STATUS
Output
WORD
I、Q、M、D、L
I、Q、M、D、L
状态参数:
错误信息(请参见“ERROR 和 STATUS 参数”)。
ERROR 和 STATUS 参数
[tr]ERROR
STATUS* (W#16#...)
说明
[/tr]
0
0000
已成功终止连接。
0
7000
未激活任何作业处理。
0
7001
开始处理作业,正在终止连接。
0
7002
中间调用(与 REQ 无关),正在终止连接。
1
8086
ID 参数不在允许的取指范围之内。
1
80A3
尝试终止不存在的连接或连接已终止。
1
80C4
临时通信错误:正在为接口分配新参数,或当前正在建立连接。






免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则