--- a/etherlab/plc_etherlab.c Thu Sep 13 11:07:51 2012 +0200
+++ b/etherlab/plc_etherlab.c Wed Sep 19 03:30:58 2012 +0200
@@ -46,6 +46,7 @@
static ec_master_t *master = NULL;
static ec_domain_t *domain1 = NULL;
+static int first_sent=0; /* Beremiz plugin functions */
@@ -103,7 +104,9 @@
fprintf(stdout, "Master %(master_number)d activated...\n");
@@ -114,24 +117,45 @@
ecrt_release_master(master);
void __retrieve_%(location)s(void)
- ecrt_rtdm_domain_queque(rt_fd);
- ecrt_rtdm_master_send(rt_fd);
- rt_task_sleep(rt_timer_ns2tsc(wait_period_ns));
+// ecrt_rtdm_domain_queque(rt_fd); +// ecrt_rtdm_master_send(rt_fd); +// rt_task_sleep(rt_timer_ns2tsc(wait_period_ns)); - ecrt_rtdm_master_recieve(rt_fd);
- ecrt_rtdm_domain_process(rt_fd);
+ ecrt_rtdm_master_recieve(rt_fd); + ecrt_rtdm_domain_process(rt_fd);
+static RTIME _last_occur=0; void __publish_%(location)s(void)
+ ecrt_rtdm_domain_queque(rt_fd); + RTIME _current_time = rt_timer_read(); + RTIME deadline = _last_occur ? + _last_occur + common_ticktime__: + _last_occur = _current_time; + _current_lag = deadline - _current_time; + while(_current_time < deadline) { + _last_occur = _current_time; + _current_time = rt_timer_read(); + ecrt_rtdm_master_send(rt_fd);