Am 06.02.2013 um 16:22 schrieb Chris Morley:

> 
> 
> 
> 
>> 
>> What changes is:
>> 
>> 1. how a HAL component is created - check if comp exists, yell if it does 
>> etc.
>> 2. how a pin is created - checking if the name exists, tell HAL to create a 
>> pin of a certain type and direction.
>> 3. how the current pin value is is read 
>> 4. how a pin value is set
>> 5. how notification of pin value change is processed.
>> 
>> Now going through the list in turn:
>> 
>> 1,2 and 4 are going to be a HAL messsaging RPC (remote procedure call) 
>> operation into machinekit.
>> 3 could be the same, but see below.
>> 5 could be based on 3.
>> 
>> So instead of accessing methods in Python 'hal', it will ask machinekit for 
>> operations which look like a function call at the using level. See footnote 
>> how such an RPC could look in Python _in principle_. The lowest level 
>> machinekit API will look rather similar.
>> 
>> So 'all that is to be done' is replacing one function call by another, and 
>> if we're lucky it is all contained in hal_glib.py. That code could actually 
>> autodetect or ask for configuration information if running 'locally' (shared 
>> memory access) or remote (HAL messaging).
>> 
>> Is that going to work? Yes. Is it going to work fast? Not yet. 
>> 
>> The update network traffic of constant polling for changed values will be 
>> considerable, and given the above, will scale linearly with the number of 
>> HAL widgets.  
>> 
>> This can be fixed with a slight twist in the API - by replacing polling 
>> through change notifications. Instead of constantly polling for the current 
>> value just to detect a change, the HAL messaging API will provide a way to 
>> express 'please notify me if the value of pin X changes'. The machinekit 
>> server will do that change detection for all clients, and all pins with 
>> expressed update interest. It will notify the client by a message if a pin 
>> changes. This message will hook into the GPin update method, and cause a UI 
>> display update.
>> 
>> In essence the clients declare interest in a certain object, and the server 
>> will notify of updates. That is exactly what the publish/subscribe 
>> interaction model is about, regardless whether it'd be HAL pins or stock 
>> quotes. So we need a messaging layer which supports RPC and 
>> publish/subscribe.
>> 
>> This removes the network traffic of constantly polling for changed values; 
>> so in effect we have network traffic only when setting a pin from the GUI, 
>> or when a pin we declared interest in changes value.
>> 
>> Note that the change detection code in the machinekit backend is completely 
>> generic - it need not be aware of any specific machine configuration, just 
>> of the list of 'interesting pins', and the clients will declare that 
>> interest in the startup phase. The only client-specific parameters I could 
>> conceive are: a) an epsilon value for HAL float change detection, b) a 
>> change detect timer value, but that's conceptually not different from the 
>> local case.
>> 
>> ----
>> 
>> coming back up the stack to actually answer the question:
>> 
>> I dont think it is necessary, or desirable, to change the UI programming 
>> paradigm at all as far as HAL/GladeVCP goes. In fact I think the changes can 
>> be contained to a single Python file, and they can be made such that the 
>> using code sees no difference whether shared memory mode or messaging mode 
>> is used.
>> 
>> I still hope I can drag Pavel into advising us on this, but it seems he's 
>> currently busy with family enlargement work;)
>> 
>> 
> 
> Michael
> Thanks for explaining it.
> 
> So if I understood right, for a relatively small code change (maybe a 
> relatively large ideology change) 
> 
> it's an incremental change.
> it switches from polling to  signals
> it allows us to easily separate the UI from the realtime computer. Which is a 
> huge bonus.

yes, to all of the above

> more then likely all the UIs could use the same calls, so setting up UIs is 
> less of a pain for a user.

I hope so. It is unclear to me how TCL-based code would be affected. There is a 
ZeroMQ TCL binding, no idea what the status is.

The ZeroMQ language bindings list is worth a look: 
http://www.zeromq.org/bindings:_start

(see here for the language bindings of a liberally licensed potential future 
alternative (nanomsg): https://github.com/250bpm/ - that's why I'm a royal PITA 
on pressing for ZeroMQ as an option for LinuxCNC)

> we have to fix the licensing problem - this could be considered negative or 
> positive.

yes - the work: negative, the result: positive

> 
> Is ZeroMQ available for windows eg windows UI, linux embeded cnc controller?

Andy's list: Windows, OSX, Linux,  

plus OS X, Android and probably then some - the latter two I'd see as rather 
interesting touch GUI candidate platforms. Also the kivy GUI platfrom which was 
recently mentioned on IRC, but the latter is 'just' a licensing and not a 
platform problem.

Not that I will do any GUI's for those, it'd just be nice to have the option

- Michael
> 
> Chris M
>                                         
> ------------------------------------------------------------------------------
> Free Next-Gen Firewall Hardware Offer
> Buy your Sophos next-gen firewall before the end March 2013 
> and get the hardware for free! Learn more.
> http://p.sf.net/sfu/sophos-d2d-feb
> _______________________________________________
> Emc-developers mailing list
> Emc-developers@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/emc-developers


------------------------------------------------------------------------------
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb
_______________________________________________
Emc-developers mailing list
Emc-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-developers

Reply via email to