西门子RS485高效轮询程序

#MB_COMM_LOAD(REQ := "FirstScan" OR "EleDate".Fun1.Reset,
              "PORT" := 282,
              BAUD := 115200,
              RESP_TO:=1000,
              MB_DB := #MB_MASTER);
#MB_MASTER(REQ := "EleDate".Start,
           MB_ADDR := "EleDate".mb_addr,
           MODE := "EleDate".mode,
           DATA_ADDR := "EleDate".date_addr,
           DATA_LEN := "EleDate".lenth,
           DATA_PTR := "EleDate"."Date"[0]);
#R_TRIG(CLK:="EleDate".Start);
IF "EleDate".Status=0 AND "Clock_1Hz" THEN
    "EleDate".Status := 1;
END_IF;
IF "EleDate".Fun1.Init OR "FirstScan" THEN
    // Statement section IF
    "EleDate".Fun1.InitDone := 0;
END_IF;
 IF "EleDate".mb_addr=1 THEN
    IF #MB_MASTER.DONE THEN // Statement section IF
        "EleDate".Fun1.CommunicateErr := 0;
    ELSIF #MB_MASTER.ERROR THEN
        "EleDate".Fun1.CommunicateErr := 1;
    END_IF;
ELSIF "EleDate".mb_addr=2 THEN
    IF #MB_MASTER.DONE THEN // Statement section IF
        "EleDate".Fun2.CommunicateErr := 0;
    ELSIF #MB_MASTER.ERROR THEN
        "EleDate".Fun2.CommunicateErr := 1;
    END_IF;
END_IF; 



