Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
E
etherlabmaster
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Jira
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
ICS Control System Infrastructure
etherlabmaster
Commits
4225e026
Commit
4225e026
authored
19 years ago
by
Florian Pose
Browse files
Options
Downloads
Patches
Plain Diff
Plugfest: rt und mini angepasst.
parent
f065f020
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
mini/mini.c
+10
-13
10 additions, 13 deletions
mini/mini.c
rt/msr_module.c
+20
-105
20 additions, 105 deletions
rt/msr_module.c
with
30 additions
and
118 deletions
mini/mini.c
+
10
−
13
View file @
4225e026
...
...
@@ -48,28 +48,25 @@ void run(unsigned long data)
static
unsigned
int
counter
=
0
;
#ifdef ASYNC
//
Prozessdaten e
mpfangen
//
E
mpfangen
ecrt_master_async_receive
(
master
);
ecrt_domain_process
(
domain1
);
// Prozessdaten verarbeiten
//k_pos = EC_READ_U32(r_ssi_input);
//k_stat = EC_READ_U8(r_ssi_status);
// Prozessdaten senden
ecrt_domain_queue
(
domain1
);
ecrt_master_run
(
master
);
ecrt_master_async_send
(
master
);
#else
//
Prozessdaten s
enden und empfangen
//
S
enden und empfangen
ecrt_domain_queue
(
domain1
);
ecrt_master_run
(
master
);
ecrt_master_sync_io
(
master
);
ecrt_domain_process
(
domain1
);
#endif
// Prozessdaten verarbeiten
//k_pos = EC_READ_U32(r_ssi_input);
//k_stat = EC_READ_U8(r_ssi_status);
//k_pos = EC_READ_U32(r_ssi);
#ifdef ASYNC
// Senden
ecrt_domain_queue
(
domain1
);
ecrt_master_run
(
master
);
ecrt_master_async_send
(
master
);
#endif
if
(
counter
)
{
...
...
This diff is collapsed.
Click to expand it.
rt/msr_module.c
+
20
−
105
View file @
4225e026
...
...
@@ -38,7 +38,6 @@
#include
"../include/ecrt.h"
#define ASYNC
//#define BLOCK1
// Defines/Makros
#define HZREDUCTION (MSR_ABTASTFREQUENZ / HZ)
...
...
@@ -55,104 +54,48 @@ ec_master_t *master = NULL;
ec_domain_t
*
domain1
=
NULL
;
// Prozessdaten
#ifdef BLOCK1
void
*
r_ssi
,
*
r_ssi_st
;
#else
void
*
r_inc
;
#endif
void
*
r_ssi
;
uint32_t
k_ssi_pos
;
uint32_t
k_ssi_status
;
uint32_t
k_angle
;
uint32_t
k_preio
;
uint32_t
k_postio
;
uint32_t
k_finished
;
// Kanle
uint32_t
k_pos
;
#ifdef BLOCK1
ec_field_init_t
domain1_fields
[]
=
{
{
&
r_ssi
,
"5"
,
"Beckhoff"
,
"EL5001"
,
"InputValue"
,
0
},
{
&
r_ssi_st
,
"5"
,
"Beckhoff"
,
"EL5001"
,
"Status"
,
0
},
{
&
r_ssi
,
"1"
,
"Beckhoff"
,
"EL5001"
,
"InputValue"
,
0
},
{}
};
#else
ec_field_init_t
domain1_fields
[]
=
{
{
&
r_inc
,
"4"
,
"Beckhoff"
,
"EL5101"
,
"InputValue"
,
0
},
{}
};
#endif
/*****************************************************************************/
static
void
msr_controller_run
(
void
)
{
cycles_t
offset
;
static
unsigned
int
counter
=
0
;
offset
=
get_cycles
();
if
(
counter
)
counter
--
;
else
{
//EtherCAT_rt_master_debug(master, 2);
counter
=
MSR_ABTASTFREQUENZ
;
}
k_preio
=
(
uint32_t
)
(
get_cycles
()
-
offset
)
*
1e6
/
cpu_khz
;
#ifdef ASYNC
// Empfangen
ecrt_master_async_receive
(
master
);
ecrt_domain_process
(
domain1
);
// Prozessdaten verarbeiten
#ifdef BLOCK1
k_ssi_pos
=
EC_READ_U32
(
r_ssi
);
k_ssi_status
=
EC_READ_U32
(
r_ssi_st
);
#else
k_angle
=
EC_READ_U16
(
r_inc
);
#endif
// Senden
ecrt_domain_queue
(
domain1
);
ecrt_master_run
(
master
);
ecrt_master_async_send
(
master
);
#else // ASYNC
// Senden und empfangen
ecrt_domain_queue
(
domain1
);
ecrt_master_run
(
master
);
ecrt_master_sync_io
(
master
);
ecrt_domain_process
(
domain1
);
// Prozessdaten verarbeiten
#ifdef BLOCK1
k_ssi_pos
=
EC_READ_U32
(
r_ssi
);
k_ssi_status
=
EC_READ_U32
(
r_ssi_st
);
#else
k_angle
=
EC_READ_U16
(
r_inc
);
#endif
#endif // ASYNC
k_postio
=
(
uint32_t
)
(
get_cycles
()
-
offset
)
*
1e6
/
cpu_khz
;
// Prozessdaten verarbeiten
k_pos
=
EC_READ_U32
(
r_ssi
);
//ecrt_master_debug(master, 0);
k_finished
=
(
uint32_t
)
(
get_cycles
()
-
offset
)
*
1e6
/
cpu_khz
;
#ifdef ASYNC
// Senden
ecrt_domain_queue
(
domain1
);
ecrt_master_run
(
master
);
ecrt_master_async_send
(
master
);
#endif
}
/*****************************************************************************/
int
msr_globals_register
(
void
)
{
msr_reg_kanal
(
"/angle0"
,
""
,
&
k_angle
,
TUINT
);
msr_reg_kanal
(
"/pos0"
,
""
,
&
k_ssi_pos
,
TUINT
);
msr_reg_kanal
(
"/ssi-status0"
,
""
,
&
k_ssi_status
,
TUINT
);
msr_reg_kanal
(
"/Timing/Pre-IO"
,
"ns"
,
&
k_preio
,
TUINT
);
msr_reg_kanal
(
"/Timing/Post-IO"
,
"ns"
,
&
k_postio
,
TUINT
);
msr_reg_kanal
(
"/Timing/Finished"
,
"ns"
,
&
k_finished
,
TUINT
);
msr_reg_kanal
(
"/pos0"
,
""
,
&
k_pos
,
TUINT
);
return
0
;
}
...
...
@@ -189,9 +132,7 @@ void domain_entry(void)
int
__init
init_rt_module
(
void
)
{
struct
ipipe_domain_attr
attr
;
//ipipe
#ifdef BLOCK1
uint8_t
string
[
20
];
size_t
size
;
#if 0
ec_slave_t *slave;
#endif
...
...
@@ -206,6 +147,8 @@ int __init init_rt_module(void)
goto
out_msr_cleanup
;
}
//ecrt_master_print(master, 2);
printk
(
KERN_INFO
"Registering domains...
\n
"
);
if
(
!
(
domain1
=
ecrt_master_create_domain
(
master
)))
{
printk
(
KERN_ERR
"Could not register domain!
\n
"
);
...
...
@@ -224,7 +167,7 @@ int __init init_rt_module(void)
goto
out_release_master
;
}
#if
0
#if
1
if
(
ecrt_master_fetch_sdo_lists
(
master
))
{
printk
(
KERN_ERR
"Failed to fetch SDO lists!
\n
"
);
goto
out_deactivate
;
...
...
@@ -234,39 +177,12 @@ int __init init_rt_module(void)
ecrt_master_print
(
master
,
1
);
#endif
#ifdef BLOCK1
#if 0
if (!(slave = ecrt_master_get_slave(master, "1"))) {
printk(KERN_ERR "Failed to get slave 1!\n");
goto out_deactivate;
}
size
=
10
;
if
(
ecrt_slave_sdo_read
(
slave
,
0x100A
,
0
,
string
,
&
size
))
{
printk
(
KERN_ERR
"Could not read SSI version!
\n
"
);
goto
out_deactivate
;
}
printk
(
KERN_INFO
"Software-version 1: %s
\n
"
,
string
);
if
(
!
(
slave
=
ecrt_master_get_slave
(
master
,
"5"
)))
{
printk
(
KERN_ERR
"Failed to get slave 5!
\n
"
);
goto
out_deactivate
;
}
size
=
10
;
if
(
ecrt_slave_sdo_read
(
slave
,
0x100A
,
0
,
string
,
&
size
))
{
printk
(
KERN_ERR
"Could not read SSI version!
\n
"
);
goto
out_deactivate
;
}
printk
(
KERN_INFO
"Software-version 5: %s
\n
"
,
string
);
size
=
20
;
if
(
ecrt_slave_sdo_read
(
slave
,
0x1008
,
0
,
string
,
&
size
))
{
printk
(
KERN_ERR
"Could not read string!
\n
"
);
goto
out_deactivate
;
}
printk
(
KERN_INFO
"String: %s
\n
"
,
string
);
if (ecrt_slave_sdo_write_exp8(slave, 0x4061, 1, 0) ||
ecrt_slave_sdo_write_exp8(slave, 0x4061, 2, 1) ||
ecrt_slave_sdo_write_exp8(slave, 0x4061, 3, 1) ||
...
...
@@ -293,7 +209,7 @@ int __init init_rt_module(void)
ipipe_register_domain
(
&
this_domain
,
&
attr
);
return
0
;
#if
def BLOCK
1
#if
1
out_deactivate:
ecrt_master_deactivate
(
master
);
#endif
...
...
@@ -314,8 +230,7 @@ void __exit cleanup_rt_module(void)
ipipe_tune_timer
(
1000000000UL
/
HZ
,
0
);
//alten Timertakt wieder herstellen
ipipe_unregister_domain
(
&
this_domain
);
if
(
master
)
{
if
(
master
)
{
printk
(
KERN_INFO
"=== Stopping EtherCAT environment... ===
\n
"
);
printk
(
KERN_INFO
"Deactivating master...
\n
"
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment