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的软元件单元不是并行扫描??