Commits

Masahiro Hasegawa  committed e694c53

溶接チャンネル未決定時点での仮プログラム作成が出来るように改造

  • Participants
  • Parent commits ed30c76

Comments (0)

Files changed (1)

         END
             プログラム終了。
             電極を引き上げた後、N番号9999で機械原点に戻る。
+    
+    溶接チャンネルは0~16を想定。0は溶接準備のみ。
+    チャンネル決定前のプログラムで仮のチャンネルをふる際は
+    最初にSをつけた数字とすること。この際の数字の大きさに制限はない。
+    それ以外の場合はエラーとなるので注意すること。
+    e.g.)
+        2 -> 0<=ch<17なのでOK
+        18 -> ch>=17となるのでNG
+        S99 -> 最初にSが付いているのでOK
+        S10000 -> 最初にSが付いているのでOK
+        SS1 -> 最初にSが付いていても数字以外が含まれるのでNG
+        T1 -> 数字またはS以外で始まるのでNG
     """
     re_weld_command = re.compile("#[0-9]+.*=.*text_string_feature\(.*\\\[\"']"
         "(?P<Nnum>N[0-9]+):(?P<o_commands>.*)\\\[\"'],"
         "[\"'](?P<x>[0-9.]+)[\"'],[\"'](?P<y>[0-9.]+)[\"'],.*\).*")
-    re_SP = re.compile("^SP/(?P<ch>[0-9]+)(:(?P<o_commands>.*))?")
+    re_SP = re.compile("^SP/(?P<ch>S?[0-9]+)(:(?P<o_commands>.*))?")
     re_MS = re.compile("^MS/(?P<pitch>[-0-9.]+),(?P<direct>[XY])"
-        ",(?P<times>[0-9]+)(?P<chs>(,[0-9][0-9]?)+)(:(?P<o_commands>.*))?")
+        ",(?P<times>[0-9]+)(?P<chs>(,S?[0-9][0-9]?)+)(:(?P<o_commands>.*))?")
     re_CALL = re.compile("^CALL/(?P<Onum>[0-9]+),(?P<times>[0-9]+)"
         "(:(?P<o_commands>.*))?")
     re_CSTM = re.compile("^CSTM/(?P<code>[^:]*)(:(?P<o_commands>.*))?")
                 buf.write("%sG90X%0.1fY%0.1fZ%0.1f\r\n" %
                     (mo.group("Nnum"), y, x, x))
                 if mo.group("o_commands"):
-                    self.sub_tran(mo.group("o_commands"), buf)
+                    try:
+                        self.sub_tran(mo.group("o_commands"), buf)
+                    except Exception as e:
+                        a = e.message + "\nline:mage: %s" % (line)
+                        e = e.__class__(a)
+                        raise e
                 if db.get(Nnum):
                     e = RuntimeError(u"Same N : %s" %
                         (mo.group("Nnum")))
             mo = None
             if self.re_SP.match(text):
                 mo = self.re_SP.match(text)
-                ch = int(mo.group("ch"))
-                self.on_single_weld(output, ch)
+                self.on_single_weld(output,  mo.group("ch"))
             elif self.re_MS.match(text):
                 mo = self.re_MS.match(text)
                 self.on_multi_spot(output, mo)
         output.write("M98P%dL%d\r\n" % (Onum, times))
         
     def on_single_weld(self, output, ch):
+        if ch[0] == 'S':
+            output.write("M10\r\nM%s\r\n" % (ch))
+            return
+        ch = int(ch)
         if 0 <= ch < 17:
             output.write("M10\r\nM%d\r\n" % (ch + 10))
             return
         output.write("M10\r\n( ch miss )\r\nM00\r\n")
-        raise exception("Unknown weld channel:%d" % ch)
+        raise Exception("Unknown weld channel:%d" % ch)
 
     def on_multi_spot(self, output, mo):
         pitch = float(mo.group("pitch"))
-        chs = map(int, mo.group("chs").split(",")[1:])
+        chs = mo.group("chs").split(",")[1:]
         chs.reverse()
         times = int(mo.group("times"))
         direct = mo.group("direct")