Opto22#Let’s Use the optommp Python Packages

今回の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してください。

https://github.com/optodeveloper/optommp/archive/refs/heads/master.zip

そして同じ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から確認した画面です。

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする