pyadsでADSルート経由でTwinCat 3で書かれたSPSからいくつかの値を読みたいと思います。サイクルの発生時に値を読み取る必要があります。私のPythonスクリプトでは、まずSPSのサイクルタイムを取得します。私は読取り時間(5000ms)を定義し、読取り時間と検出されたサイクル時間(10ms)とで、読み取る値の数を計算する。通知時のPyads読み取り値:TwinCatサイクルが発生した場合
whileループでは、定義された値の数を読み取る必要があります。それはこのようなものに見えるコードで
:私はこれを行うと
plc = pyads.Connection('172.18.51.64.1.1', 851)
plc.open()
cycle_time = plc.read_by_name('Main.lrCycleTime', pyads.PLCTYPE_LREAL)
time_to_read = 5000 #milliseconds
values_to_read = int(time_to_read/cycle_time)
count = 0
read_values = []
while count < values_to_read:
count += 1
array_PLC = plc.read_by_name('Main.arrNumbers', pyads.PLCTYPE_ARR_LREAL(2))
read_values.append(array_PLC)
を、私は単純にいくつかの値をポーリングします。これは、すべての値が複数回存在することを意味し、私はあらかじめ定義された5000ミリ秒を読みません。
pyads-libraryに詳しい人はいますか? サイクルが発生したときに一種の通知を受ける可能性はありますか?私はPythonスクリプトでタイマーを設定したくありません。私が読んでいる間にサイクルをスキップしないようにしてください。