Windows版 iTRONサービスコールの作成 (時間管理機能)
(その7)
アラーム・ハンドラを起動または停止するサービスコールは以下のとおりです。
サービスコール名 | 説明 |
---|---|
sta_alm | アラーム・ハンドラを起動します。 |
stp_alm | アラーム・ハンドラを停止します。 |
※ アラーム・ハンドラの起動および停止はVer4.0でのみサポートされます。
アラーム・ハンドラを起動するには以下のサービスコールを使用します。
ER sta_alm( ID almid, RELTIM almtim )
引数 | 説明 |
---|---|
almid | アラーム・ハンドラID番号。 |
almtim | アラーム・ハンドラの起動時刻。 |
戻り値 | 説明 |
---|---|
E_OK | 正常終了。 |
E_ID | 範囲外のアラーム・ハンドラID番号。 |
E_NOEXS | 指定したアラーム・ハンドラID番号は登録されていない。 |
・サービスコールのソースコードは以下のようになります。
/****************************************************************************/
/*!
* @brief アラーム・ハンドラの起動.
*
* @param [in] almid アラーム・ハンドラID番号.
*
* @retval エラーコード.
*/
ER sta_alm( ID almid, RELTIM almtim )
{
ER ercd;
wi_CommonLock();
//! アラーム・ハンドラを起動する.
ercd = wi_StartAlarmHadler( almid, ((DWORDLONG)(almtim.utime) << 32) + (DWORDLONG)(almtim.ltime) );
wi_CommonUnlock();
return ercd;
}
アラーム・ハンドラの起動関数
アラーム・ハンドラの起動関数のソースコードは以下のとおりです。
/****************************************************************************/
/*!
* @brief アラーム・ハンドラの起動.
*
* @param [in] no アラーム・ハンドラ番号.
* @param [in] almtim 起動時刻.
*
* @retval エラーコード.
*/
ER wi_StartAlarmHadler( INT no, DWORDLONG almtim )
{
ER ercd;
WIALMOBJ *p;
//! アラーム・ハンドラ番号のオブジェクトを取得する.
p = (WIALMOBJ *)wi_FindObject( no, TMAX_MAXALM, ObjList, &ercd );
if( !p ){
return ercd;
}
//! アラーム・ハンドラの起動時刻を現在時刻からの相対時刻でセットする.
p->AlmTime = wi_GetSystemTime() + almtim;
//! アラーム・ハンドラの動作状態を「起動中」にする.
p->Active = TRUE;
return E_OK;
}
アラーム・ハンドラの起動関数は以下のような処理を行います。
- 引数で指定されたアラーム・ハンドラ番号に該当するアラーム・ハンドラ・オブジェクトを取り出します。
- 現在時刻を取得してアラーム・ハンドラの起動時刻を現在時刻からの相対時刻で計算します。
- アラーム・ハンドラの動作状態を「起動中」にして処理を終了します。
アラーム・ハンドラを停止するには以下のサービスコールを使用します。
ER stp_alm( ID almid )
引数 | 説明 |
---|---|
almid | アラーム・ハンドラID番号。 |
戻り値 | 説明 |
---|---|
E_OK | 正常終了。 |
E_ID | 範囲外のアラーム・ハンドラID番号。 |
E_NOEXS | 指定したアラーム・ハンドラID番号は登録されていない。 |
・サービスコールのソースコードは以下のようになります。
/****************************************************************************/
/*!
* @brief アラーム・ハンドラの停止.
*
* @param [in] almid アラーム・ハンドラID番号.
*
* @retval エラーコード.
*/
ER stp_alm( ID almid )
{
ER ercd;
wi_CommonLock();
//! アラーム・ハンドラを停止する.
ercd = wi_StopAlarmHadler( almid );
wi_CommonUnlock();
return ercd;
}
アラーム・ハンドラの停止関数
アラーム・ハンドラの停止関数のソースコードは以下のとおりです。
/****************************************************************************/
/*!
* @brief アラーム・ハンドラの停止.
*
* @param [in] no アラーム・ハンドラ番号.
*
* @retval エラーコード.
*/
ER wi_StopAlarmHadler( INT no )
{
ER ercd;
WIALMOBJ *p;
//! アラーム・ハンドラ番号のオブジェクトを取得する.
p = (WIALMOBJ *)wi_FindObject( no, TMAX_MAXALM, ObjList, &ercd );
if( !p ){
return ercd;
}
//! アラーム・ハンドラの動作状態を「停止中」にする.
p->Active = FALSE;
return E_OK;
}
アラーム・ハンドラの停止関数は以下のような処理を行います。
- 引数で指定されたアラーム・ハンドラ番号に該当するアラーム・ハンドラ・オブジェクトを取り出します。
- アラーム・ハンドラの動作状態を「停止中」にして処理を終了します。