...
- S7-200 Smart PPI串口(DB9针)
- S7-200 PPI串口(DB9针)
- S7-300 MPI串口(DB9针)
- S7-200 Smart 网口
- S7-200 网口
- S7-300/S7-400网口
- S7-1200/S7-1500网口。1500网口。需满足以下条件:
- 1、西门子S7-1200/S7-1500如果想要被访问,必须设置:“允许来自远程对象的PUT
- 西门子S7-1200如果想要被访问,必须设置:“允许来自远程对象的PUT/GET通信访问,然后下载到PLC”,并下载到PLC。方法见:西门子S7-1200/1500编程软件博途Step7 V15.1 V16
- 2、西门子S7-1200/S7-1500,DB数据块需取消优化(缺省为优化),否则将只能通过名称访问,通过绝对地址无法访问。eview驱动返回错误码:0x05(地址范围越界)。取消方法见图。取消后,需要重新下载到PLC
通讯方式解释:
- PPI协议是S7-200CPU最基本的通信方式
- MPI协议是S7-300/S7-400CPU最基本的通信方式
CPU见过的CPU
- 300:CPU315-2DP
- 400:CPU416-2DP
- 200 Smart:SR20
- smart200有四种型号 CR、ST、SR、CRS
- CR只能通过以太网进行上下载程序
- ST、SR在软件和固件为V2.3版本 支持使用编程电缆,ST、SR可以通过MicroSD卡把CPU固件更新至2.3版本(不影响程序)
- CRS只有2.3版本(没有以太网口)支持电缆通信
- 200:224
- 1200:1211
- 1500:ET200SP(1510SP)
通讯方式:
- 上位机电脑作为TCP客户端,西门子PLC作为TCP服务端。
...
- 连接方式选择:tcpclient
- ip:西门子PLC的IP,此为通过Step7 编程软件为通讯模块(CP443-1)设定的IP地址。【如果不知道IP,可以尝试将电脑和西门子PLC用网线连接起来,电脑配置192.168.x.y,运行exe,网段输入:192.168.x.1—192.168.x.255,端口输入:102.尝试扫描,看能不能扫描到PLC】
- 端口:102
- 参数1:PLC型号,有如下值(未输入或输入不是下面之一则默认为式:S7-300):
- 200。表示S7-200/S7-200Smart/S7-200CN。
- 300,表示S7-300系列
- 400,表示S7-400系列
- 1200,S7-1200系列
- 1500,表示S7-1500系列
- 示例:
- 200
- 300
- 400
- 1200
- 1500
- 参数2:PLC通讯口。参数2:PLC通讯方式。未输入缺省为TCP(RJ45网口)
- TCP,所有西门子从S7-200到S7-1500均支持TCP网络协议。此时通过RJ45和PLC相连。
- PPI,S7-200/S7-200Smart/S7-200CN支持PPI串口协议。如果连接了PPI DB9针串口,则需要输入PPI,且此时串口波特率需要和PLC一致
- MPI或MPI:x,S7-300/S7-400支持MPI串口协议。如果MPI地址不是2(缺省值),则还需要指定地址。示例:
- MPI
- MPI:2
- MPI:1
- 如果连接了PPI或MPI(DB9针串口),此时串口波特率需要和PLC一致
- 参数3:CPU在机架上的槽号(slot),第一个槽号为1。未输入时默认为1。
- 对S7-200型号该参数无效。
- 对S7-300到S7-1500有效。缺省槽号为1。槽号需要用编程软件看CPU所在槽号。
- 参数4:CPU在的机架号,第一个机架为0。未输入默认为0。
- 对S7-200型号该参数无效。
- 对S7-300到S7-1500有效。缺省机架为0。机架需要用编程软件看CPU所在机架。
- 槽号和机架号,如下面的1200,设备组态菜单可以看到,机架号为:0,CPU所在槽号为:1
五、 变量配置
变量所需要配置的属性:
- 变量名称:按照项目规范设计的字符串
- 设备:选择刚刚配置的设备
- 周期:根据需要而定,缺省为1秒
- 可控制:使能
...
4、寄存器类型为C、T时对应变量的变量地址
- 支持16位无符号整数,地址为:
- C:1
- T:1
4、time_of_day的时间格式 采用uint32,可能是uint64(但是目前unit32 运行正常) 得到的是运行的Ms数
time_of_day的时间格式 采用uint32位 得到的是运行的Ms数
hour 计算结束时间/3600000
Min 计算结束时间%3600000/6000
Sec 计算结束时间%3600000%6000/1000
然后分别计算出时间 字节顺序设置为4 然后做计算
示例:
PLC点表 | PLC数据类型 | eview变量地址 | 说明 | 数据类型 |
DB101W:307 | INT | DB101块内,偏移307开始,取2个字节,转为16位无符号整数 | uint16 | |
DB101D:307 | DINT | DB101:D307 | DB101块内,偏移307开始,取4个字节,转为32位无符号整数 | uint32 |
DB101X:310.2 | BOOL | DB101:X307.2 | DB101块内,偏移307开始的字节内取第3位,转为bool型 | bool |
I2.1 | Bit | I:2.1 | I0.0是第一个位,从0开始,最多到I1.7,下一个位是I2.0 | bool |
IW1 | Signed | I:1 | int16 | |
Q1.1 | Bit | Q:1.1 | Q0.0是第一个位,从0开始 | bool |
M1.1 | Bit | M:1.1 | M0.0是第一个位,从0开始 | bool |
MW1 | Signed | M:1 | int16 | |
C1 | Signed | C:W1 | C是计时器 | int16 |
VW1 | Signed | V:1 | int16 | |
VD3 | Floating Point | V:3 | float |
FAQ
问题1:日志提示总是连接不上,用TCP工具连接端口102缺失可以的
...
FAQ
- 问题:日志提示总是连接不上,用TCP工具连接端口102缺失可以的
- 解决:查看日志提示的槽号和实际设备槽号是否一致,不一致需要修改。槽号不对会导致数据发送不了。
- 问题:驱动日志打印错误:读取失败,错误码:0x8104
- 解决:此时是因为S7 1200/S7-1500CPU的“允许来自远程对象的PUT/GET通信访问”未勾选,参考文档进行勾选并下载。西门子S7-1200/1500编程软件博途Step7 V15.1 V16
- 问题:驱动日志打印错误:读取DB块失败,错误码:0x05(地址范围越界)
- 解决:每个驱动要读写的DB数据块,都需要取消优化,否则只能以名称访问而不能以地址访问。参考文档进行勾选并下载。西门子S7-1200/1500编程软件博途Step7 V15.1 V16
协议分析
基本步骤。读取一个数据,分3步
- 获取pdu大小(固定内容)
发送[022]:03 00 00 16 11 E0 00 00 00 01 00 C1 02 01 00 C2 02 01 01 C0 01 09
接收[022]:03 00 00 16 11 D0 00 01 00 00 00 C1 02 01 00 C2 02 01 01 C0 01 09 - 第二次握手(固定内容)
发送[025]:03 00 00 19 02 F0 80 32 01 00 00 FF FF 00 08 00 00 F0 00 00 01 00 01 07 80
接收[027]:03 00 00 1B 02 F0 80 32 03 00 00 FF FF 00 08 00 00 00 00 F0 01 00 01 00 01 00 F0 - 后续:请求数据包。如请求I1.1
最后3个字节是:偏移量I1.1偏移量是8.倒数第4个字节81表示I。倒数第5个字节为块号,S7-300及以上型号必须==01(I、Q等块)或>=1的DB块号
发送[031]:03 00 00 1F 02 F0 80 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 01 00 01 81 00 00 08
接收[026]:03 00 00 1A 02 F0 80 32 03 00 00 00 54 00 02 00 05 00 00 04 01 FF 04 00 08 06 --I1.1=I1.2=1
...
接收[028]:03 00 00 1D 02 F0 80 32 03 00 00 00 77 00 02 00 08 00 00 04 01 FF 04 00 20 42 C8 38 D5
西门子S7-1200/S7-1500如果想要被访问,必须设置:
1、“允许来自远程对象的PUT/GET通信访问“,然后下载到PLC
2、取消每个DB块的优化。
3、并下载到PLC。-1200如果想要被访问,必须设置:“允许来自远程对象的PUT/GET通信访问,然后下载到PLC”,并下载到PLC。
西门子PLC-1200发送读取数据的请求数据I1.1(eview驱动)
正常读取流程:
获取pdu大小(倒数第4个字节为槽号)
发送[022]:03 00 00 16 11 E0 00 00 00 01 00 C1 02 01 00 C2 02 01 01 C0 01 09 接收[022]:03 00 00 16 11 D0 00 01 00 00 00 C1 02 01 00 C2 02 01 01 C0 01 09
第二次握手 发送[025]:03 00 00 19 02 F0 80 32 01 00 00 FF FF 00 08 00 00 F0 00 00 01 00 01 07 80
接收[027]:03 00 00 1B 02 F0 80 32 03 00 00 FF FF 00 08 00 00 00 00 F0 00 00 01 00 01 00 F0
获取一个数据I1.1。最后3个字节是:偏移量I1.1偏移量是8.倒数第4个字节81表示I。倒数第5个字节为块号,S7-300及以上型号必须==01(I、Q等块)或>=1的DB块号
发送[031]:03 00 00 1F 02 F0 80 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 01 00 01 81 00 00 08
错误返回:
接收[019]:03 00 00 13 02 F0 80 32 02 00 00 00 00 00 00 00 00 81 04 — 返回0x8104,19个字节(而不是64个字节),说明未勾选“允许来自远程对象的PUT/GET通信访问”
下面3个是正确的返回:
接收[026]:03 00 00 1A 02 F0 80 32 03 00 00 00 00 00 02 00 05 00 00 04 01 FF 04 00 08 00 --I1.1==0
接收[026]:03 00 00 1A 02 F0 80 32 03 00 00 00 01 00 02 00 05 00 00 04 01 FF 04 00 08 02 -I1.1值为1
接收[026]:03 00 00 1A 02 F0 80 32 03 00 00 00 54 00 02 00 05 00 00 04 01 FF 04 00 08 06 --I1.1=I1.2=1