跳到主要内容

西门子S7协议网关

前言

  • 支持单数据读写,多数据读写,大数据量自动分包读写
  • 支持序列化批量多地址且地址不连续的读写
  • 支持读写DB区,I区,Q区,M区,V
  • 支持读写西门子S1500S1200S400S300S200Smart西门子机床828D
  • 支持PLC自动重连

如:对于200smartPLC的V区,就是DB1.X,例如,V1=DB1.1,V100=DB1.100

知识点

知识点1:地址的格式以及对应含义,兼容大小写

简写区域字节索引位索引PLC类型
DB1.1.2DB1区12S1200/S1500
DB2DB2区00S1200/S1500
DB3.3DB3区30S1200/S1500
D1.1.2DB1区12S1200/S1500
Q1.6Q区16S1200/S1500
Q1Q区10S1200/S1500
I2.5I区25S1200/S1500
I2I区20S1200/S1500
M3.2M区32S1200/S1500
M3M区30S1200/S1500
V2.1V区21S200Smart
V2V区20S200Smart

知识点2:访问数据类型与JAVA数据类型和PLC数据类型对应关系

访问数据类型数据类型名称数据大小[位]数据大小[字节]JAVA数据类型PLC数据类型示例
boolean布尔类型11/8BooleanBOOLtrue
byte字节类型81ByteBYTE0x11
uint16无符号2字节整型162IntegerWORD/UINT65535
int16有符号2字节整型162ShortWORD/INT-32760
uint32无符号4字节整型324LongDWORD/UDINT70000
int32有符号4字节整型324IntegerDWORD/DINT-70000
float324字节浮点型324FloatREAL3.14
float648字节浮点型648DoubleLREAL3.14
string字符型81StringStringABC
time时间/耗时324LongTime100ms
date日期162LocalDateDate2023-04-03
timeOfDay一天中的时间324LocalTimeTimeOfDay10:22:11
dtl日期+时间9612LocalDateTimeDTL2023-04-03 10:22:11

知识点3:PLC地址与本项目地址和数据类型的对应关系

PLC地址位大小字节大小访问地址访问数据类型PLC类型
DB100.DBX0.011/8DB100.0.0booleanS1200/S1500
DB100.DBB581DB100.5byteS1200/S1500
DB100.DBW6162DB100.6uint16/int16S1200/S1500
DB100.DBD3324DB100.3uint32/int32/float32S1200/S1500
VB10081V100byteS200Smart
VW100162V100uint16/int16S200Smart
VD100324V100uint32/int32/float32S200Smart
MB181M1byte-
MW1162M1uint16/int16-
MD1324M1uint32/int32/float32-

常见问题

1、为什么PLC能写入数据,但是checkConnected 却是false呢?

通信采用懒加载,读写的时候才会触发连接,将checkConnected放在write或read后就变成true。

2、在PLC关闭之后获取异常,在PLC重启之后自动连入该怎么处理?

内部支持断线重连,每次触发读写操作的时候,若PLC已经断线,则触发重连操作。

3、当反馈的报错信息为“未在模块上实现此服务或报告了帧错误”,原因是什么?

由于PLC没有该地址块数据,或者该地址数据不支持访问。

4、PLC通信过程中最大的读写数据字节大小?

PLC的网络通信,根据不同型号PLC的PDULength而定,S1200 = 240,S1500 = 960,总之有240, 480, 960。

最大读取字节数组大小是222 = 240 - 18, 462 = 480 - 18, 942 = 960 - 18。

目前PDULength默认都为240,可自行调整。

根据测试S1200[CPU 1214C],单次读多字节
发送:最大字节读取长度是 216 = 240 - 24, 24(请求报文的PDU)=10(header)+14(parameter)
接收:最大字节读取长度是 222 = 240 - 18, 18(响应报文的PDU)=12(header)+2(parameter)+4(dataItem)

根据测试S1200[CPU 1214C],单次写多字节
发送:最大字节写入长度是 212 = 240 - 28, 28(请求报文的PDU)=10(header)+14(parameter)+4(dataItem)
接收:最大字节写入长度是 225 = 240 - 15, 15(响应报文的PDU)=12(header)+2(parameter)+1(dataItem)

5、批量读写数据时,单次通信过程中,最多读写多少数据?

PDU length数据类型字节数量(写)最多个数(读)最多个数PLC
240boolean / byte11218S1200 / S200Smart
240uint16 / int1621218S1200 / S200Smart
240uint32 / int32 / float3241118S1200 / S200Smart
240float648917S1200 / S200Smart
PDU length数据类型字节数量(写)最多个数(读)最多个数PLC
480boolean / byte12638S400
480uint16 / int1622438S400
480uint32 / int32 / float3242238S400
480float6481835S400
PDU length数据类型字节数量(写)最多个数(读)最多个数PLC
960boolean / byte15278S1500
960uint16 / int1624978S1500
960uint32 / int32 / float3244578S1500
960float6483872S1500

6、PLC初始化参数

PLC最大 PDU lengthRackSlot
S200_SMART24001
S30024002
S40048003
S120024001
S150096001

7、一般PLC同时在线连接数量有限,切勿重复new S7PLC()!!!