西门子SCL---S7通信|世界播资讯

来源: 腾讯云 时间:2022-12-07 15:01:11


【资料图】

西门子S7通信为品牌内部的通信方式。借由此,各个系列的CPU可建立或单边或双边的通道从而建立通信。对于LAD形式的S7通信已有详细的介绍,本文仅通过SCL实现S7通信的方式来介绍使用SCL编写项目程序。(附:LAD实现S7通信西门子官方链接。)

https://www.ad.siemens.com.cn/productportal/Prods/S7-1200_PLC_EASY_PLUS/SmartSMS/021.html

首先要明确的是S7通信是立足于TCP层的通信协议,实际的交讯需要连接网线。而后,在本地PC端确认参与此次通信的多台CPU在同一网段内响应。
S7通信协议参考模型
在Portal内组态多台CPU,开放CPU→→属性→→常规→→防护与安全→→连接机制→→来自其他远程对象的PUT/GET通信访问,设备和网络的组态画面内将各个CPU连接在同一个子网。     新建FB_PUT_GET底层块,调用通信库内 GET 和 PUT 的多重实例(仅显示分配参数),点击#GET_Instance AND #PUT_Instance 组态实例的块参数和连接参数,匹配对应的CPU。(200smart不支持双边通信)到此,PUT / GET 实例中就会自动映射出当前连接设备的ID参数。
PUT多重实例组态
#PUT_Instance(ID := W#16#100,    //用于指定与伙伴 CPU 连接的寻址参数。              ADDR_1 := #rePutRemoteAAddr,              //指向伙伴 CPU 上用于写入数据的区域的指针。              // 指针 REMOTE 访问某个数据块时,必须始终指定该数据块。              //示例:P#DB10.DBX5.0 字节 10。              //传送数据结构(例如 Struct)时,参数 ADDR_i 处必须使用数据类型 CHAR。              SD_1 := #varPutLocadAddr              //指向本地 CPU 上包含要发送数据的区域的指针。              //仅支持 BOOL、BYTE、CHAR、WORD、INT、DWORD、DINT 和 REAL 数据类型。              //传送数据结构(例如 Struct)时,参数 SD_i 处必须使用数据类型 CHAR。              );以上为已经组态好的PUT实例。
(****************状态参数 NDR: 0:作业尚未开始或仍在运行。1:作业已成功完成。******************)IF NOT #GET_Instance.REQ AND (#GET_Instance.NDR OR #GET_Instance.ERROR OR NOT #NC) THEN    //GET指令未请求            上次GET执行DONE       GET执行报错中       单次执行标志位    #GET_Instance.REQ := 1;    //执行GET指令END_IF;IF #GET_Instance.NDR THEN    //GET执行DONE    #bGetDone := TRUE;    //GET指令DONE标志位    #GET_Instance.REQ := 0;    //GET使能复位END_IF;IF #GET_Instance.ERROR OR #GET_Instance.STATUS=25 THEN    //GET指令报错               GET指令通信状态正常标志位    #bGetDone := FALSE;    //GET指令DONE标志位    #GET_Instance.REQ := 0;    //GET使能复位END_IF;IF (#GET_Instance.STATUS=0 AND NOT #GET_Instance.NDR) THEN    //执行成功时,输出参数 NDR(“done”)处的信号状态为“TRUE”,且输出参数 STATUS    //(“status”)的值为“16#0000”。    #GET_Instance.REQ := NOT #GET_Instance.REQ;    //GET使能状态取反END_IF;//PUTIF #PUT_Instance.REQ = 0 THEN    //PUT指令使能标志位    IF #PUT_Instance.DONE OR #PUT_Instance.ERROR OR NOT #NC THEN        //PUT指令DONE            PUT指令报错标志位                  #PUT_Instance.REQ := 1;        //PUT指令使能    END_IF;END_IF;IF #PUT_Instance.DONE THEN    //PUT指令DONE信号    #bPutDone := TRUE;    //PUT指令完成标志位    #PUT_Instance.REQ := 0;    //PUT指令使能复位END_IF;IF (#PUT_Instance.ERROR OR #PUT_Instance.STATUS=25) AND #PUT_Instance.REQ THEN    //如果(报警 或者 已开始通信。作业正在处理。) 与PUT指令使能信号     #bPutDone := FALSE;    //PUT指令完成信号复位    #PUT_Instance.REQ := 0;    //PUT指令使能复位END_IF;IF (#PUT_Instance.STATUS = 0 AND NOT #PUT_Instance.DONE) THEN    //执行成功时,输出参数 DONE(“done”)处的信号状态为“TRUE”,且输出    //参数 STATUS(“status”)的值为“16#0000”。    #PUT_Instance.REQ := NOT #PUT_Instance.REQ;    //PUT指令使能取反END_IF;//Error//GET/PUT指令报错标志位及报警信息赋值  IF #GET_Instance.ERROR OR #PUT_Instance.ERROR THEN    #bError := TRUE;    IF #GET_Instance.ERROR THEN        #wErrorID := #GET_Instance.STATUS;    END_IF;    IF #PUT_Instance.ERROR THEN        #wErrorID := #PUT_Instance.STATUS;    END_IF;ELSE    #wErrorID := 0;    #bError := FALSE;END_IF;IF NOT #NC THEN    #NC := 1;END_IF;底层块FB_PUT_GET结束。
通信时钟块变量定义
另外新建通信时钟块FB_Heart用以反馈通信状态异常与否。#IEC_Timer_0_Instance_2(IN := NOT #bInHeart,                        PT := t#1m);//1分钟无响应报警时钟#IEC_Timer_0_Instance_1(IN := #bInHeart,                        PT := t#1m);IF #IEC_Timer_0_Instance_1.Q OR #IEC_Timer_0_Instance_2.Q THEN    // Statement section IF    #bTimeOut := 1;ELSE    #bTimeOut := 0;END_IF;#bOutHeart := "Clock_1Hz";开放#bInHeart变量与伙伴CPU的心跳信号绑定,反馈当前通信状态。通信时钟块FB_Heart结束。
所有底层块编写结束。新建与伙伴CPU交互的数据块以及调用底层的应用块。通信的状态可以自建结构体将错误代码和完成信号输出储存。
应用块调用底层块
#PUT_GET_Instance(wID := 16#100,                  bGetDone => "FB_S7ComunicateData".PLC_STATUS.bGetDone,                  bPutDone => "FB_S7ComunicateData".PLC_STATUS.bPutDone,                  bError => "FB_S7ComunicateData".PLC_STATUS.通讯错误,                  wErrorID => "FB_S7ComunicateData".PLC_STATUS.错误代码,                  reGetRemoteAddr := P#DB1.DBx400.0 WORD 111,                  varGetLocadAddr := P#DB32.DBX0.0 WORD 111,                  rePutRemoteAAddr := P#DB1.DBX436.0 WORD 95,                  varPutLocadAddr := p#db32.dbx224.0 WORD 95);#heart_Instance(bInHeart := "FB_S7ComunicateData".Bool信号只读.心跳信号,                bOutHeart => "FB_S7ComunicateData".Bool信号只写.心跳信号,                bTimeOut => "FB_S7ComunicateData".PLC_STATUS.心跳超时);应用块使用指针将 PUT / GET 引至目标数据地址并标记数据长度。此处的索引地址和实际数据块的数据内容长度须保持一致,且数据块不可以使用优化的块访问功能。应用块结束。
需要特别注意的是S7-200SMART作为伙伴CPU有几点特殊项。1.200smart作为伙伴CPU只支持S7单边通信;2.200smart的数据类型与现有大多数的西门子CPU不能完全对应,数据交互需要考虑类型因素;3.200smart的所有V寄存器在本地设备的索引映射均为DB1。
以上,希望对你有所帮助。

