how to check syntax error in state flow chart

20 ビュー (過去 30 日間)
gvreddy 2015 年 5 月 26 日
編集済み: gvreddy 2015 年 6 月 9 日
Hello All,
I would like to check syntax errors in state flow state chart. As you see below, I have called state which is State_name, Inside this state I have different actions. If you see state_action2 = 0 missed by following semi colon(;) and state_action3 is not within state area.
How can I check state actions line by line and syntax errors by using m-script/commands?
Any help would be appreciated..


Anthony Poulin
Anthony Poulin 2015 年 5 月 28 日
I give you a small code (not optimize and without check...). The code give the "txt" variable which is the text from a stateflow state and then I put each line in a cell of the cell array "Line".
nlChar = findstr(txt, 10);
Line{1,1} = txt(1:nlChar(1));
for i = 2:length(nlChar)
Line{i,1} = txt(nlChar(i-1)+1:nlChar(i));
Line{i+1,1} = txt(nlChar(i):end);
Then, when you have this cell aray, you just have to make your check on each cells.
  9 件のコメント
gvreddy 2015 年 6 月 9 日
Thank you very much...You helped me a lot...


その他の回答 (2 件)

Anthony Poulin
Anthony Poulin 2015 年 5 月 27 日
I can give you some command line which help you to access to the content of the stateflow chart.
% to catch the root of the stateflow chart, that yoy have selected by clicking on it
SfPath = gcb;
% to catch the stateflow object
SfObj = get_param(SfPath,'Object');
% to catch the chart object
ChartObj = SfObj.find('-isa','Stateflow.Chart');
% to catch all the StatesObj of the chart
StatesObj= ChartObj.find('-isa','Stateflow.State');
% To get the string in the FIRST chart (=> StatesObj(1))
StringInChart = get(StatesObj(1),'LabelString');
I hope it can help you.
(When I needed to access to stateflow data I found a lot of information in: Help > Stateflow > User's Guide > Using the API)
  1 件のコメント
gvreddy 2015 年 5 月 27 日
Hello Anthony,
Thanks for reply.. I have tried that and here is my code:
chartArray = m.find('-isa','Stateflow.Chart');
for i = 1:length(chartArray)
current_chart = chartArray(i);
stateArray = chartArray.find('-isa','Stateflow.State');
for j = 1 : length(stateArray)
current_state = stateArray(j);
state_actions = get(current_state(1),'LabelString');
Here problem is, state_actions returns all statements as single char. please have look on image.
but I want to read actions statements separately. so that I can check each action statement last char whether it ended with semi colon (;) or not and also I can find the length of each action statement.
so please let me know any idea on that?


Anthony Poulin
Anthony Poulin 2015 年 5 月 27 日
Yes, you catch a char containing all the text.
Then you have to treat this char, to separate the line you can find the character "char(10)" (= new line) or "char(13)" (= carriage return).
Is it ok for you, or do you want a short example?

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by