#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 | 初始化 | 1 | 写 | 0x0100 | 40001 | 40257 | 0x00A5 |
2 | 设置力值 | 1 | 写 | 0x0101 | 40001 | 40258 | 20-100,百分比 |
3 | 设定夹爪位置 | 1 | 写 | 0x0103 | 40001 | 40260 | 0-1000 |
4 | 以设定速度运行 | 1 | 写 | 0x0104 | 40001 | 40261 | 1-100,百分比 |
5 | 以设定旋转速度运行 | 1 | 写 | 0x0107 | 40001 | 40264 | 1-100,百分比 |
6 | 以设定旋转力运行 | 1 | 写 | 0x0108 | 40001 | 40265 | 20-100,百分比 |
7 | 旋转相对旋转角度 | 1 | 写 | 0x0109 | 40001 | 40266 | -32768-32767,角度值 |
8 | 夹持状态反馈 | 1 | 读 | 0x0201 | 40001 | 40514 | 00;01;02;03 |
9 | 旋转状态反馈 | 1 | 读 | 0x020B | 40001 | 40524 | 00;01;02 |
10 | 旋转角度反馈 | 1 | 读 | 0x0208 | 40001 | 40521 | |
11 | 初始化状态反馈 | 1 | 读 | 0x0201 | 40001 | 40513 | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
21 | 初始化 | 2 | 写 | 0x0100 | 40001 | 40257 | 0x00A5 |
22 | 设置力值 | 2 | 写 | 0x0101 | 40001 | 40258 | 20-100,百分比 |
23 | 设定夹爪位置 | 2 | 写 | 0x0103 | 40001 | 40260 | 0-1000 |
24 | 以设定速度运行 | 2 | 写 | 0x0104 | 40001 | 40261 | 1-100,百分比 |
25 | 夹持状态反馈 | 2 | 读 | 0x0201 | 40001 | 40514 | 00;01;02;03 |
26 | 初始化状态反馈 | 2 | 读 | 0x0201 | 40001 | 40513 | |
变量表