今回のTutorialはgroov EPIC CPUと通信するためのoptommp Pythonパッケージを使用し、EPIC PLCのデータ取得したり書き込んだりします。
さ、はじめよう!
Reference Link
https://developer.opto22.com/pythonmmp/
http://soup01.com/ja/?s=OPTO22
Install pacakges
下記のコマンドでPythonのoptommp パッケージをインストールしてください。
pip install optommp |
ModuleNotFoundError: No module named ‘O22SIOUT’
もしライブラリをImportするときにNo Module named “O22SIOUT”のエラーが発生したら、下記のLinkでライブラリをDownloadしてください。
そして同じDirectoryの下に格納してください。
Implemnetation1
最初にEPIC PLCと接続Scriptを紹介します。
Script
optommp ライブラリをImportし、optommp.O22MMP(host=”192.168.1.134″)でEPIC CPUと接続し、最後はclose()メソッドを使ってConnectionsを切断します。
import optommp grvEpic = optommp.O22MMP(host=”192.168.1.134″) grvEpic.close() |
Result
もしTimeoutやLibrary Importエラーがなければ、接続が成功になります。
Implemnetation2
次はEPIC PLCにインストールされているModuleのデータを取得します。
Script
grvEpic.UnitDescription().decode(“utf-8”)でUnit名を取得し、またGetAnalogPointValue(x,x)のMethodでアナログモジュールの現在値、もしくはGetDigitalPointState(0,1)でデジタルモジュールの現在値を取得できます。
import optommp grvEpic = optommp.O22MMP(host=”192.168.1.134″) print(“Unit:”+grvEpic.UnitDescription().decode(“utf-8”)) print(“MOdule0,Channel0:{}”.format(grvEpic.GetDigitalPointState(0,0))) print(“MOdule0,Channel0:{}”.format(grvEpic.GetDigitalPointState(0,1))) print(“Module2,Channel0:{}”.format(grvEpic.GetAnalogPointValue(2,0))) print(“Module3,Channel1:{}”.format(grvEpic.GetAnalogPointValue(3,0)/10.0*100.0)) grvEpic.close() |
Result
Done!Unit名と各Channelの現在値も取得できました。
Unit:GRV-EPIC-PR1 MOdule0,Channel0:1 MOdule0,Channel0:0 Module2,Channel0:19.975738525390625 Module3,Channel1:97.13851928710938 |
Implementation3
最後はScratchPadのデータをPython Scriptから書き込む方法を紹介します。ScratchPadはEPIC PLC内部の共有メモリであり、設定によりほかのデバイスからも読み書き可能な、便利なエリアです。
ScratchPad
最初にEPIC PLCのScratchPad機能を有効にする必要があり、GroovManage画面から”Data Service”ボタンをクリックします。
Configure ボタンをクリックします。
Public Access>Scratch Padをクリックします。
こちらはScratch Padの設定画面になります。下図の設定では:
- Scratch Padで0から10個の32Bit整数レジスタを公開する
- Scratch Padで0から10個の64Bit整数レジスタを公開する
- Scratch Padで0から10個の実数レジスタを公開する
- Scratch Padで0から10個の文字列レジスタを公開する
Address
次は先ほど公開したScratchPadのアドレスを見つける方法を紹介します。Public Access>I/O Chanelsをクリックします。
I/O Services をクリックします。
MMP Calculatorをクリックします。
Channel Configurationをクリックします。
今回は32Bit整数レジスタにアクセスしますので、Scratch Pad-32 bit Integer(Section1)をクリックします。
Open are in Generic MMP pageをクリックします。
Scratch Pad-32 bit Integerレジスタのアドレスが表示されています。例えば、
- F0D81000は1番目の32 bit Integerレジスタ
- F0D81004は1番目の32 bit Integerレジスタ
でも、Opto22のPython Libraryを使用すればこのアドレスを気にする必要がありません。
Script
For loopの中にあるSetScratchPadIntegerArea(i,i) MethodでRegister0に10を書き込むのようなプログラムになります。
import optommp grvEpic = optommp.O22MMP(host=”192.168.1.134″) print(“Unit:”+grvEpic.UnitDescription().decode(“utf-8”)) print(“MOdule0,Channel0:{}”.format(grvEpic.GetDigitalPointState(0,0))) print(“MOdule0,Channel0:{}”.format(grvEpic.GetDigitalPointState(0,1))) print(“Module2,Channel0:{}”.format(grvEpic.GetAnalogPointValue(2,0))) print(“Module3,Channel1:{}”.format(grvEpic.GetAnalogPointValue(3,0)/10.0*100.0)) # for i in range(0,10): grvEpic.SetScratchPadIntegerArea(i,i+10) for i in range(0,10): print(grvEpic.GetScratchPadIntegerArea(i)) grvEpic.close() |
Result
Done!データも書き込みましたし、GetAnalogPointValue() Methodからも書き込んだデータを取得できました。
Unit:GRV-EPIC-PR1 MOdule0,Channel0:1 MOdule0,Channel0:0 Module2,Channel0:19.866363525390625 Module3,Channel1:97.17880249023438 10 11 12 13 14 15 16 17 18 19 |
こちらはGroovMangeから確認した画面です。