def readFile(): # Pathオブジェクトを生成 p = Path(vrmapi.SYSTEM().GetLayoutDir() + "\\read") l = list(p.glob("*.txt")) for item in l: try: #withでテキスト読み込みモード使用 with open(item, 'r') as text: # 文字列を全て読み込む t = text.read() # タブで分割 line = t.split() # 要素が0:Object種別、1:ID、2:命令、3:Paramの4つ以上 if len(line) >= 4: readFileLine(line) #vrmapi.LOG(str(t)) # 読み込んだファイルは別フォルダへ移動 re = vrmapi.SYSTEM().GetLayoutDir() + "\\read_end\\" + item.name #vrmapi.LOG(str(re)) shutil.move(item, re) # 出力機能 global _sendState if _sendState == True: sendStateFile() except Exception as e: # エラーファイルは名前を変えて別フォルダへ移動 re = vrmapi.SYSTEM().GetLayoutDir( ) + "\\read_end\\ERR_" + item.name vrmapi.LOG(str(e)) vrmapi.LOG(str(re)) shutil.move(item, re)
def sendStateFile(): dir = vrmapi.SYSTEM().GetLayoutDir() if (os.path.exists(dir + "\\send") == False): vrmapi.LOG(dir + "\\send フォルダがありません。") return s = list() # 編成リストを新規編成リストに格納 tList = vrmapi.LAYOUT().GetTrainList() # 新規編成リストから編成を繰り返し取得 for t in tList: # ダミー編成は除外 if t.GetDummyMode() == False: s.append('t\t{0}\t{1:.1f}\n'.format(t.GetID(), t.GetVoltage())) s.append('\n') # 新規ポイントリストを作成 pList = list() # ポイントリストを新規ポイントリストに格納 vrmapi.LAYOUT().ListPoint(pList) # 新規ポイントリストからポイントを繰り返し取得 for p in pList: # 頭文字「dummy」は対象外 if p.GetNAME()[0:5] != 'dummy': s.append('p\t{0}\t{1}\n'.format(p.GetID(), p.GetBranch())) #s.append('\n') # 結合 text = ''.join(s) # ファイル出力 timeText = datetime.now().strftime('%Y%m%d%H%M%S%f') path_w = dir + "\\send\\" + timeText + '.txt' with open(path_w, mode='w') as f: f.write(text)
def vrmevent(obj, ev, param): if ev == 'init': # フォルダチェック dir = vrmapi.SYSTEM().GetLayoutDir() if (os.path.exists(dir + "\\read") == False): vrmapi.LOG(dir + "\\read フォルダがありません。ファイル連携機能を無効にします。") return if (os.path.exists(dir + "\\read_end") == False): vrmapi.LOG(dir + "\\read_end フォルダがありません。ファイル連携機能を無効にします。") return global _sendState if _sendState == True: if (os.path.exists(dir + "\\send") == False): vrmapi.LOG(dir + "\\send フォルダがありません。出力機能を無効にします。") # 出力機能無効化 _sendState = False return else: vrmapi.LOG("出力機能が有効です。") # 起動時に0.1秒間隔のタイマーイベントを登録 obj.SetEventTimer(0.1) # (任意)レイアウト内の全編成の電源を一括設定(0:OFF, 1:ON) #setPowerAll(0) # (任意)sendフォルダにレイアウト初期情報を出力 sendSettingFile() elif ev == 'timer': # タイマーイベントでフォルダを周期監視 readFile()
def sendSettingFile(): dir = vrmapi.SYSTEM().GetLayoutDir() if (os.path.exists(dir + "\\send") == False): vrmapi.LOG(dir + "\\send フォルダがありません。") return s = list() # 編成リストを新規編成リストに格納 tList = vrmapi.LAYOUT().GetTrainList() # 新規編成リストから編成を繰り返し取得 for t in tList: pos = t.GetPosition() s.append( 't\t{0}\t{1}\t{2}\t{3:.0f}\t{4:.0f}\t{5:.0f}\t{6:.0f}\t{7}'.format( t.GetID(), t.GetNAME(), t.GetTrainNumber(), pos[0], pos[2], pos[1], t.GetRotate(), len(t.GetCarList()))) if t.GetDummyMode() == True: s.append('\tdummy\n') else: s.append('\n') s.append('\n') # 新規ポイントリストを作成 pList = list() # ポイントリストを新規ポイントリストに格納 vrmapi.LAYOUT().ListPoint(pList) # 新規ポイントリストからポイントを繰り返し取得 for p in pList: pos = p.GetPosition() s.append( 'p\t{0}\t{1}\t{2}\t{3:.0f}\t{4:.0f}\t{5:.0f}\t{6:.0f}\n'.format( p.GetID(), p.GetNAME(), p.GetBranch(), pos[0], pos[2], pos[1], p.GetRotate())) #s.append('\n') # 結合 text = ''.join(s) # ファイル出力 timeText = datetime.now().strftime('%Y%m%d%H%M%S%f') path_w = dir + "\\send\\" + timeText + '.txt' with open(path_w, mode='w') as f: f.write(text) vrmapi.LOG(path_w + " を出力しました。")
try: import vrmapi LOG = vrmapi.LOG except ModuleNotFoundError: print('VRMAPIが見つかりません。VRMNXシステムでしか動作しません。') raise from math import sin,cos,tan,sqrt, pi, pow, ceil,floor from random import triangular import json import os.path DEBUG = False LAYOUT = vrmapi.LAYOUT() NXSYS = vrmapi.SYSTEM() IMGUI = vrmapi.ImGui() DIRECTORY, BASE = os.path.split(NXSYS.GetLayoutPath()) #LOG(BASE) # フレームイベントの設定は activate イベントハンドラでinitのタイミングに移動 _PARENT = None # 親オブジェクト #_gcam = [] # 地上カメラのリスト _toruos = [] # 撮る夫くんたちのリスト _childid = [0] _systime = 0.0 # 前フレームの時刻を記録 _shakemode = [False] # Trueで手ブレON _guidisp = 1 # TrueでGUI操作盤を表示 _shake_vt = 0.0 # 手ブレの累積量 _shake_hr = 0.0