Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

CodeSys#Function作る

初めに

今回はCodeSysでFunctionとFunction blockの作成について書きます。
https://help.codesys.com/webapp/_cds_obj_function;product=codesys;version=3.5.16.0
CodeSysのOnline Helpによりますと、Functionとはー

A function is a POU that supplies precisely one data element when executed and whose call in textual languages can occur as an operator in expressions. The data element can also be an array or a structure.

FunctionはPOUとして、実行すると一連の処理し最後は正確に処理結果が返してくるってことです。この処理結果は配列でも構造でもOKです。

Functions have no internal status information, which means that functions do not save the values of their variables until the next call. Calls of a function with the same input variable values always supply the same output value. Therefore, functions must not use global variables and addresses!

Functionは内部メモリがないーつまりFunctionは自分の変数値を次呼び出すまで保持することができません。同じなInput変数と何回呼び出しても常に同じ出力になる。
なので、FunctionはGlobal変数とアドレスを使うべきではありません。

The output variable of a function is the function name.

その処理結果の変数名はFunctionの名前になります。

FUNCTION MyFun:INT
.....
MyFunc:=1;

According to the IEC 61131-3 standard, functions can have additional outputs. You declare the additional outputs in the function between the keywords VAR_OUTPUT and END_VAR.

IEC61131-3によりますとFunctionはOutputsを追加することができます。追加されるOutputはVAR_OUTPUTとEND_VARの間に定義してください。

Functionの作成

円の面積計算するFunctionを作ります。
Add Object>POU
image.png

Functionを選んで、Return type(戻り値)を実数にします。

image.png

INPUTは円の半径ですね。r32Radiusは実数です。
PIは定数でよいでしょう。

image.png

先にも書きましたが、Functionの戻り値はそのFunctionの名前自身です。

image.png

Function用意終わったら次はそれを飛び出すPOUを作ります。
Add Object>POU
image.png

Programを選んでOK。
image.png

2つの変数r33myValとr32myAreaを定義します。
右のToolboxから“Box with EN/ENO”を選択し右にひっばります。
image.png

操作は同じく、…の白いボタンを押し、Text searchで検索し選択、OK。
image.png

r32Radiusは半径の変数として入力、r32myAreaはその演算結果を格納する変数です。
image.png

次は先作ったmyPOU2をTaskとして呼び出す必要があります。
Task Configuration>MainTaskを開いて、myPOU2をそのままひっばります。
image.png

そうするとCallされるPOUが1つ追加されましたね。
image.png

画面

今度は入力画面を作ります。
Labelを選んでひっばります。
image.png

Textのところに表示文字を変更することができます。
image.png

入力BOXを作ります。
Text fieldを選んでひっばります。
image.png

Text variableのとなりにある…のボタンをクリックし、先POUの中に定義したr32myValを選び、OK。
image.png

それだけでなにも反応もありません。
1. Input configuration>OnMouseClickの
2. 隣Configur..のあたりにクリックします。
3. Write a Variable
4. 右への矢印を選びます
5. Input typeは“VisDialogs.Numpad”
6. OK

image.png

最後は表示のほうです。
Text>Textに%fを入れれて実数の表示になります。

image.png

結果

mygif.gif

soup01
free access to information is important. 仕事でFA AREAをやって趣味はPythonなど。 楽しいことたくさんやりたい。 知らない世界へ飛び込みたい。 あと、外国人です。
http://soup01.com/ja/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away