Skip to main content

Hi Unifacers,

I was asked to develop a Real Time Application using Uniface; this application should be able to manage up to 99 devices, directly connected or indirectly connected through 1-N physical data concentrators, each one managing a blocks of devices.

Those data concentrators are really simple ones; they are NOT able to maintain a queue of data for those devices they managed: for each device just last item of data collected and its timestamp.

The precision of this system should be at thousand second.

There should be a dashboard on a controller station avaliable to send a couple of commands to each single device to manage them, using different protocols when directly connected or when connected through a data concentrator.

A logical schema of the system can be viewed at this address:
LogicalSchema.jpg

Dropbox remove preview
LogicalSchema.jpg
Shared with Dropbox
View this on Dropbox >

In this logical schema one thing is missing: 
when the emergency button is pushed not only devices will be detached from their power supply but also the "Application Data Collector" should pause its work after having saved and committed its latest data collected.

I have written in my career hundreds of Uniface application but never a realtime one... so I am writing here for advices, suggestion, tips & tricks.

Has anyone a similar system in production able to manage thousand second?

Which pitfalls should I consider before starting a project like this?

Thanks in advance for any answer...

Regards,
Gianni



------------------------------
Gianni Sandigliano
IT
------------------------------

Hi Unifacers,

I was asked to develop a Real Time Application using Uniface; this application should be able to manage up to 99 devices, directly connected or indirectly connected through 1-N physical data concentrators, each one managing a blocks of devices.

Those data concentrators are really simple ones; they are NOT able to maintain a queue of data for those devices they managed: for each device just last item of data collected and its timestamp.

The precision of this system should be at thousand second.

There should be a dashboard on a controller station avaliable to send a couple of commands to each single device to manage them, using different protocols when directly connected or when connected through a data concentrator.

A logical schema of the system can be viewed at this address:
LogicalSchema.jpg

Dropbox remove preview
LogicalSchema.jpg
Shared with Dropbox
View this on Dropbox >

In this logical schema one thing is missing: 
when the emergency button is pushed not only devices will be detached from their power supply but also the "Application Data Collector" should pause its work after having saved and committed its latest data collected.

I have written in my career hundreds of Uniface application but never a realtime one... so I am writing here for advices, suggestion, tips & tricks.

Has anyone a similar system in production able to manage thousand second?

Which pitfalls should I consider before starting a project like this?

Thanks in advance for any answer...

Regards,
Gianni



------------------------------
Gianni Sandigliano
IT
------------------------------

🤔 interesting...

It would probably be best to use asynchronous activates to quickly confirm receipt and queue processing. Urouter queues are very reliable and requests will be processed at some point. Even during periods of saturation, response times will always be fast because there is no need to wait for execution to finish. "In Urouter We Trust"

Also, with an asynchronous message, an emergency command could be sent to notify all uservers to stop processing data from a timestamp (queued requests will have an earlier timestamp) and all registered uniface.exe to communicate this to the devices.

I would use 3gl api on clients to launch activates/messages immediately and not have to wait for the trigger to have a time window to do it. I guess everything will go well till you modify the client to make it prettier. Refreshing the screen may collide with messages from devices.

These are just quick ideas because I have never worked with real-time systems.


Regards


------------------------------
Luis Vila
luis.vila@uniface.es
Spain
------------------------------
🤔 interesting...

It would probably be best to use asynchronous activates to quickly confirm receipt and queue processing. Urouter queues are very reliable and requests will be processed at some point. Even during periods of saturation, response times will always be fast because there is no need to wait for execution to finish. "In Urouter We Trust"

Also, with an asynchronous message, an emergency command could be sent to notify all uservers to stop processing data from a timestamp (queued requests will have an earlier timestamp) and all registered uniface.exe to communicate this to the devices.

I would use 3gl api on clients to launch activates/messages immediately and not have to wait for the trigger to have a time window to do it. I guess everything will go well till you modify the client to make it prettier. Refreshing the screen may collide with messages from devices.

These are just quick ideas because I have never worked with real-time systems.


Regards


------------------------------
Luis Vila
luis.vila@uniface.es
Spain
------------------------------

A long, long time ago, I implemented C routines that were loaded into the Uniface process at startup.
With these routines, I was able to intercept Uniface messages to the status bar and push them into a queue, which were later queried by the Uniface ASYNC trigger.  A second thing was to replace the status bar by a new one with more fields and a running clock.
What I mean is that such C routines allow you to convert asynchronous events (Windows messages) into Uniface messages and handle time-critical tasks alongside Uniface processing.

Ingo



------------------------------
Ingo Stiller
Aareon Deutschland GmbH
------------------------------