回复:如何用VB.NET或C#编写上位程序,通过发报文的方法与西门子315DP/PN的DB块做数据读写操作。

面条

  • 帖子

    59
  • 精华

    2
  • 被关注

    9

论坛等级:游侠

注册时间:2008-05-13

普通 普通 如何晋级?

发布于 2015-10-26 21:51:39

2楼

 

如何与S7PLC建立连接

 

S7PLC的RFC1006协议使用的端口为102端口

我们通过TCP与PLC的102端口建立TCP连接。这一步懂网络编程的人都知道如何处理,我就不班门弄斧了。

建立TCP连接后,向该连接发送ISO连接请求帧,等待PLC响应连接确认帧。

例子:

Tx: 03 00 00 16 11 E0 00 00 cc cc 00 C1 02 10 11 C2 02 03 02 C0 01 0A

Rx: 03 00 00 16 11 D0 cc cc ss ss 00 C0 01 0A C1 02 10 11 C2 02 03 02

其中cc cc可以为任意数,请求帧与确认帧数值相同,可以理解为客户端Client-Handler,以下包含cc cc的地方与该处含义相同。

其中ss ss可以为任意数,可以理解为客户端Server-Handler,以下包含ss ss的地方与该处含义相同。

PLC响应连接确认帧后,再向该连接发送ISO数据帧,等待PLC响应一个数据帧。该数据帧为特定数据帧,参数部分含义不清楚。

例子:

Tx: 03 00 00 19 02 F0 80 32 01 00 00 cc cc 00 08 00 00 F0 00 00 01 00 01 01 E0

Rx: 03 00 00 1B 02 F0 80 32 03 00 00 cc cc 00 08 00 00 00 00 F0 00 00 01 00 01 00 F0

 

PLC正常响应该数据帧后,就正式与PLC建立了ISO_on_TCP连接。


读例子:

读I0.0

请求帧:03 00 00 1F 02 F0 80 32 01 00 00 cc cc 00 0E 00 00 04 01 12 0A 10 01 00 01 00 00 81 00 00 00

响应帧:03 00 00 1A 02 F0 80 32 03 00 00 cc cc 00 02 00 05 00 00 04 01 FF 03 00 01 00

返回值:false

 

读Q0.1

请求帧:03 00 00 1F 02 F0 80 32 01 00 00 cc cc 00 0E 00 00 04 01 12 0A 10 01 00 01 00 00 82 00 00 01

响应帧:03 00 00 1A 02 F0 80 32 03 00 00 cc cc 00 02 00 05 00 00 04 01 FF 03 00 01 00

返回值:false

 

读M0.2

请求帧:03 00 00 1F 02 F0 80 32 01 00 00 cc cc 00 0E 00 00 04 01 12 0A 10 01 00 01 00 00 83 00 00 02

响应帧:03 00 00 1A 02 F0 80 32 03 00 00 cc cc 00 02 00 05 00 00 04 01 FF 03 00 01 01

返回值:true

 

读DB1.DBX0.3

请求帧:03 00 00 1F 02 F0 80 32 01 00 00 cc cc 00 0E 00 00 04 01 12 0A 10 01 00 01 00 01 84 00 00 03

响应帧:03 00 00 1A 02 F0 80 32 03 00 00 cc cc 00 02 00 05 00 00 04 01 FF 03 00 01 01

返回值:true

 

读IB16

请求帧:03 00 00 1F 02 F0 80 32 01 00 00 cc cc 00 0E 00 00 04 01 12 0A 10 02 00 01 00 00 81 00 00 80

响应帧:03 00 00 1A 02 F0 80 32 03 00 00 cc cc 00 02 00 05 00 00 04 01 FF 04 00 08 34

返回值:0x34

 

读QW24

请求帧:03 00 00 1F 02 F0 80 32 01 00 00 cc cc 00 0E 00 00 04 01 12 0A 10 02 00 02 00 00 82 00 00 C0

响应帧:03 00 00 1B 02 F0 80 32 03 00 00 cc cc 00 02 00 06 00 00 04 01 FF 04 00 10 34 56   

返回值:0x3456

 

读MW10~MW20

请求帧:03 00 00 1F 02 F0 80 32 01 00 00 cc cc 00 0E 00 00 04 01 12 0A 10 02 00 0A 00 00 83 00 00 50

