How to read hal pin from embedded panel from an other component
- newbynobi
-
Topic Author
- Offline
- Platinum Member
-
Less
More
- Posts: 2081
- Thank you received: 413
16 Mar 2021 18:15 #202493
by newbynobi
How to read hal pin from embedded panel from an other component was created by newbynobi
This might be a very complex question or just a very simple one.
I want to build a universal debug panel as embedded tab. As the panel should be universal and should be able to show also hal pin from other components, I need to get the component hal pin.
If I do this code in the py file of the embedded tab called "debug_panel", embedded in gmoccapy:
I get True for gmoccapy, debug_panel, abs and False for motion.
The strange is, that I get for all components the same ID, something like this:
If I try to read a PIN from gmoccapy as gmoccapy.blockheigt like this:I get an error like:If I try a integer, I just get the corresponding letter of the component name.
Is there a way to read a hal pin from an component outside the own component?
A signal would also be OK, but first I will need to get the "component address" and all my test have failed till now.
Appreciate your help.
Norbert
I want to build a universal debug panel as embedded tab. As the panel should be universal and should be able to show also hal pin from other components, I need to get the component hal pin.
If I do this code in the py file of the embedded tab called "debug_panel", embedded in gmoccapy:
print(hal.component_exists("gmoccapy"))
print("gmoccapy = ", hal_glib.GComponent("gmoccapy"))
print(hal.component_exists("debug_panel"))
print("timer = ", hal_glib.GComponent("debug_panel"))
print(hal.component_exists("abs"))
print("abs = ", hal_glib.GComponent("abs"))
print(hal.component_exists("motion"))
print("motion = ", hal_glib.GComponent("motion"))
I get True for gmoccapy, debug_panel, abs and False for motion.
The strange is, that I get for all components the same ID, something like this:
True
('gmoccapy = ', <hal_glib.GComponent instance at 0x7f07ac079200>)
True
('debug_panel = ', <hal_glib.GComponent instance at 0x7f07ac079200>)
True
('abs = ', <hal_glib.GComponent instance at 0x7f07ac079200>)
False
('motion = ', <hal_glib.GComponent instance at 0x7f07ac079200>)
If I try to read a PIN from gmoccapy as gmoccapy.blockheigt like this:
hal_glib.GComponent("gmoccapy")["blockheight"]
Traceback (most recent call last):
File "./timer.py", line 123, in _periodic2
print("gmoccapy = ", hal_glib.GComponent("gmoccapy")["blockheight"])
File "/home/norbert/linuxcnc-org/lib/python/hal_glib.py", line 77, in __getitem__
def __getitem__(self, k): return self.comp[k]
TypeError: string indices must be integers, not str
Is there a way to read a hal pin from an component outside the own component?
A signal would also be OK, but first I will need to get the "component address" and all my test have failed till now.
Appreciate your help.
Norbert
Please Log in or Create an account to join the conversation.
- andypugh
-
- Offline
- Moderator
-
Less
More
- Posts: 23320
- Thank you received: 4946
18 Mar 2021 01:29 #202695
by andypugh
The component name for motion is "motmod"
I don't know if the hal python interface is documented anywhere but here:
linuxcnc.org/docs/2.8/html/hal/halmodule.html
Replied by andypugh on topic How to read hal pin from embedded panel from an other component
I get True for gmoccapy, debug_panel, abs and False for motion.
The component name for motion is "motmod"
halcmd: show comp
Loaded HAL Components:
ID Type Name PID State
72 User halcmd96007 96007 ready
...
20 RT __servo-thread ready
19 RT motmod ready
...
Is there a way to read a hal pin from an component outside the own component?
import hal
...
v = hal.get_value("motion.program-line")
I don't know if the hal python interface is documented anywhere but here:
linuxcnc.org/docs/2.8/html/hal/halmodule.html
Please Log in or Create an account to join the conversation.
- 5G-antry
- Offline
- New Member
-
Less
More
- Posts: 19
- Thank you received: 0
11 Jan 2022 19:16 - 11 Jan 2022 19:21 #231473
by 5G-antry
Replied by 5G-antry on topic How to read hal pin from embedded panel from an other component
Hello,
Did you manage to read the values of PINs and/or Signals and use them in external software in "real time" (miliseconds range)?
I am currently developing kind of a digital twin of a cnc machine and I am struggeling with this topic.
Best Regards
Did you manage to read the values of PINs and/or Signals and use them in external software in "real time" (miliseconds range)?
I am currently developing kind of a digital twin of a cnc machine and I am struggeling with this topic.
Best Regards
Last edit: 11 Jan 2022 19:21 by 5G-antry.
Please Log in or Create an account to join the conversation.
- Grotius
-
- Offline
- Platinum Member
-
Less
More
- Posts: 2407
- Thank you received: 2320
13 Jan 2022 02:27 #231625
by Grotius
Replied by Grotius on topic How to read hal pin from embedded panel from an other component
Hi,
Here is a c++ example.
1. It finds a component by name.
2. It can retrieve a value of a component item.
3. It shows how to retrieve the servo-time
Here is a c++ example.
1. It finds a component by name.
2. It can retrieve a value of a component item.
3. It shows how to retrieve the servo-time
double hal_interface::print_servo_thread_time(){
/*
if (halpr_find_comp_by_name("matrix") != 0) {
std::cout << "matrix found!" << std::endl;
}
if (halpr_find_param_by_name("matrix.tmax") != 0) {
std::cout << "matrix.time found!" << std::endl;
}*/
//! Get parameter value example
/*
hal_param_t *param;
hal_type_t type;
void *d_ptr;
param = halpr_find_param_by_name("matrix.tmax");
if (param) {
type = param->type;
d_ptr = SHMPTR(param->data_ptr);
static char buf[15];
snprintf(buf, 14, "%ld", (long)*((hal_s32_t *) d_ptr));
std::cout<<"value:"<<buf<<std::endl;
}*/
//! Get pin value example
/*
if (halpr_find_pin_by_name("matrix.time") != 0) {
std::cout << "matrix.time found!" << std::endl;
} */
hal_data_u *value;
hal_type_t type;
bool *con = nullptr;
int r=hal_get_pin_value_by_name("matrix.mainfunction.time",&type,&value,con);
if(r!=0){
std::cout<<"error from /libhal/hal_interface function"<<std::endl;
}
// std::cout << "matrix.time function result:"<<ok<< std::endl;
// std::cout << "matrix.time function result:"<<value->s<< std::endl;
return value->s;
}
The following user(s) said Thank You: 5G-antry
Please Log in or Create an account to join the conversation.
- Grotius
-
- Offline
- Platinum Member
-
Less
More
- Posts: 2407
- Thank you received: 2320
13 Jan 2022 02:38 - 13 Jan 2022 02:40 #231626
by Grotius
Replied by Grotius on topic How to read hal pin from embedded panel from an other component
For example c++: //! Get pin value example
if (halpr_find_pin_by_name("matrix.time") != 0) {
std::cout << "matrix.time found!" << std::endl;
}
github.com/LinuxCNC/linuxcnc/blob/a2f1fd...src/hal/halmodule.cc
Python line 991 :
# Get a Pin, Param or signal value
PyObject *get_value(PyObject *self, PyObject *args)
if (halpr_find_pin_by_name("matrix.time") != 0) {
std::cout << "matrix.time found!" << std::endl;
}
github.com/LinuxCNC/linuxcnc/blob/a2f1fd...src/hal/halmodule.cc
Python line 991 :
# Get a Pin, Param or signal value
PyObject *get_value(PyObject *self, PyObject *args)
Last edit: 13 Jan 2022 02:40 by Grotius.
The following user(s) said Thank You: 5G-antry
Please Log in or Create an account to join the conversation.
Moderators: HansU
Time to create page: 0.086 seconds