故事作者:突然,后

最近创作

看看TA的故事

【西门子技术π-从S7-300400到S7-1500移植与更新替代】-ANY和Variant的使用案例

已锁定

突然,后

  • 帖子

    58
  • 精华

    0
  • 被关注

    4

论坛等级:游侠

注册时间:2018-08-01

黄金 黄金 如何晋级?

【西门子技术π-从S7-300400到S7-1500移植与更新替代】-ANY和Variant的使用案例

1808

1

2020-08-16 01:47:08

1.应用的基本信息

   基本应用信息描述(您所经历过的现场规模,例如硬件和网络配置、CPU的类型、版本以及个数等。您在项目的职责,例如项目负责人、主要或者辅助设计、编程调试者。)

    目的:S7-300中ANY到S7-1500后,用Variant进行替代;这里我分别写出了ANY和Variant的使用。

2.问题描述

     升级替代过程中出现的问题或者功能对比(描述移植或者使用S7-1500更新替代功能过程中的问题情况或者功能对比,语言简要、故障要点突出,现象表达清楚,为了清晰描述问题的原因,需要配图。)

    1、对于参数类型ANY的使用 :

               

     2、可以按照如下方式对ANY的10个字节进行解析。

                

       2、例如:利用它做一个可以输入任意长度数据然后求和,如下图。因为这里我多次判断了输入的数据类型,所以整个程序较长。早些年写的。

                 

       因为图片导致文件的大小超过了1M,所以只好将程序复制过来;

//********判断输入的数据类型*******//

      L     P##P_ADD

      LAR1 

