技术论坛

G120与300/400 DP/PN通讯块

作者 主题
至圣

经验值: 24890
发帖数: 4534
精华帖: 10
主题:【分享】G120与300/400 DP/PN通讯块
推荐帖


只看楼主 楼主 2017-11-10 17:03:01

  最近因为用到300PLC与变频器通讯的问题,一般都是使用官网的视频教程中方法来实现。后来,在PCS7项目中,用到了FB_Drive块。因为没有源程序,所以套用FB_Drive的部分输入、输出接口,经过两天的摸索,终于搞出来了。实际使用中,直接调用该块,连接实际通道,设置基准电流量程和基准转矩量程即可。根据FB_Drive块的思路,目前只支持标准报文1和20.后续如果有时间,再研究其它报文的格式。如果有什么不对指出,欢迎各位专家批评指正。


FUNCTION_BLOCK FB2100  //FBDrive


TITLE = 'FBDrive'

//

// Block Comment...

//

VERSION: '1.0'

AUTHOR: Author

NAME: HSC

FAMILY: Drive



VAR_INPUT

   PZDIn1  : WORD :=W#16#00;

   PZDIn2  : WORD :=W#16#00;

   PZDIn3  : WORD :=W#16#00;

   PZDIn4  : WORD :=W#16#00;

   PZDIn5  : WORD :=W#16#00;

   PZDIn6  : WORD :=W#16#00;

   Telegram  : INT  := 20;

   PZDIn2Scale : STRUCT

         HIGH : REAL := 50.0;

         LOW  : REAL := 0.0;

               END_STRUCT;

        

   SP_Li :  REAL := 0.0 ;

   SP_LiScale : STRUCT

          HIGH : REAL := 50.0;

          LOW  : REAL := 0.0;

              END_STRUCT;

   PZDIn3Scale : STRUCT

          HIGH : REAL := 100.0;

          LOW  : REAL := 0.0;

              END_STRUCT;

   PZDIn4Scale : STRUCT

          HIGH : REAL := 100.0;

          LOW  : REAL := 0.0;

              END_STRUCT;  

   PZDIn5Scale : STRUCT

          HIGH : REAL := 100.0;

          LOW  : REAL := 0.0;

              END_STRUCT;

   PZDIn6Scale : STRUCT

          HIGH : REAL := 100.0;

          LOW  : REAL := 0.0;

             END_STRUCT;        

   On        : BOOL := False;

   InvSp     : BOOL := False;

       

END_VAR


VAR_IN_OUT

    // I/O Parameters

END_VAR


VAR_OUTPUT

    PZDOut1  : WORD := W#16#00;

    PZDOut2  : WORD := W#16#00; 

    SpeedLi  : REAL := 0.0; 

    SpeedScale  : STRUCT

          HIGH : REAL := 50.0;

          LOW  : REAL := 0.0;

              END_STRUCT;  

    Current_Value : REAL :=0.0;     //PZD3的值

    CurrentScale  : STRUCT

          HIGH : REAL := 100.0;

          LOW  : REAL := 0.0;

             END_STRUCT;   

    Mist_Glatt : REAL := 0.0 ;     //当前转矩值

    Warn_Code  : INT  := 0 ;       // 报警代码

    Fault_Code : INT  := 0 ;       // 故障代码

    Rdy_On      : BOOL := False ;   // 准备打开

    RdyOp      : BOOL := False ;   // 准备运行

    Warnning   : BOOL := False ;   // 报警

    Fault      : BOOL := False ;   // 故障

    Running    : BOOL := False ;   // 运行

    Inv_Running : BOOL := False ;  // 反向运行

END_VAR


VAR

FbDriveState : WORD;

FbDriveIn  AT  FbDriveState : ARRAY[0..15] OF BOOL;

END_VAR

