读书人

有人做过基于状态机的程序架构嘛!交流

发布时间: 2012-01-11 22:28:46 作者: rapoo

有人做过基于状态机的程序架构嘛!交流交流
最近的一个运动控制项目,应用比较复杂。
特点如下:
1.数据比较多而且零散
2.无法清晰的将系统划分成独立的模块,这个和认识无关,控制系统里有控制耦合的概念,学控制的人知道
但是呢又需要系统中的模块有些时候需要独立处理,有些时候还必须从耦合的角度去处理多个模块
3.程式前一时刻的状态数据和后一时刻的数据相关,正常情况下我们前面执行的数据影响的是后面的,但是这个正好反过来了
前面数据处理还需要知道下一个数据是什么,但是这个时候程序还没有执行到下一条,所以还不知道是什么数据呢!呵呵所以这里肯定需要后台去处理一些事情。比如说我控制电机转180度,再反转90度,有可能要求电机转到135度的时候就开始减速了,所以有可能会有这样的要求:
move(a1,180);
move(a1,-90);
本质上并不是开线程就这么简单了,如果用通用的方法去做是不行的,因为要求是必须执行完第一句才执行第二句,这与现实相符
===========================================================
经过这些天我自己捉摸,始终无法想出很清晰很简单的办法,但是后来发现和OPENGL的需求很像,这个的确是可以用状态机来描述,但问题是我以前没有做过像状态机这种应用程序的框架,而且一般情况下我们要么是面向配方数据,要么是面对功能要求这种既要求配方数据又要求功能的的确是有些复杂
而且我怎么感觉设计模式里的东西怎么和状态机不靠边啊,我甚至硬套都套不进来啊
=====================================================
来大家谈谈想法



[解决办法]
设置模式中有一个state(状态)。 可以认为这就是状态机的一种。
再说了OO并不是万能的
[解决办法]
没做过,支持
[解决办法]
按照这个来做。
http://www.zxbc.cn/html/20070710/24369.html
[解决办法]
定义一些状态,然后定义一些状态的响应,一个状态与一个状态响应注册为状态机的一个元素,在这元素之间转换就由状态机完成,当一个状态到来时,状态机会自动的就调用对应的响应。你程序设计的重心就落在了定义状态与实现状态响应上,流程设计起来也会简单,细节则状态机帮你处理了。
我们实现的就是通过链表与函数指针来管理状态与状态响应,大至的过程是这个样子:

FSM fsm;
fsm.add(StateA,CallBackA);
fsm.add(StateB,CallBackB);
fsm.add(StateC,CallBackC);

使用
fsm.GOTOSTATE(StateA);//实际上就调用CALLBACKA指向的过程
fsm.GOTOSTATE(StateB);
fsm.GOTOSTATE(StateC);

FSM里面记录有前一个状态,下一个状态等等信息。

不知道楼主要的是不是这样的东西。
[解决办法]
感觉就是面向过程语言中GOTO语句的感觉,只是把它用面像对象的方式封装了一下
[解决办法]
像状态机这种,更像C语言等面向过程中处理比较方便,就是一个处理的过程,不停的转到下一个状态..
[解决办法]
没做过
[解决办法]
好东西,学习了!
[解决办法]
什么是状态机?
[解决办法]
en我也不知道到底该怎么才能 过这关。
[解决办法]
做控制用上位机控制?
[解决办法]

探讨
而且状态并不是离散的,它和编译原理的那个状态机并不相同
这个本质上执行的动作也是一种状态
比如说:
glBegin(GL_LINE_LOOP)
v1
v2
v3
v4
glEnd
这个很好办管理的就是队列,先入的先处理,咱们肯定能很简单的实现这个应用,但前提条件是得一个一个画完了才行,你才知道第四个点
但现在要求是你根据v2来操作v1的时候,应该如何组织程序结构

[解决办法]
关注一下了....
[解决办法]
探讨
引用:

做控制用上位机控制?

呵呵以后的控制已经不分什么上位机下位机了
以后是我们程序员接手控制的时代了哈哈

[解决办法]
做动作时,要将分散的动作细节连贯起来,是想这样吧。

至少可以判断下一个动作的方向,如果是同向的就继续,如果是反向的就刹车。

[解决办法]
状态机 就是状态切换啊 方式可以自己定义啊 可以通过枚举实现 也可以通过消息实现 实现方法有很多中啊
[解决办法]
每一种机制都有其试用范围,不可以把开发控制系统的思路用来开发游戏,相反的也不成立。

探讨
做动作时,要将分散的动作细节连贯起来,是想这样吧。

至少可以判断下一个动作的方向,如果是同向的就继续,如果是反向的就刹车。




[解决办法]
收藏,以后慢慢看!
[解决办法]
学习
[解决办法]
很好,学习中!
[解决办法]
这个都没听说过,
。。。。。。。。。。。。。。。。。。。。。
[解决办法]
控制系统没搞过,不过做语音系统时,是采用状态机的思想
[解决办法]
Y = aX +b
Y = aX^2 +b
其中Y是你前一个状态中的值,X是你后一个状态中的值。你可以用全局变量、接口传递,指针之类所有你能想到的方式以最快的速度传递它们就可以了。只要你的计算速度足够快,就可以越精确的模拟反馈系统
[解决办法]
X = (Y-b)/a
X = sqrt[(Y-b)/a]
[解决办法]
FUCK ,档次差太多了,不懂!
[解决办法]
支持,学习!
[解决办法]
收藏了,很好

读书人网 >VC/MFC

热点推荐