//对ANY进行解析

      L     B [AR1,P#1.0]

      T     #P_IN.P_1

 

      L     W [AR1,P#2.0]               //数据长度

      T     #P_IN.P_23

 

      L     W [AR1,P#4.0]

      T     #P_IN.P_45

 

      L     D [AR1,P#6.0]

      T     #P_IN.P_6789

      LAR1 

      L     0

      T     #SUM_DR.DINTS

      T     #SUM_DR.REALS

      OPN   DB [#P_IN.P_45]

 

      L     #P_IN.P_1

      JL    INTC                        //不满足以下所有跳转条件时,跳转

      JU    INTC                        //当累加器1的低字节=0时跳转;空指针

      JU    INTC                        //当累加器1的低字节=1时跳转;BOOL

 

      JU    INTB                        //当累加器1的低字节=2时跳转;BYTE

      JU    INTC                        //当累加器1的低字节=3时跳转;CHAR

 

      JU    INTW                        //当累加器1的低字节=4时跳转;WORD

      JU    INTW                        //当累加器1的低字节=5时跳转;INT

 

      JU    INTD                        //当累加器1的低字节=6时跳转;DWORD

      JU    INTD                        //当累加器1的低字节=7时跳转;DINT

      JU    INTR                        //当累加器1的低字节=8时跳转;REAL

 

      JU    INTC                        //当累加器1的低字节=9时跳转;DATE

 

      JU    INTC                        //当累加器1的低字节=10时跳转;TIME_OF_DAY

      JU    INTC                        //当累加器1的低字节=11时跳转;TIME

 

      JU    INTC                        //当累加器1的低字节=12时跳转;S5TIME

 

 

INTC: JU    COMI                        //跳出JL指令

//********若为BYTE求和***********//

 

INTB: L     #P_IN.P_23

FOR1: T     #FOR

 

      L     #SUM_DR.DINTS

      L     B [AR1,P#0.0]

      +I   

      T     #SUM_DR.DINTS

 

      +AR1  P#1.0

 

      L     #FOR

      LOOP  FOR1

 

      JU    COMI

//********若为INT求和***********//

 

INTW: L     #P_IN.P_23

FOR2: T     #FOR

 

      L     #SUM_DR.DINTS

      L     W [AR1,P#0.0]

      ITD  

      +D   

      T     #SUM_DR.DINTS

 

      +AR1  P#2.0

 

      L     #FOR

      LOOP  FOR2

 

      JU    COMI

//********若为DINT求和***********//

INTD: L     #P_IN.P_23

FOR3: T     #FOR

 

      L     #SUM_DR.DINTS

      L     D [AR1,P#0.0]

      +D   

      T     #SUM_DR.DINTS

 

      +AR1  P#4.0

 

      L     #FOR

      LOOP  FOR3

 

      JU    COMI

 

//********若为REAL求和***********//

INTR: L     #P_IN.P_23

FOR4: T     #FOR

 

      L     #SUM_DR.REALS

      L     D [AR1,P#0.0]

      +R   

      T     #SUM_DR.REALS

 

      +AR1  P#4.0

 

      L     #FOR

      LOOP  FOR4

 

 

      JU    COMI

 

 

//***************判断OUT接口中外部的数据类型************//

COMI: L     P##SUM

      LAR2 

 

      L     B [AR2,P#1.0]

      T     #P_OUT.P_1

 

      L     W [AR2,P#2.0]               //数据长度

      T     #P_OUT.P_23

 

      L     W [AR2,P#4.0]

      T     #P_OUT.P_45

 

 

      L     D [AR2,P#6.0]

      T     #P_OUT.P_6789

      LAR2 

 

 

      OPN   DB [#P_OUT.P_45]

 

      L     #P_OUT.P_1

      JL    OUTC                        //不满足以下所有跳转条件时,跳转

      JU    OUTC                        //当累加器1的低字节=0时跳转;空指针

      JU    OUTC                        //当累加器1的低字节=1时跳转;BOOL

 

      JU    OUTB                        //当累加器1的低字节=2时跳转;BYTE

      JU    OUTC                        //当累加器1的低字节=3时跳转;CHAR

 

      JU    OUTW                        //当累加器1的低字节=4时跳转;WORD

      JU    OUTW                        //当累加器1的低字节=5时跳转;INT

 

      JU    OUTD                        //当累加器1的低字节=6时跳转;DWORD

      JU    OUTD                        //当累加器1的低字节=7时跳转;DINT

      JU    OUTR                        //当累加器1的低字节=8时跳转;REAL

 

      JU    OUTC                        //当累加器1的低字节=9时跳转;DATE

 

      JU    OUTC                        //当累加器1的低字节=10时跳转;TIME_OF_DAY

      JU    OUTC                        //当累加器1的低字节=11时跳转;TIME

 

      JU    OUTC                        //当累加器1的低字节=12时跳转;S5TIME

 

OUTC: JU    COMO

 

 

//*************根据外部接口的数据类型选择输出**************//

OUTB: L     #SUM_DR.DINTS               //若外部填的字节

      T     B [AR2,P#0.0]

      JU    COMO

 

OUTW: L     #SUM_DR.DINTS               //若外部填的INT

      T     W [AR2,P#0.0]

      JU    COMO

 

OUTD: L     #SUM_DR.DINTS               //若外部填的DINT

      T     D [AR2,P#0.0]

      JU    COMO

 

OUTR: L     #SUM_DR.REALS               //若外部填的浮点数

      T     D [AR2,P#0.0]

      JU    COMO

//*************将块的ENO置位1**************//

COMO: SET  

      SAVE 

 

3.问题的分解和解决 

3.1 故障或问题分析(根据故障或问题,进行分析,从而提出潜在的一些解决方案用于解决该问题)

      1、在S7-1500中REF和Variant.直接上图。这里只介绍了它的使用。

                

3.2故障或问题处理(根据分析各种导致问题的可能性,逐步排查和测试,描述您解决此问题的操作步骤、想法,最终确认原因,排查和测试过程有条理,思路清晰)

      移植问题示例:

     1、总的来说S7-1500还是方便不少,而且SCL显然也比STL简单方便。

4.经验总结

4.1遗留的问题(问题排查后,是否对解决问题的方式仍然有些疑问或者不理解的地方)

     1、一般使用这些数据都只是在做相同或者相似的功能。即做库。

     2、如果已经知道了具体要操作的数据类型,一般来说还是结构和UDT更加方便

4.2改进方法(解决问题后,根据后期的理解,可以提出更好的解决方式或建议)

    1、S7-1200也能用REF就好了。

    2、无

4.3 对S7-1500新功能或者更新替代的方式和方法的一些看法和建议(例如是否节省时间、功能是否友好,维护和编程更易于管理等)

       1、S7-1500的软元件单元不是并行扫描??

 

 

【西门子技术π-从S7-300400到S7-1500移植与更新替代】-ANY和Variant的使用案例 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3243条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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