BEGIN

   IF On THEN

       PZDOut1 := W#16#047F;

      IF   InvSp THEN

          PZDOut1 := W#16#0C7F;

      END_IF;

   ELSE  PZDOut1 := W#16#047E;

   END_IF;

   

   IF  SP_Li >0.0 THEN

      PZDOut2 := INT_TO_WORD(REAL_TO_INT(SP_Li*16384.0/(SP_LiScale.HIGH-SP_LiScale.LOW)));

   ELSE  PZDOut2 := W#16#00;

   END_IF;

   

   FbDriveState := PZDIn1 ;


  Rdy_On  := FbDriveIn[8];

  RdyOp   := FbDriveIn[9];

  Running := FbDriveIn[10];

  Fault   := FbDriveIn[11];

  Warnning := FbDriveIn[15];

  Inv_Running := NOT FbDriveIn[6];



   CASE  Telegram  OF

      1:

          IF SP_Li >0.0 THEN

            SpeedLi := (INT_TO_REAL(WORD_TO_INT(PZDIn2))*((SP_LiScale.HIGH-SP_LiScale.LOW)/16384.0))+SP_LiScale.LOW;

            SpeedScale.HIGH := SP_LiScale.HIGH;

            SpeedScale.LOW  := SP_LiScale.LOW;

          ELSE  SpeedLi := 0.0;

          END_IF;

      20:

          IF SP_Li >0.0 THEN

            SpeedLi := (INT_TO_REAL(WORD_TO_INT(PZDIn2))*((SP_LiScale.HIGH-SP_LiScale.LOW)/16384.0))+SP_LiScale.LOW;

            SpeedScale.HIGH := SP_LiScale.HIGH;

            SpeedScale.LOW  := SP_LiScale.LOW;

          ELSE  SpeedLi := 0.0;

          END_IF;


          IF  (INT_TO_REAL(WORD_TO_INT(PZDIn3)))> 0 THEN

             Current_Value := (INT_TO_REAL(WORD_TO_INT(PZDIn3))*((CurrentScale.HIGH-CurrentScale.LOW)/16384.0))+CurrentScale.LOW;

             CurrentScale.HIGH  := PZDIn3Scale.HIGH;

             CurrentScale.LOW   := PZDIn3Scale.LOW;

          ELSE  Current_Value := 0.0;

          END_IF;

   

          IF  (INT_TO_REAL(WORD_TO_INT(PZDIn4)))> 0 THEN

             Mist_Glatt := (INT_TO_REAL(WORD_TO_INT(PZDIn4))*((PZDIn4Scale.HIGH-PZDIn4Scale.LOW)/16384.0))+PZDIn4Scale.LOW;

          ELSE  Mist_Glatt := 0.0;

          END_IF;

         IF  WORD_TO_INT(PZDIn5)>0 THEN

             Warn_Code  :=  WORD_TO_INT(PZDIn5);

         ELSE   Warn_Code  := 0;

         END_IF;

         

         IF    WORD_TO_INT(PZDIn6)>0  THEN

             Fault_Code :=  WORD_TO_INT(PZDIn6);

         ELSE   Fault_Code := 0 ;

         END_IF;

   END_CASE;

   

END_FUNCTION_BLOCK



别人在休息的时候,我往前走。
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1436299&b_id=4&s_id=0&num=19

至圣

经验值: 24890
发帖数: 4534
精华帖: 10
回复:G120与300/400 DP/PN通讯块
推荐帖


只看楼主 楼主 1楼 2017-11-11 07:50:13

对输入端口的注释:

VAR_INPUT

   PZDIn1  : WORD :=W#16#00;   //直接与输入地址相连,比如PIW256

   PZDIn2  : WORD :=W#16#00;   //直接与输入地址相连,比如PIW258

   PZDIn3  : WORD :=W#16#00;   //直接与输入地址相连,比如PIW260

   PZDIn4  : WORD :=W#16#00;  //直接与输入地址相连,比如PIW262

   PZDIn5  : WORD :=W#16#00;  //直接与输入地址相连,比如PIW264

   PZDIn6  : WORD :=W#16#00;  //直接与输入地址相连,比如PIW256

   Telegram  : INT  := 20;   //报文类型,M系列变频器,只能报文1,G120可以是1和20.当报文类型为1时,只能读取反馈转速值

   PZDIn2Scale : STRUCT     //PZD2的零点和量程,此处如果为频率,设置为50.如果为转速,根据需要设置

         HIGH : REAL := 50.0;

         LOW  : REAL := 0.0;

               END_STRUCT;

        

   SP_Li :  REAL := 0.0 ;   //给定值

   SP_LiScale : STRUCT     //给定值量程范围

          HIGH : REAL := 50.0;

          LOW  : REAL := 0.0;

              END_STRUCT;

   PZDIn3Scale : STRUCT     //PZD3量程

          HIGH : REAL := 100.0;

          LOW  : REAL := 0.0;

              END_STRUCT;

   PZDIn4Scale : STRUCT    //PZD4量程

          HIGH : REAL := 100.0;

          LOW  : REAL := 0.0;

              END_STRUCT;  

   PZDIn5Scale : STRUCT   //PZD5量程,后续开发备用

          HIGH : REAL := 100.0;

          LOW  : REAL := 0.0;

              END_STRUCT;

   PZDIn6Scale : STRUCT   //PZD6量程,后续开发备用

          HIGH : REAL := 100.0;

          LOW  : REAL := 0.0;

             END_STRUCT;        

   On        : BOOL := False;   //启停

   InvSp     : BOOL := False;    //反转

       

