# 仮想変数 P/I/F/IO ## 基本 `P1`、`I1`、`F1` は共通 I/F 上の変数名である。UR Controller 内部変数ではない。 UR 実装では `RobotVarManager` により JSON へ保存する。 ```text P1 ↓ RobotVarManager ↓ JSON ``` ## 属性アクセス ```python robot.P1 = [300, 0, 200, 0, 180, 0] print(robot.P1) robot.I1 = 10 robot.F1 = 1.5 ``` ## get_var() / set_var() ```python robot.get_var("P1") robot.set_var("P1", [300, 0, 200, 0, 180, 0]) robot.get_var("P", 1) robot.set_var("P", 1, [300, 0, 200, 0, 180, 0]) ``` ## P 変数 ```python robot.set_P(1, [300, 0, 200, 0, 180, 0]) pose = robot.get_P(1) ``` P は 6 要素の mm / degree rotation-vector である。 ## teach() ```python robot.teach("P1") robot.teach("J1") ``` `teach("P1")` は現在 TCP pose を P1 に保存する。 `teach("J1")` は現在関節角を J1 に保存する。 これは上位の共通 I/F としての教示であり、UR Controller へ P1 レジスタを書いているわけではない。 ## I / F ```python robot.set_I(1, 100) robot.get_I(1) robot.set_F(1, 1.25) robot.get_F(1) ``` ## IO `IO` は仮想変数ではなく、実 IO へ転送される。 ```python robot.IO0 = True print(robot.IO0) ``` 内部では `set_IO()` / `get_IO()` が呼ばれる。 ## is_empty_position() ```python robot.is_empty_position("P1") ``` P 変数が未登録なら True を返す。