00001
00002
00003
00004 #include <stdlib.h>
00005 #include <stdio.h>
00006 #include <errno.h>
00007 #include <math.h>
00008
00009 #include "motor.h"
00010
00012
00014 CLASS* motor::oclass = NULL;
00015 CLASS* motor::pclass = NULL;
00016
00023 motor::motor(MODULE *mod):node(mod)
00024 {
00025 if(oclass == NULL)
00026 {
00027 pclass = node::oclass;
00028
00029 oclass = gl_register_class(mod,"motor",sizeof(motor),PC_PRETOPDOWN|PC_BOTTOMUP|PC_POSTTOPDOWN|PC_UNSAFE_OVERRIDE_OMIT);
00030 if(oclass == NULL)
00031 GL_THROW("unable to register object class implemented by %s",__FILE__);
00032
00033 if(gl_publish_variable(oclass,
00034 PT_INHERIT, "node",
00035
00036 NULL) < 1) GL_THROW("unable to publish properties in %s",__FILE__);
00037 }
00038 }
00039
00040 int motor::create()
00041 {
00042 int result = node::create();
00043 return result;
00044 }
00045
00046 int motor::init(OBJECT *parent)
00047 {
00048 int result = node::init();
00049
00050 OBJECT *obj = OBJECTHDR(this);
00051 return result;
00052 }
00053 TIMESTAMP motor::presync(TIMESTAMP t0)
00054 {
00055 return TS_NEVER;
00056 }
00057 TIMESTAMP motor::sync(TIMESTAMP t0)
00058 {
00059 return TS_NEVER;
00060 }
00061 TIMESTAMP motor::postsync(TIMESTAMP t0)
00062 {
00063 return TS_NEVER;
00064 }
00065 int motor::isa(char *classname)
00066 {
00067 return strcmp(classname,"motor")==0 || node::isa(classname);
00068 }
00069
00071
00073
00081 EXPORT int create_motor(OBJECT **obj, OBJECT *parent)
00082 {
00083 try
00084 {
00085 *obj = gl_create_object(motor::oclass);
00086 if (*obj!=NULL)
00087 {
00088 motor *my = OBJECTDATA(*obj,motor);
00089 gl_set_parent(*obj,parent);
00090 return my->create();
00091 }
00092 }
00093 catch (const char *msg)
00094 {
00095 gl_error("create_induction_motor: %s", msg);
00096 }
00097 return 0;
00098 }
00099
00100
00101
00108 EXPORT int init_motor(OBJECT *obj)
00109 {
00110 motor *my = OBJECTDATA(obj,motor);
00111 try {
00112 return my->init(obj->parent);
00113 }
00114 catch (const char *msg)
00115 {
00116 GL_THROW("%s (motor:%d): %s", my->get_name(), my->get_id(), msg);
00117 return 0;
00118 }
00119 }
00120
00129 EXPORT TIMESTAMP sync_motor(OBJECT *obj, TIMESTAMP t0, PASSCONFIG pass)
00130 {
00131 motor *pObj = OBJECTDATA(obj,motor);
00132 try {
00133 TIMESTAMP t1 = TS_NEVER;
00134 switch (pass) {
00135 case PC_PRETOPDOWN:
00136 return pObj->presync(t0);
00137 case PC_BOTTOMUP:
00138 return pObj->sync(t0);
00139 case PC_POSTTOPDOWN:
00140 t1 = pObj->postsync(t0);
00141 obj->clock = t0;
00142 return t1;
00143 default:
00144 throw "invalid pass request";
00145 }
00146 } catch (const char *error) {
00147 GL_THROW("%s (motor:%d): %s", pObj->get_name(), pObj->get_id(), error);
00148 return 0;
00149 } catch (...) {
00150 GL_THROW("%s (motor:%d): %s", pObj->get_name(), pObj->get_id(), "unknown exception");
00151 return 0;
00152 }
00153 }
00154
00163 EXPORT int isa_motor(OBJECT *obj, char *classname)
00164 {
00165 return OBJECTDATA(obj,motor)->isa(classname);
00166 }
00167