今回はOpennessを使ってTIAでStartDriveを通じて構成したDriveのTelegramを追加・変更などを行いたいと思っております。
TIA Openness Explorer
その前に、まずTIA Openness Explorerをダウンロードしましょう。
このツールを使えば、Opennessの構造よりわかりやすくイメージすることができます。
ダウンロードしたものを解凍し、Siemens.Automation.Opns.Explorerをクリックします。
以下のような画面が出てきます。
まずはDLL Filesの参照場所を設定します。いつもclrライブラリで参照したDLL PATHとまったく一緒です。
もし新しいTIAを開きたいのであれば、”Start new TIA Portal instance”のCheckBOXを入れます。いま開いてるTIAを操作したなら3番のRefreshボタンおし、PIDのところ該当するものを選んで、Start Explorerします。
それだけですOKです!
DriveObject
TIA Openness上でパラメータ・Telegramを変更などした場合はまずDriveObejct Classを作成しないとだめです。
DevicesItem
ではまず前回作ったG120のItemsを取ります。
少しなんで?と思われる人がいると思いますが、TIA Openness Explorerを開いてみると実際以下のCodeで取ろうとするDriveItemは赤矢印のところです。
#Get the G120 Devices Item G120_DriveItem=myproject.Devices[0].Items[0].Items[0] |
でも、0番なら”_0”のDeviceItemImplがあるじゃないですか!それならDevice_0は配列のIndex1番になるはずです!と思われるかもしれません。
そこで、TypeIdentifierを取ってみあす。
>’OrderNumber:6SL3244-0BB12-1FA0/4.7.10′
G120_DriveItem.TypeIdentifier |
Device名も取ってみます。
>’Device_0′
G120_DriveItem.Name |
結果はDevice_0のAttributeに格納した値と一緒です。
そしてPositionNumberのところをみてほしいです。ここには0が入っています。
つまりINDEX 0です。
DriveObject 作成
G120_DriveObj=G120_DriveItem.GetService[MCD.DriveObjectContainer]().DriveObjects[0]
実は先のDeviceItemでGetService<T>という項目があり、それをクリックし、中にある虫眼鏡を押します。
そうすると、該当するItemsがどんなObjectがなど含めているか一覧できます。もちろん、今回私達が必要なMC.Drives.DriveObjectContainerが入っています。
Telegram
次はTelegramを追加しようと思います。
下図ではTelegram30(Proface)、Telegram20(Main)とExtensionあり、あと追加転送Telegram999が入っています。
Main Telegramを確かめてみます。
TelegramNumberはいま使用してるTelegram番号が格納されています。
MainTelegram=G120_DriveObj.Telegrams.Find(0) MainTelegram.TelegramNumber |
>20
そしてちょっと変わったのはGetSize()の関数使うと長さが10、返してくれます。この10は10Wordsの意味です。実際はTelegram20基本6Wordsがあり、そして追加4Wordと一緒に加算し10になります。
MainTelegram.GetSize(tia.HW.AddressIoType.Input) |
>10
Main 6 + Exten4
Outputも、基本は2Wordで追加3Wordなので合計5Wordになります。
MainTelegram.GetSize(tia.HW.AddressIoType.Output) |
Main 2+Exten3
ここでCanChangeSize()という関数を使えばこのTelegramのサイズを変更できるかどうかをCheckできます。
試しにTelegram20のInput Word(6)を3で変えてもいいかな~ってCheckしたら、もちろんだめです。
MainTelegram.CanChangeSize(tia.HW.AddressIoType.Input,3,True) |
>False
なので、ここでChangeSize()を6にしたら、追加Wordなしに変更できます。
MainTelegram.ChangeSize(tia.HW.AddressIoType.Input,6,True) |
ChangeSize()を8にしたら追加Wordは2になりますね。
MainTelegram.ChangeSize(tia.HW.AddressIoType.Input,8,True) |
Telegram番号もset_TelegramNumber()で変更できます。
MainTelegram.set_TelegramNumber(1) |
以下でFind(2)を入れるとFree Telegramの情報いただけます。
AdditionalTelegram=G120_DriveObj.Telegrams.Find(2) |
例えばTelegramNumber。
AdditionalTelegram.TelegramNumber |
>999
Size。
SupplementaryTelegram.GetSize(tia.HW.AddressIoType.Input) |
>6
SupplementaryTelegram.GetSize(tia.HW.AddressIoType.Output) |
>1
999を追加できるかどうかもCheckできます。
G120_DriveObj.Telegrams.CanInsertAdditionalTelegram(2,tia.HW.AddressIoType.Input) |
Output will aslo auto create.
以下の関数で999を探せますし、Sizeも変更できます、
AdditionalTelegram=G120_DriveObj.Telegrams.Find(2) AdditionalTelegram.TelegramNumber AdditionalTelegram.ChangeSize(tia.HW.AddressIoType.Input,6,True) |
Outputも一緒にです。
AdditionalTelegram.ChangeSize(tia.HW.AddressIoType.Output,3,True) |
ProfisafeのTelegram30もFind(3)で情報いただけます。
SafetyTelegram=G120_DriveObj.Telegrams.Find(3) SafetyTelegram.TelegramNumber |
>30
SafetyのTelegram30をInsertできるかどうかもCheckできます。
SAFETY_TELEGRAM_30=30 G120_DriveObj.Telegrams.CanInsertSafetyTelegram(SAFETY_TELEGRAM_30) |
>True
そしてSafetyのTelegram30追加します。
G120_DriveObj.Telegrams.InsertSafetyTelegram(SAFETY_TELEGRAM_30) |
以上ですーお疲れ様です。