2017-11-01 31 views
1

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スクリプトでタイマーを設定したくありません。私が読んでいる間にサイクルをスキップしないようにしてください。

答えて

0

TwinCat Adsは、通知を受信する機能を提供します。通知を追加/設定して、異なる点(各サイクル、変更時など)で変数の値を受け取ることができます。

PyadsはTwinCatAds.Dllをラップするだけで、ドキュメントにはより快適なPythonインターフェイスが用意されています。

これを参照してくださいsample for notification

関連する問題