版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

  • 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
    • Image Added

五、 变量配置

变量所需要配置的属性:

  • 变量名称:按照项目规范设计的字符串
  • 设备:选择刚刚配置的设备
  • 周期:根据需要而定,缺省为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.1BitI:2.1I0.0是第一个位,从0开始,最多到I1.7,下一个位是I2.0bool
IW1SignedI:1
int16
Q1.1BitQ:1.1Q0.0是第一个位,从0开始bool
M1.1BitM:1.1M0.0是第一个位,从0开始bool
MW1SignedM:1
int16
C1SignedC:W1C是计时器int16
VW1SignedV:1
int16
VD3Floating PointV:3
float

FAQ

问题1:日志提示总是连接不上,用TCP工具连接端口102缺失可以的

...






FAQ

  • 问题:日志提示总是连接不上,用TCP工具连接端口102缺失可以的
    • 解决:查看日志提示的槽号和实际设备槽号是否一致,不一致需要修改。槽号不对会导致数据发送不了。
  • 问题:驱动日志打印错误:读取失败,错误码:0x8104
  • 问题:驱动日志打印错误:读取DB块失败,错误码:0x05(地址范围越界)


协议分析

基本步骤。读取一个数据,分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