响应帧:03 00 00 23 02 F0 80 32 03 00 00 cc cc 00 02 00 0E 00 00 04 01 FF 04 00 50 12 34 56 78 9A BC DE F0 43 21

返回值:0x1234|0x5678|0x9ABC|0xDEF0|0x4321

读DB1.DBD2

请求帧:03 00 00 1F 02 F0 80 32 01 00 00 cc cc 00 0E 00 00 04 01 12 0A 10 02 00 04 00 01 84 00 00 10

响应帧:03 00 00 1D 02 F0 80 32 03 00 00 00 2D 00 02 00 08 00 00 04 01 FF 04 00 20 12 34 56 78

返回值:0x12345678

 

多组读取例子

读DB1.DBD2和DB2.DBW10~DB2.DBW20

请求帧:03 00 00 2B 02 F0 80 32 01 00 00 cc cc 00 1A 00 00 04 02 12 0A 10 02 00 04 00 01 84 00 00 10 12 0A 10 02 00 0A 00 00 83 00 00 50

响应帧:03 00 00 2B 02 F0 80 32 03 00 00 00 04 00 02 00 16 00 00 04 02 FF 04 00 20 12 34 56 78 FF 04 00 50 00 00 BF 1F C6 66 42 62 E4 00

返回值: 0x12345678(组1)

        0x0000|0xBF1F|0xC666|0x4262|0xE400(组2)


写例子:

写Q0.1为true

请求帧:03 00 00 24 02 F0 80 32 01 00 00 cc cc 00 0E 00 05 05 01 12 0A 10 01 00 01 00 00 82 00 00 01 00 03 00 01 01

响应帧:03 00 00 16 02 F0 80 32 03 00 00 cc cc 00 02 00 01 00 00 05 01 FF

 

写M0.2为true

请求帧:03 00 00 24 02 F0 80 32 01 00 00 cc cc 00 0E 00 05 05 01 12 0A 10 01 00 01 00 00 83 00 00 02 00 03 00 01 01

响应帧:03 00 00 16 02 F0 80 32 03 00 00 cc cc 00 02 00 01 00 00 05 01 FF

 

写DB1.DBX0.3 为false

请求帧:03 00 00 24 02 F0 80 32 01 00 00 cc cc 00 0E 00 05 05 01 12 0A 10 01 00 01 00 01 84 00 00 03 00 03 00 01 00

响应帧:03 00 00 16 02 F0 80 32 03 00 00 cc cc 00 02 00 01 00 00 05 01 FF

 

写QW24 为0x3456

请求帧:03 00 00 25 02 F0 80 32 01 00 00 cc cc 00 0E 00 06 05 01 12 0A 10 02 00 02 00 00 82 00 00 C0 00 04 00 10 34 56

响应帧:03 00 00 16 02 F0 80 32 03 00 00 cc cc 00 02 00 01 00 00 05 01 FF

 

写MW10~MW20为0x1234|0x5678|0x9ABC|0xDEF0|0x4321

请求帧:03 00 00 2D 02 F0 80 32 01 00 00 cc cc 00 0E 00 0E 05 01 12 0A 10 02 00 0A 00 00 83 00 00 50 00 04 00 50 12 34 56 78 9A BC DE F0 43 21

响应帧:03 00 00 16 02 F0 80 32 03 00 00 cc cc 00 02 00 01 00 00 05 01 FF

 

写DB1.DBD2为0x12345678

请求帧:03 00 00 27 02 F0 80 32 01 00 00 cc cc 00 0E 00 08 05 01 12 0A 10 02 00 04 00 01 84 00 00 10 00 04 00 20 12 34 56 78

响应帧:03 00 00 16 02 F0 80 32 03 00 00 cc cc 00 02 00 01 00 00 05 01 FF

 

多组写例子

写DB1.DBD2为0x12345678和DB2.DBW10为0xBF1F

请求帧:03 00 00 39 02 F0 80 32 01 00 00 cc cc 00 1A 00 0E 05 02 12 0A 10 02 00 04 00 01 84 00 00 10 12 0A 10 02 00 0A 00 00 83 00 00 50 00 04 00 20 12 34 56 78 00 04 00 10 BF 1F

响应帧:03 00 00 17 02 F0 80 32 03 00 00 cc cc 00 02 00 02 00 00 05 02 FF FF




评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

通信与网络组件

共有4476条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。