上一篇:

下一篇:

X 关闭

热门推荐

2022GoLand最新激活码

2022-12-07   腾讯云

本土新增​4351+20764例

2022-12-07   中工网

本土新增“4351+20764”_看热讯

2022-12-07   人民网科普

yy小青是谁(yy青小丝)

2022-12-07   万能网

百秒易养生|大雪养生正当时,柏子定悸又安神 全球速读

2022-12-07   北京中医药大学东直门医院

穴位养生|大雪节气,少海穴助您心气和

2022-12-07   东直门医院通州院区

金梓伟(金梓):每日热议

2022-12-07   万能网

大雪:又遇大雪时,醉看千城雪

2022-12-07   中国国家地理

中国车企“出海”青睐东盟市场_焦点消息

2022-12-07   中国产业经济信息网

当前通讯!三一智能掘进机打造行业“样板”

2022-12-07   中国产业经济信息网

多家购物中心恢复餐饮堂食-天天简讯

2022-12-07   北京青年报官网

北京“新12条”加力助企纾困

2022-12-07   北京商报官方账号

北京疾控中心发出8条提醒

2022-12-06   环球时报新媒体

冬季食补推荐羊肉面

2022-12-06   北京日报客户端

北京多部门通报-每日视讯

2022-12-06   环球时报新媒体

西门子SCL---Tcp/ip通信

2022-12-06   腾讯云

建筑界的“奥斯卡”!张家口入选!

2022-12-06   张家口新闻网

宫所有歌曲(宫所有歌曲)

2022-12-06   万能网

聘上“烘烤师” 串起“生产链”

2022-12-06   中国产业经济信息网

本土新增“4988+22859”

2022-12-06   人民网科普

国货品牌:锚定高质量锻造硬实力-天天报道

2022-12-06   中国产业经济信息网

技术创新让中国汽车品牌“走红”中东

2022-12-06   中国产业经济信息网

国内首条齿轨列车试验线交付使用

2022-12-06   中国产业经济信息网

卡拉OK到北京

2022-12-06   北京青年报官网

每日消息!SpringBoot基本应用

2022-12-05   腾讯云

Spring Boot + Shiro整合

2022-12-05   腾讯云

前沿资讯!SpringBoot基本使用

2022-12-05   腾讯云

神泣手游(神泣1 4)

2022-12-05   万能网

song ericsson x10铃声

2022-12-05   万能网

每日看点!仙剑5虚拟机镜像

2022-12-05   万能网

今晚再降!北京92号汽油重回“7元时代”

2022-12-05   北京日报客户端

首都博物馆:明日起暂停对外开放

2022-12-05   北京日报客户端

Copyright   2015-2022 中国行业信息网版权所有  备案号:   联系邮箱:29 59 11 57 8@qq.com