END_VAR



别人在休息的时候,我往前走。
以下网友喜欢您的帖子:

  
至圣

经验值: 24890
发帖数: 4534
精华帖: 10
回复:G120与300/400 DP/PN通讯块
推荐帖


只看楼主 楼主 2楼 2017-11-11 08:04:54

输出注释:

VAR_OUTPUT

    PZDOut1  : WORD := W#16#00;  //PZD输出字,直接与输出地址相连,比如PQW256

    PZDOut2  : WORD := W#16#00;  //PZD输出字,直接与输出地址相连,比如PQW258 

    SpeedLi  : REAL := 0.0;    //实际速度输出值

    SpeedScale  : STRUCT      //实际速度输出量程,后续开发备用

          HIGH : REAL := 50.0;

          LOW  : REAL := 0.0;

              END_STRUCT;  

    Current_Value : REAL :=0.0;     //PZD3的值

    CurrentScale  : STRUCT

          HIGH : REAL := 100.0;   //PZD3的量程,后续备用

          LOW  : REAL := 0.0;

             END_STRUCT;   

    Mist_Glatt : REAL := 0.0 ;     // PZD4的值,报文20中为当前转矩值

    Warn_Code  : INT  := 0 ;       // PZD5的值,报文20中为报警代码

    Fault_Code : INT  := 0 ;       // PZD6的值,报文20中为故障代码

    Rdy_On      : BOOL := False ;   // 状态字的第0位,准备打开

    RdyOp      : BOOL := False ;   // 状态字的第1位,准备运行

    Warnning   : BOOL := False ;    // 状态字的第7位,报警

    Fault      : BOOL := False ;   // 状态字的第3位,故障

    Running    : BOOL := False ;    // 状态字的第2位,运行

    Inv_Running : BOOL := False ;    // 状态字的第14位取反,反向运行

END_VAR



别人在休息的时候,我往前走。
以下网友喜欢您的帖子:

  
至圣

经验值: 24890
发帖数: 4534
精华帖: 10
回复:G120与300/400 DP/PN通讯块
推荐帖


只看楼主 楼主 3楼 2017-11-11 08:08:36

G120控制字




别人在休息的时候,我往前走。
以下网友喜欢您的帖子:

  
至圣

经验值: 24890
发帖数: 4534
精华帖: 10
回复:G120与300/400 DP/PN通讯块
推荐帖


只看楼主 楼主 4楼 2017-11-11 08:09:28

G120状态字





别人在休息的时候,我往前走。
以下网友喜欢您的帖子:

  
至圣

经验值: 24890
发帖数: 4534
精华帖: 10
回复:G120与300/400 DP/PN通讯块
推荐帖


只看楼主 楼主 5楼 2017-11-11 08:13:16

报文类型及结构




别人在休息的时候,我往前走。
以下网友喜欢您的帖子:

  
至圣

经验值: 24890
发帖数: 4534
精华帖: 10
回复:G120与300/400 DP/PN通讯块
推荐帖


只看楼主 楼主 6楼 2017-11-11 08:15:10

具体组态步骤,可参考官网文档:

https://support.industry.siemens.com/cs/document/109478791/s7-300%E4%B8%8Eg120-cu250s-2-dp%E7%9A%84profibus%E9%80%9A%E8%AE%AF-%E7%AC%AC1%E9%83%A8%E5%88%86%E6%8E%A7%E5%88%B6%E5%8F%98%E9%A2%91%E5%99%A8%E5%90%AF%E5%81%9C%E5%8F%8A%E8%B0%83%E9%80%9F?dti=0&lc=zh-CN


别人在休息的时候,我往前走。
以下网友喜欢您的帖子:

  
至圣

经验值: 10993
发帖数: 997
精华帖: 31
回复:G120与300/400 DP/PN通讯块
推荐帖


只看楼主 7楼 2017-11-13 10:22:39


楼主有心了。


Chance favors the prepared mind.
以下网友喜欢您的帖子:

  
至圣

经验值: 24890
发帖数: 4534
精华帖: 10
回复:G120与300/400 DP/PN通讯块
推荐帖


