#deffunc return 変数stat代入命令関数の自作 命令を作る

 

引数のない命令の作り方
命令は何らかな処理を行いたいときに呼び出される処理のまとまりです。
命令を自作するときは、#deffunc命令を使います。
新しい命令名は、命令の内容が分かる名前にします。
※CAOSでは単語の頭のみを大文字にして自作命令および自作関数であること区別しています。
#deffunc 新しい命令名
return

サブプログラムファイル(subprog.hsp)
#ifndef __sample__
#define __sample__

#module sample	//命令関数群の開始行
//ここからグループのプログラムを書くところ

/*////////////////////////////////////////////////////////////////////
処理:時刻を表示
概要:時刻を表示します
引数:
戻値:
--------------------------------------------------------------------*/
#deffunc DrawTime	//時刻を表示する命令
	mes strf("%02d:%02d:%02d",gettime(4),gettime(5),gettime(6))
return


#global	//命令関数群の終了行

#endif

命令名:#deffunc「新しい命令を作る」
新しい命令名:DrawTime「時刻を表示」
(時刻を表示する処理)
命令名:return「新しい命令の終了」

メインプログラムファイル(mainprog.hsp)
#include "subprog.hsp"	//サブプログラムを読み込む

DrawTime	//時間を表示する命令

両方のプログラムが保存できたら、メインプログラムを実行してサブプログラムの命令が正しく実行されるか確認してみましょう。
※以降のプログラムは「subprog.hsp」および「mainprog.hsp」に追記していきます。


 

引数のある命令の作り方
新しい命令名の後に引数の型と引数を列挙していきます。
引数の型とは、呼び出し元が提供するデータの型を指定するものです。
引数名は、この自作命令の中で呼び出し元から得たデータに名前(エイリアス名)をつけます。
#deffunc 新しい命令名 引数の型1 引数名1,引数の型2 引数名2...
return

サブプログラムファイル(subprog.hsp)
#ifndef __sample__
#define __sample__

#module sample	//命令関数群の開始行
//ここからグループのプログラムを書くところ

/*////////////////////////////////////////////////////////////////////
処理:時刻を表示
概要:時刻を表示します
引数:
戻値:
--------------------------------------------------------------------*/
#deffunc DrawTime
	mes strf("%02d:%02d:%02d",gettime(4),gettime(5),gettime(6))
return

/*////////////////////////////////////////////////////////////////////
処理:曜日を表示
概要:曜日を表示します
引数:曜日番号
戻値:
--------------------------------------------------------------------*/
#deffunc DrawWeek int weeknum	//曜日を表示する命令、引数は曜日番号
	switch weeknum
		case 0 : mes "日曜日" : swbreak	//0のとき「日曜日」
		case 1 : mes "月曜日" : swbreak	//1のとき「月曜日」
		case 2 : mes "火曜日" : swbreak	//2のとき「火曜日」
		case 3 : mes "水曜日" : swbreak	//3のとき「水曜日」
		case 4 : mes "木曜日" : swbreak	//4のとき「木曜日」
		case 5 : mes "金曜日" : swbreak	//5のとき「金曜日」
		case 6 : mes "土曜日" : swbreak	//6のとき「土曜日」
		default : mes "エラー" : swbreak	//上記以外エラー
	swend
return


#global	//命令関数群の終了行

#endif

命令名:#deffunc「新しい命令を作る」
新しい命令名:DrawWeek「曜日を表示」
引数の型:int「整数型の値で」
引数名:weeknum「曜日を表す値」
(曜日を表示する処理)
命令名:return「新しい命令の終了」

メインプログラムファイル(mainprog.hsp)
#include "subprog.hsp"	//サブプログラムを読み込む

DrawTime	//時間を表示する命令

DrawWeek gettime(2)	//曜日を表示する命令

上記2つのプログラムは、引数のない命令のプログラムファイルへプログラムを追記した形です。
両方のプログラムが保存できたら、メインプログラムを実行してサブプログラムの命令が正しく実行されるか確認してみましょう。
また、2つの命令がそれぞれ独立して処理されていることを確認してみましょう。
※上記2つののプログラムは「subprog.hsp」および「mainprog.hsp」に追記した形になります。


 

変数stat
命令は、処理を実行するのみで、関数のような値などのデータではありません。
時に命令を実行すると、その実行した結果が知りたいときがあります。そこで、あらかじめ用意されている特殊な変数statを使います。
return 変数statに代入するデータ

サブプログラムファイル(subprog.hsp)
/*////////////////////////////////////////////////////////////////////
処理:平日のみ実行する処理
概要:平日のときだけ処理を実行します
引数:
戻値:実行結果(1:OK,0:NG)
--------------------------------------------------------------------*/
#deffunc ExecWeekDay	//平日のときのみ実行する
	if gettime(2) >= 1 || gettime(2) <= 5{
		mes "平日です。"
		return 1
	}	
return 0

命令名:return「新しい命令の終了」
変数statに代入するデータ:1「OK」0「NG」

メインプログラムファイル(mainprog.hsp)
ExecWeekDay	//平日のときのみ実行する処理を実行
mes stat	//実行結果を表示

変数statには、returnで指定したデータが入っています。
変数statは、自作の命令以外でも使用されています。
変数statを元に処理をする場合は、命令の直後に変数statを元に何か続きの処理を書く必要があります。
上記2つのプログラムは追記部分のみ記しています。

当サイトコンテンツの複写・転載・引用は禁止しております。