[西门子] S7-1200模拟量处理

[复制链接]
查看83500 | 回复0 | 2024-3-28 20:12:42 | 显示全部楼层 |阅读模式
关键词:S7-1200 模拟量 Scale Scale_x


       S7-1200的模拟量处理由于Scale命令不能使用,需要重新编程;

      本文对S7-1200的模拟量处理及调用进行介绍。
      一、存在的问题      在S7-1500 中使用正常的Scale命令:   


       在S7-1200中提示出错:


      因此必须重新修改程序。
      二、修改后的处理方式

       1) 根据西门子的相关资料,Scale的处理方式是:
    OUT = [((FLOAT (IN) – K1)/(K2–K1)) ∗ (HI_LIM–LO_LIM)] + LO_LIM常数“K1”和“K2”的值取决于参数 BIPOLAR 的信号状态。参数 BIPOLAR 可能的信号状态为:信号状态“1”:假设参数 IN 的值为双极性且取值范围是 -27648 到 27648。此时,常数“K1”的值为 -27648.0,而常数“K2”的值为 +27648.0。信号状态“0”:假设参数 IN 的值为单极性且取值范围是 0 到 27648。此时,常数“K1”的值为 0.0,而常数“K2”的值为 +27648.0。     2)Scale_X的处理方式是:


    3)为实现同样的功能,需要对程序进行处理: IF #PIW_IN > 27648 OR #PIW_IN < 0 THEN        #RET_VAL1 := 1;    ELSE        #RET_VAL1 := 0; END_IF;    #AI_Real_Temp := SCALE_X_REAL(MIN := #AI_Struct.LO_LIM, VALUE := #PIW_IN, MAX := #AI_Struct.HI_LIM) / 27648.0;    IF #RET_VAL1 = 0 THEN    ////判断数据转换是否有错  =0 表示无错误            #AI_Struct.AI_States := 1;  ////无错误            #AI_Struct.AI_Valid_REAL := 1.0;   ////有错误时,把AI_Reserv1_REAL赋值0.0,便于计算        ELSE            #AI_Struct.AI_States := 0;     /////有错误            #AI_Struct.AI_Valid_REAL := 0.0;   ////有错误时,把AI_Reserv1_REAL赋值0.0,便于计算        END_IF;     三、调用方法       由于S7-1200 不支持STL指令,采用SCL调用也很方便:"AI1_料仓重量"("FC1202_DB".Int1);     直接在数据块中添加地址(本例子采用一个数据块变量,实际使用时采用PIW),使用方便     四、监控效果       运行效果如下:


     五、小结       博图的功能是不断完善的,有些新的命令由于使用方法不同,需要修改原来的程序,也是不可避免的;       在S7-300的STEP7升级过程中,遇到的问题还要多些。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则