只看楼主 楼主 8楼 2017-11-13 10:24:05
以下是引用henry.wang在2017-11-13 10:22:39的发言 >7楼


楼主有心了。

贴出来几天了,好像没人待见。


别人在休息的时候,我往前走。
以下网友喜欢您的帖子:

  
至圣

经验值: 24890
发帖数: 4534
精华帖: 10
回复:G120与300/400 DP/PN通讯块
推荐帖


只看楼主 楼主 9楼 2017-11-13 10:27:07

这是利用cfc编程实现的最终结果:




别人在休息的时候,我往前走。
以下网友喜欢您的帖子:

  
至圣

经验值: 10993
发帖数: 997
精华帖: 31
回复:G120与300/400 DP/PN通讯块


只看楼主 10楼 2017-11-13 10:29:44
以下是引用你以为你是谁在2017-11-13 10:24:05的发言 >8楼

贴出来几天了,好像没人待见。

以下是引用henry.wang在2017-11-13 10:22:39的发言 >7楼:楼主有心了。

引用7楼详细内容:


楼主有心了。

哈哈,可能是大家觉得太好了,不知道说什么,我觉得真的挺好,非常的详细。


Chance favors the prepared mind.
以下网友喜欢您的帖子:

  
至圣

经验值: 24890
发帖数: 4534
精华帖: 10
回复:G120与300/400 DP/PN通讯块


只看楼主 楼主 11楼 2017-11-13 10:31:54
以下是引用henry.wang在2017-11-13 10:29:44的发言 >10楼

哈哈,可能是大家觉得太好了,不知道说什么,我觉得真的挺好,非常的详细。

以下是引用你以为你是谁在2017-11-13 10:24:05的发言 >8楼:贴出来几天了,好像...

引用8楼详细内容:

贴出来几天了,好像没人待见。

以下是引用henry.wang在2017-11-13 10:22:39的发言 >7楼:楼主有心了。

引用7楼详细内容:


楼主有心了。

我个人觉得比较实用,一般的新手都可以很快上手。


别人在休息的时候,我往前走。
以下网友喜欢您的帖子:

  
至圣

经验值: 24890
发帖数: 4534
精华帖: 10
回复:G120与300/400 DP/PN通讯块


只看楼主 楼主 12楼 2017-11-13 10:35:28
以下是引用henry.wang在2017-11-13 10:29:44的发言 >10楼

哈哈,可能是大家觉得太好了,不知道说什么,我觉得真的挺好,非常的详细。

以下是引用你以为你是谁在2017-11-13 10:24:05的发言 >8楼:贴出来几天了,好像...

引用8楼详细内容:

贴出来几天了,好像没人待见。

以下是引用henry.wang在2017-11-13 10:22:39的发言 >7楼:楼主有心了。

引用7楼详细内容:


楼主有心了。

那天贴出来高兴的,还以为能置精呢。现在看来,都没人看。


别人在休息的时候,我往前走。
以下网友喜欢您的帖子:

  
侠客

经验值: 926
发帖数: 38
精华帖: 0
回复:G120与300/400 DP/PN通讯块


只看楼主 13楼 2017-11-13 11:15:10

  我刚刚接触G120,有用  很不错谢谢。。。。。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 24890
发帖数: 4534
精华帖: 10
回复:G120与300/400 DP/PN通讯块


只看楼主 楼主 14楼 2017-11-13 11:35:44

有了这个功能块,G120通讯分分钟就可实现:

  1. 设置宏为4.

  2. 更改报文类型P922为4.

  3. PLC调用功能块,下载即可。


别人在休息的时候,我往前走。
以下网友喜欢您的帖子:

  
至圣

经验值: 20130
发帖数: 2777
精华帖: 23
回复:G120与300/400 DP/PN通讯块


只看楼主 15楼 2017-11-13 13:08:41
以下是引用你以为你是谁在2017-11-13 10:35:28的发言 >12楼

那天贴出来高兴的,还以为能置精呢。现在看来,都没人看。

以下是引用henry.wang在2017-11-13 10:29:44的发言 >10楼:哈哈,可能是大家觉...

引用10楼详细内容:

哈哈,可能是大家觉得太好了,不知道说什么,我觉得真的挺好,非常的详细。

以下是引用你以为你是谁在2017-11-13 10:24:05的发言 >8楼:贴出来几天了,好像...

引用8楼详细内容:

贴出来几天了,好像没人待见。