CASE "EleDate".Status OF
    1:  // 1号初始化
        IF NOT "EleDate".Fun1.InitDone THEN
            "EleDate".Fun1.InitState := 0;
            "EleDate".mb_addr := 1;
            "EleDate".mode := 1;
            "EleDate".date_addr := 40257;
            "EleDate".lenth := 1;
            "EleDate"."Date"[0] := 16#00A5;
            "EleDate".Start := 1;
            IF #MB_MASTER.DONE THEN
                // Statement section IF
                "EleDate".Fun1.InitDone := TRUE;
                "EleDate".Start := 0;
                "EleDate".Status := 2;
            ELSIF #MB_MASTER.ERROR THEN
                "EleDate".Start := 0;
                "EleDate".Status := 2;
            END_IF;
        ELSE
            "EleDate".Status := 2;
        END_IF;
    2:  // 设置X方向扭矩
        "EleDate".mb_addr := 1;
        "EleDate".mode := 1;
        "EleDate".date_addr := 40258;
        "EleDate".lenth := 1;
        "EleDate"."Date"[0] := INT_TO_WORD("EleDate".Fun1.X_torque);
        "EleDate".Start := 1;
        IF #MB_MASTER.DONE OR #MB_MASTER.ERROR THEN
            // Statement section IF
            "EleDate".Start := 0;
            "EleDate".Status := 3;
        END_IF;
    3:  // 设置开合程度
        "EleDate".mb_addr := 1;
        "EleDate".mode := 1;
        "EleDate".date_addr := 40260;
        "EleDate".lenth := 1;
        "EleDate"."Date"[0] := INT_TO_WORD("EleDate".Fun1.X_pos);
        "EleDate".Start := 1;
        IF #MB_MASTER.DONE OR #MB_MASTER.ERROR THEN
            // Statement section IF
            "EleDate".Start := 0;
            "EleDate".Status := 4;
        END_IF;
    4:  // 设置X速度
        "EleDate".mb_addr := 1;
        "EleDate".mode := 1;
        "EleDate".date_addr := 40261;
        "EleDate".lenth := 1;
        "EleDate"."Date"[0] := INT_TO_WORD("EleDate".Fun1.X_speed);
        "EleDate".Start := 1;
        IF #MB_MASTER.DONE OR #MB_MASTER.ERROR THEN
            // Statement section IF
            "EleDate".Start := 0;
            "EleDate".Status := 5;
        END_IF;
    5:  // 设置C速度
        "EleDate".mb_addr := 1;
        "EleDate".mode := 1;
        "EleDate".date_addr := 40264;
        "EleDate".lenth := 1;
        "EleDate"."Date"[0] := INT_TO_WORD("EleDate".Fun1.C_speed);
        "EleDate".Start := 1;
        IF #MB_MASTER.DONE OR #MB_MASTER.ERROR THEN
            // Statement section IF
            "EleDate".Start := 0;
            "EleDate".Status := 6;
        END_IF;
    6:  // 设置C扭矩
        "EleDate".mb_addr := 1;
        "EleDate".mode := 1;
        "EleDate".date_addr := 40265;
        "EleDate".lenth := 1;
        "EleDate"."Date"[0] := INT_TO_WORD("EleDate".Fun1.C_torque);
        "EleDate".Start := 1;
        IF #MB_MASTER.DONE OR #MB_MASTER.ERROR THEN
            // Statement section IF
            "EleDate".Start := 0;
            "EleDate".Status := 7;
        END_IF;
    7:  // 设置C相对旋转角度
        "EleDate".mb_addr := 1;
        "EleDate".mode := 1;
        "EleDate".date_addr := 40266;
        "EleDate".lenth := 1;
        "EleDate"."Date"[0] := INT_TO_WORD("EleDate".Fun1.C_angle);
        "EleDate".Start := 1;
        IF #MB_MASTER.DONE THEN
            "EleDate".Fun1.C_angle := 0;
            "EleDate".Start := 0;
            "EleDate".Status := 8;
        ELSIF #MB_MASTER.ERROR THEN
            "EleDate".Start := 0;
            "EleDate".Status := 8;
        END_IF;
    8:  // 夹持状态反馈
        "EleDate".mb_addr := 1;
        "EleDate".mode := 0;
        "EleDate".date_addr := 40514;
        "EleDate".lenth := 1;
        "EleDate".Start := 1;
        IF #MB_MASTER.DONE OR #MB_MASTER.ERROR THEN
            // Statement section IF
            "EleDate".Fun1.ClampingState := WORD_TO_INT("EleDate"."Date"[0]);
            "EleDate".Start := 0;
            "EleDate".Status := 9;
        END_IF;
    9:  // 旋转状态反馈
        "EleDate".mb_addr := 1;
        "EleDate".mode := 0;
        "EleDate".date_addr := 40524;
        "EleDate".lenth := 1;
        "EleDate".Start := 1;
        IF #MB_MASTER.DONE OR #MB_MASTER.ERROR THEN
            // Statement section IF
            "EleDate".Fun1.RotationState := WORD_TO_INT("EleDate"."Date"[0]);
            "EleDate".Start := 0;
            "EleDate".Status := 10;
        END_IF;
    10:  // 旋转角度反馈
        "EleDate".mb_addr := 1;
        "EleDate".mode := 0;
        "EleDate".date_addr := 40521;
        "EleDate".lenth := 1;
        "EleDate".Start := 1;
        IF #MB_MASTER.DONE OR #MB_MASTER.ERROR THEN
            // Statement section IF
            "EleDate".Fun1.CurAngle := WORD_TO_INT("EleDate"."Date"[0]);
            "EleDate".Start := 0;
            "EleDate".Status := 11;
        END_IF;
    11:  // 初始化状态反馈
        "EleDate".mb_addr := 1;
        "EleDate".mode := 0;
        "EleDate".date_addr := 40513;
        "EleDate".lenth := 1;
        "EleDate".Start := 1;
        IF #MB_MASTER.DONE OR #MB_MASTER.ERROR THEN
            // Statement section IF
            "EleDate".Fun1.InitState := WORD_TO_INT("EleDate"."Date"[0]);
            "EleDate".Start := 0;
            "EleDate".Status := 21;
        END_IF;
    21:  // 2号初始化
        IF NOT "EleDate".Fun2.InitDone THEN
            "EleDate".Fun2.InitState := 0;
            "EleDate".mb_addr := 2;
            "EleDate".mode := 1;
            "EleDate".date_addr := 40257;
            "EleDate".lenth := 1;
            "EleDate"."Date"[0] := 16#00A5;
            "EleDate".Start := 1;
            IF #MB_MASTER.DONE THEN
                // Statement section IF
                "EleDate".Fun2.InitDone := TRUE;
                "EleDate".Start := 0;
                "EleDate".Status := 22;
            ELSIF #MB_MASTER.ERROR THEN
                "EleDate".Start := 0;
                "EleDate".Status := 22;
            END_IF;
        ELSE
            "EleDate".Status := 22;
        END_IF;
    22:  // 设置X扭矩
        "EleDate".mb_addr := 2;
        "EleDate".mode := 1;
        "EleDate".date_addr := 40258;
        "EleDate".lenth := 1;
        "EleDate"."Date"[0] := INT_TO_WORD("EleDate".Fun2.X_torque);
        "EleDate".Start := 1;
        IF #MB_MASTER.DONE OR #MB_MASTER.ERROR THEN
            // Statement section IF
            "EleDate".Start := 0;
            "EleDate".Status := 23;
        END_IF;
    23:  // 设置X开合度
        "EleDate".mb_addr := 2;
        "EleDate".mode := 1;
        "EleDate".date_addr := 40260;
        "EleDate".lenth := 1;
        "EleDate"."Date"[0] := INT_TO_WORD("EleDate".Fun2.X_pos);
        "EleDate".Start := 1;
        IF #MB_MASTER.DONE OR #MB_MASTER.ERROR THEN
            // Statement section IF
            "EleDate".Start := 0;
            "EleDate".Status := 24;
        END_IF;
    24:  // 设置X速度
        "EleDate".mb_addr := 2;
        "EleDate".mode := 1;
        "EleDate".date_addr := 40261;
        "EleDate".lenth := 1;
        "EleDate"."Date"[0] := INT_TO_WORD("EleDate".Fun2.X_speed);
        "EleDate".Start := 1;
        IF #MB_MASTER.DONE OR #MB_MASTER.ERROR THEN
            // Statement section IF
            "EleDate".Start := 0;
            "EleDate".Status := 25;
        END_IF;
    25:  // 夹持状态反馈
        "EleDate".mb_addr := 2;
        "EleDate".mode := 0;
        "EleDate".date_addr := 40514;
        "EleDate".lenth := 1;
        "EleDate".Start := 1;
        IF #MB_MASTER.DONE OR #MB_MASTER.ERROR THEN
            // Statement section IF
            "EleDate".Fun2.ClampingState := WORD_TO_INT("EleDate"."Date"[0]);
            "EleDate".Start := 0;
            "EleDate".Status := 26;
        END_IF;
    26:  // 初始化状态反馈
        "EleDate".mb_addr := 2;
        "EleDate".mode := 0;
        "EleDate".date_addr := 40513;
        "EleDate".lenth := 1;
        "EleDate".Start := 1;
        IF #MB_MASTER.DONE OR #MB_MASTER.ERROR THEN
            // Statement section IF
            "EleDate".Fun2.InitState := WORD_TO_INT("EleDate"."Date"[0]);
            "EleDate".Start := 0;
            "EleDate".Status := 1;
        END_IF;
        
    ELSE  // Statement section ELSE
        ;
END_CASE;
地址对照
名称站号功能地址西门子偏移西门子地址Date
1初始化10x010040001402570x00A5
2设置力值10x0101400014025820-100,百分比
3设定夹爪位置10x010340001402600-1000
4以设定速度运行10x010440001402611-100,百分比
5以设定旋转速度运行10x010740001402641-100,百分比
6以设定旋转力运行10x0108400014026520-100,百分比
7旋转相对旋转角度10x01094000140266-32768-32767,角度值
8夹持状态反馈10x0201400014051400;01;02;03
9旋转状态反馈10x020B400014052400;01;02
10旋转角度反馈10x02084000140521
11初始化状态反馈10x02014000140513
21初始化20x010040001402570x00A5
22设置力值20x0101400014025820-100,百分比
23设定夹爪位置20x010340001402600-1000
24以设定速度运行20x010440001402611-100,百分比
25夹持状态反馈20x0201400014051400;01;02;03
26初始化状态反馈20x02014000140513

变量表

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Envis_liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值