/* 「SimulinkでC言語のS-function使いたい」を試している時の自分用メモ "サポートされているコンパイラまたは SDK が見つかりません。無償提供されている MinGW-w64 C/C++ コンパイラを インストールできます。「Install MinGW-w64 Compiler」を参照してください。その他のオプションについては、 http://www.mathworks.com/support/compilers/R2015b/win64.html を参照してください。" ↓ Cのコンパイラがないと言われているらしい。 MATLABの中から呼んでも、インストールできなかったので、ブラウザで検索して、そこからダウンロードしたら インストールできた(二日がかり) ↓ mex -setup ↓ "MEX は C 言語のコンパイルに 'MinGW64 Compiler (C)' を使用するよう設定されています。 警告: MATLAB C および Fortran API は、2^32-1 を超える要素のある MATLAB 変数をサポートするように変更されました。今後、 新しい API を利用できるようにコードを 更新する必要があります。詳細は、 http://www.mathworks.co.jp/jp/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html を参照してください。 別の言語を選択するには、次のいずれかを選択してください。 mex -setup C++ mex -setup FORTRAN" ↓ mex -setup C++ ↓ mex timestwo.c ↓ "'MinGW64 Compiler (C)' でビルドしています。 MEX は正常に完了しました。" ↓ timestwo(4) ↓ エラー: timestwo MEX level2 S-function "timestwo" must be called with at least 4 right hand arguments ↓ >> timestwo(1,1,0,0) ans = 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 8480229 0 0 0 8194 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 ↓ まったく何のことやら分からんので、今からソースコードの解析に入る */ /* * File : timestwo.c * Abstract: * An example C-file S-function for multiplying an input by 2, * y = 2*u * * See simulink/src/sfuntmpl.doc * * Copyright (c) 1990-1998 by The MathWorks, Inc. All Rights Reserved. * $Revision: 1.3 $ */ #define S_FUNCTION_NAME timestwo #define S_FUNCTION_LEVEL 2 #include "simstruc.h" /* Function: mdlInitializeSizes =============================================== * Abstract: * Setup sizes of the various vectors. */ static void mdlInitializeSizes(SimStruct *S) { ssSetNumSFcnParams(S, 0); if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) { return; /* Parameter mismatch will be reported by Simulink */ } if (!ssSetNumInputPorts(S, 1)) return; ssSetInputPortWidth(S, 0, DYNAMICALLY_SIZED); ssSetInputPortDirectFeedThrough(S, 0, 1); if (!ssSetNumOutputPorts(S,1)) return; ssSetOutputPortWidth(S, 0, DYNAMICALLY_SIZED); ssSetNumSampleTimes(S, 1); /* Take care when specifying exception free code - see sfuntmpl.doc */ ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE); } /* Function: mdlInitializeSampleTimes ========================================= * Abstract: * Specifiy that we inherit our sample time from the driving block. */ static void mdlInitializeSampleTimes(SimStruct *S) { ssSetSampleTime(S, 0, INHERITED_SAMPLE_TIME); ssSetOffsetTime(S, 0, 0.0); } /* Function: mdlOutputs ======================================================= * Abstract: * y = 2*u */ static void mdlOutputs(SimStruct *S, int_T tid) { int_T i; InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0); real_T *y = ssGetOutputPortRealSignal(S,0); int_T width = ssGetOutputPortWidth(S,0); for (i=0; i
_ http://jp.mathworks.com/matlabcentral/answers/97948-tcp-ip#answer_107298
=======
1. 背景
=======
SimulinkのS-Functionが、うんともすんとも動いてくれないので、
Youtubeから"Simulink" "S-Function"で検索した
↓
S-Functionビルダの使い方(ML06 (english) - Simulink S-Function Builder basics)
というのが出てきたので、
(https://www.youtube.com/watch?v=rJfKX2W1WPQ#t=25.657259)
そっくりそのまま、やり方を真似てみたら、動いた。
忘れないうちにそのやり方を、私の為だけにメモしておく。
===========
2. 手順メモ
===========
(Step.1)
Simulinkライブラリブラウザ→"User-Defined Function"→"S-Function Builder"をドラッグ
(Step.2)
"S-Function Builder"の箱をクリック→ S-function名に"s_func_calc_power"と入力
(Step.3)
「データプロパティ」タブ→「入力端子」タブ→端子名"voltage"を作成(後はほっておく)
2つめの入力端子は「入力端子」タブの横にあるボタンで作れるので、端子名"current"を作成(後はほっておく)
(Step.4)
「データプロパティ」タブ→「出力端子」タブ→端子名"power"を作成(後はほっておく)
2つめの入力端子は「入力端子」タブの横にあるボタンで作れるので、端子名"resistance"を作成(後はほっておく)
(Step.5)
画面右上にある「ビルド」ボタンを押下
→"s_func_calc_power"という箱ができる
(Step.6)
Simulinkライブラリーブラウザ→"Commonly Used Blocks"→"Constant"を2つドラッグ
"Constant"とクリックして、片方に定数値"10"を、もう一方に定数値"2"を入力する。
そのブロックからの入力を、"s_func_calc_power"の"voltage"と"current"につなぐ
(Step.7)
Simulinkライブラリーブラウザ→"Commonly Used Blocks"→"Display"を2つドラッグ
"s_func_calc_power"の"power"と"resistance"から、"Display"につなぐ
(Step.8)
コマンドから、"mex s_func_calc_power.c s_func_power_wrapper.c" でコンパイル
(Step.9)
s_func_power_wrapper.cをクリックして、
==============================================================
/*
* Output functions
*
*/
void s_func_calc_power_Outputs_wrapper(const real_T *voltage,
const real_T *current,
real_T *power,
real_T *resistance)
==============================================================
↓
==============================================================
/*
* Output functions
*
*/
void s_func_calc_power_Outputs_wrapper(const real_T *voltage,
const real_T *current,
real_T *power,
real_T *resistance)
{
*power = *voltage * *current;
*resistance = *voltage / *current;
==============================================================
と、入出力関係を追加する
(Step.10)
シミュレーションのボタンを押すと、2つのdisplayに、それぞれ20、5と表示される
=======
3. 結論
=======
こうすれば、s-functionのテンプレートプログラムは作れるので、わざわざS-functino
のコーディングをあーだこーだしなくても済む。
_ http://www.ekidata.jp/
中央線の駅の位置情報 http://www.ekidata.jp/api/l/11311.xmlhttp://www.ekidata.jp/api/l/11312.xml 11311 JR中央本線(東京~塩尻) 138.61735796977746 35.77036733659977 9 2016-09-23 21:13 GMT+09:00 江端智一 11312 JR中央線(快速) 139.53798847265625 35.7001704211487 10 : 時刻表 http://ekikara.jp/newdata/line/1301061/down1_1.htm 駅の位置情報 http://www.ekidata.jp/
_ http://www.kobore.net/henkan.cpp.html
以下の情報をベースに座標を変換(線形)する超単純プログラム 1 府中本町 139.4771944 35.66619444 0 0 2 一橋学園 139.4800722 35.72216111 0 45 3 竹芝 139.7619167 35.65397222 60 0 4 北池袋 139.71675 35.74127778 60 45 5 国分寺 139.480841 35.700123 3 34 6 武蔵境 139.543402 35.702083 12 30 7 三鷹 139.560325 35.702683 20 25 8 吉祥寺 139.579765 35.703119 25 21 9 高円寺 139.649664 35.705326 38 20 10 荻窪 139.620109 35.704523 31 14 11 新宿 139.700464 35.689729 47 20 12 四ツ谷 139.730644 35.686041 52 17 13 東京 139.766103 35.681391 56 15 14 渋谷 139.701238 35.658871 50 4 15 池袋 139.711086 35.730256 54 40
crontabの場所が分からなくて、以前記載した"del_1day"という文字だけを頼りに、find に探して貰った
sudo find ./ -type f -print |xargs grep 'del_1day'
以外なところにあった。
/etc/crontab
ただ、cronでは、最低周期が1時間なので、今回のケース(1分ごとに回す)には使えそうにない→他の方法を探す
上記は間違い。以下でいける
*/1 * * * * ebata /home/ebata/video/monitor.sh > /home/ebata/video/monitor.html