以下是引用henry.wang在2017-11-13 10:22:39的发言 >7楼:楼主有心了。

引用7楼详细内容:


楼主有心了。

谢谢,楼主辛苦。能理解楼主的心情,毕竟是自己的劳动成果,都希望能得到认可。可能是大家没有和你一样的实践背景,所以需要时间去消化一下,比如像我这种”肠胃“不太好的人,一时半会儿还真不能理解透彻,还得先去看看G120通讯部分的知识。至于质量怎么样,由于我水平有限,不敢妄议。但是楼主这种再创新精神还是一定要点赞的。

PS.提个建议,像这样的代码”

CASE  Telegram  OF

      1:

          IF SP_Li >0.0 THEN

            SpeedLi := (INT_TO_REAL(WORD_TO_INT(PZDIn2))*((SP_LiScale.HIGH-SP_LiScale.LOW)/16384.0))+SP_LiScale.LOW;

“中,整数到实数的转换指令括号内的参数表达式,如果能用一个变量名代替的话,易读性是否会好一些?或者干脆把计算工程量转换值的公式部分直接做成一个功能FC,会不会更简洁一些?


一家之言,仅供参考。


Less is more……
以下网友喜欢您的帖子:

  
至圣

经验值: 24890
发帖数: 4534
精华帖: 10
回复:G120与300/400 DP/PN通讯块


只看楼主 楼主 16楼 2017-11-13 13:20:21
以下是引用唐诗宋瓷在2017-11-13 13:08:41的发言 >15楼

谢谢,楼主辛苦。能理解楼主的心情,毕竟是自己的劳动成果,都希望能得到认可。可能是大家没有和你一样的实践背景,所以需要时间去消化一下,比如像我这种”肠胃“不太好的人,一时半会儿还真不能理解透彻,还得先去看看G120通讯部分的知识。至于质量怎么样,由于我水平有限,不敢妄议。但是楼主这种再创新精神还是一定要点赞的。

PS.提个建议,像这样的代码”

CASE  Telegram  OF

      1:

          IF SP_Li >0.0 THEN

            SpeedLi := (INT_TO_REAL(WORD_TO_INT(PZDIn2))*((SP_LiScale.HIGH-SP_LiScale.LOW)/16384.0))+SP_LiScale.LOW;

“中,整数到实数的转换指令括号内的参数表达式,如果能用一个变量名代替的话,易读性是否会好一些?或者干脆把计算工程量转换值的公式部分直接做成一个功能FC,会不会更简洁一些?


一家之言,仅供参考。

以下是引用你以为你是谁在2017-11-13 10:35:28的发言 >12楼:那天贴出来高兴的,...

引用12楼详细内容:

那天贴出来高兴的,还以为能置精呢。现在看来,都没人看。

以下是引用henry.wang在2017-11-13 10:29:44的发言 >10楼:哈哈,可能是大家觉...

引用10楼详细内容:

哈哈,可能是大家觉得太好了,不知道说什么,我觉得真的挺好,非常的详细。

以下是引用你以为你是谁在2017-11-13 10:24:05的发言 >8楼:贴出来几天了,好...

引用8楼详细内容:

贴出来几天了,好像没人待见。

以下是引用henry.wang在2017-11-13 10:22:39的发言 >7楼:楼主有心了。

引用7楼详细内容:


楼主有心了。

唐大侠批评的比较对,一直考虑的是怎么用好这个功能块。但是,如果把工程量转换这块改成FC块之后,对新手调用来说,觉得就有点难了。因为,以上有4个工程量转换。不过,个人可以根据喜好,自由更改。因为原始程序就在那里。


别人在休息的时候,我往前走。
以下网友喜欢您的帖子:

  
至圣

经验值: 24890
发帖数: 4534
精华帖: 10
回复:G120与300/400 DP/PN通讯块


只看楼主 楼主 18楼 2017-11-19 08:10:29

经测试,MM4变频器支持标准报文1,有兴趣的,可以研究一下。


别人在休息的时候,我往前走。
以下网友喜欢您的帖子:

  
至圣

经验值: 18410
发帖数: 2409
精华帖: 1
回复:G120与300/400 DP/PN通讯块


只看楼主 19楼 2017-12-16 10:00:51


,好有心哟


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2461
发帖数: 227
精华帖: 0
回复:G120与300/400 DP/PN通讯块


只看楼主 20楼 2017-12-29 16:07:20

楼主真不错



 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
G120与300/400 DP/PN通讯块
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。