george.kontogiorgos Posted February 4, 2022 Share Posted February 4, 2022 (edited) Hello, I am unsuccessful trying to trigger data gather from a C background program. I wrote the following program (capp1.c) to debug the problem: /*For more information see notes.txt in the Documentation folder */ #include <gplib.h> #define _PPScriptMode_ // for enum mode, replace this with #define _EnumMode_ #include "../../Include/pp_proj.h" int main(void) { InitLibrary(); // Required for accessing Power PMAC library pshm->Gather.Enable=2; CloseLibrary(); return 0; } Then I built, downloaded and save the project. After that I restarted the controller with $$$ on IDE terminal and run my background program via SSH connection (./capp1.out). The controller then suddenly stops responding on IDE and the controller`s watchdog LED lights up. When I first do some gather via IDE terminal (Configure everhing, Gather.Enable=2 and Gather.Enable=0) , the background program starts working (it sets correctly the enable register and gather the desired data). I have the hypothesis that the commands issued from terminal do some initialization on gather feature but I do not know how to track it. This idea of initialization comes to me when I realized that when I do Gather.Enable=2 on C program the Gather.Index does not automatically erase as it happens when the same command is issued from IDE terminal. So I manually erase the buffer and reset index as follows: /*For more information see notes.txt in the Documentation folder */ #include <gplib.h> #define _PPScriptMode_ // for enum mode, replace this with #define _EnumMode_ #include "../../Include/pp_proj.h" int main(void) { InitLibrary(); // Required for accessing Power PMAC library //Put your code here // Disable any running gather pshm->Gather.Enable=0; // Set sample counter to zero pshm->Gather.Samples=0; // Erase buffer with gpascii command (Index points to buffer's position 0 after clear) GetResponse("clear gather", gpascii_response, 100, 1); // Start gather pshm->Gather.Enable=2; CloseLibrary(); return 0; } Another point is that I could successfully enable the gather at first time after reset by using: GetResponse("Gather.Enable=2", gpascii_response, 100, 1); Instead of: pshm->Gather.Enable=2; I tryed on two different controller's architecture: Type: POWER PMAC BRICK CPU: PowerPC, AMP86xxx Firmware: 2.5.4.0 And Type: POWER PMAC BRICK CPU: arm,LS1021A Firmware: 2.6.0.0 Thanks in advance, George Edited February 4, 2022 by george.kontogiorgos Quote Link to comment Share on other sites More sharing options...
Omron Forums Support Posted February 11, 2022 Share Posted February 11, 2022 I can start gathering by running a C program with the following line after using the plot tool to initialize settings. pshm->Gather.Enable=2; I have a feeling the issue lies in the setup of the "Gather." variables usually configured by the plot tool. Can you try using the tool to set these up as a test? You should be able to close it before your actual gathering and keep the settings. 1 Quote Link to comment Share on other sites More sharing options...
george.kontogiorgos Posted February 11, 2022 Author Share Posted February 11, 2022 (edited) Hi Eric, As your suggestion I did some tests as follows. Test 1 I issued the folowing commands (on that order) on the terminal: $$$ Gather.Items=1 Gather.Addr[0]=Sys.ServoCount.a Gather.Period=1 Gather.MaxSamples=100000 And then I ran my C Background Program with the following content /*For more information see notes.txt in the Documentation folder */ #include <gplib.h> #define _PPScriptMode_ // for enum mode, replace this with #define _EnumMode_ #include "../../Include/pp_proj.h" int main(void) { InitLibrary(); // Required for accessing Power PMAC library pshm->Gather.Enable=2; //Put your code here CloseLibrary(); return 0; } And then the PowerPMAC crashed (the red arrow 😞 Test 2 I reseted the PowerPMAC with $$$, opened the plot window and wait it initialize. After that I closed the plot window and set my gather parameters (Just to be the same as the last test since plot window sets Gather.Period and Gather.MaxSamples when it opens). Then I ran my C Background Program (the same as Test 1) and everything goes fine. Conclusions from Test 1 and Test 2 Opening the plot window before using pshm->Gather.Enable=2 on the C Backgroud Program works fine (the PowerPMAC does not crash by enabling gather on a C program). I suspected the Gather.Enable=1 followed by a Gather.Enable=0 that is on plot window Gather Settings area. That was difference from my configuration from terminal and configuration from Plot window. This lead me to Test 3. Test 3 I did exactly the same as Test 1 but adding Gather.Enable=1 followed by a Gather.Enable=0 on Initial gather configuration on IDE Terminal: $$$ Gather.Items=1 Gather.Addr[0]=Sys.ServoCount.a Gather.Period=1 Gather.MaxSamples=100000 Gather.Enable=1 Gather.Enable=0 Then I ran the C Background Program and the PowerPMAC did not crash. Conclusions from Test 3 PowerPMAC Test 3 lead me to the conclusion that setting Gather.Enable=1 or Gather.Enable=2 (value 2 I tested earlier on my first post of this thread) run some initialization on Gather. structure. So I did Test 4 to know if setting Gather.Enable=0 and run the C Background Program crash the PowerPMAC. Test 4 I reseted the PowerPMAC controller and then issued the following commands into the IDE Terminal Gather.Items=1 Gather.Addr[0]=Sys.ServoCount.a Gather.Period=1 Gather.MaxSamples=100000 Gather.Enable=0 Then I ran the C Background Program and the PowerPMAC crashed. Conclusions from Test 4 Setting the same value (Gather.Enable=0) to register and running the C program crash the controller. The last test, the test 5, I just tryed the last option for enabling gather (Gather.Enable=3). Test 5 I reseted the PowerPMAC controller and then issued the following commands into the IDE Terminal Gather.Items=1 Gather.Addr[0]=Sys.ServoCount.a Gather.Period=1 Gather.MaxSamples=100000 Gather.Enable=3 Gather.Enable=0 // Stop rotary gather Then I ran the C Background Program and the PowerPMAC did not crashed. Conclusion Changing Gather.Enable value from 0 to something different from IDE terminal may initialize something inner the controller that allow pshm-Gather.Enable works fine on a C Background Program. This is what Plot window does when it initializes (we can see on Gather registers changes). Obviously I do not know in fact what the Plot window does and maybe it do some inner controller initialization. Thanks, George Edited February 11, 2022 by george.kontogiorgos 1 Quote Link to comment Share on other sites More sharing options...
george.kontogiorgos Posted February 11, 2022 Author Share Posted February 11, 2022 15 minutes ago, george.kontogiorgos said: And then the PowerPMAC crashed (the red arrow 😞 The sad Emoji was a mistake made by a set of special characters toghether, I'm sorry about it. Quote Link to comment Share on other sites More sharing options...
Omron Forums Support Posted February 14, 2022 Share Posted February 14, 2022 I believe that the act of setting Gather.Enable from the script environment applies the settings in Gather. variables. Setting Gather.Enable to 2 or 3 from C code after changing these settings, but before changing the value in the script environment, will crash PMAC. The "Command" command can be used from C to run code in the script environment after changing these settings. Command("Gather.Enable=2"); 1 Quote Link to comment Share on other sites More sharing options...
george.kontogiorgos Posted February 15, 2022 Author Share Posted February 15, 2022 Hi Eric, 16 hours ago, Eric Hotchkiss said: The "Command" command can be used from C to run code in the script environment after changing these settings. Command("Gather.Enable=2"); Thanks for the tip. I was using to circumvent the problem on my API: GetResponse("Gather.PhaseEnable=2", gpascii_response, 100, 1); But maybe your command is faster than mine since GetResponse has to manipulate the return from the command. I was thinking in just initialize Gather. structure on the begining of my program with something like that // Initialize Gather. struture Command("Gather.Enable=0"); Command("Gather.Enable=1"); Command("Gather.Enable=0"); // Use gather structure directly pshm->Gather.Enable=2; Thanks, George Quote Link to comment Share on other sites More sharing options...
george.kontogiorgos Posted February 22, 2022 Author Share Posted February 22, 2022 Hello, On 2/14/2022 at 8:31 PM, Eric Hotchkiss said: The "Command" command can be used from C to run code in the script environment after changing these settings. Command("Gather.Enable=2"); I would like to use it on CaptCompISR routine, is it possible? What is the best way of enabling gather from interruption? Quote Link to comment Share on other sites More sharing options...
Omron Forums Support Posted February 23, 2022 Share Posted February 23, 2022 The CaptCompISR should be as short as is possible. The best method would be to set a flag (such as a script global variable), that can be reacted to by a background Script/C PLC. Here is an example Script PLC. GLOBAL MyGatherFlag OPEN PLC StartGatherPLC LOCAL MyGatherLatch IF(MyGatherFlag == 1) { IF(MyGatherLatch == 0) { Gather.Enable = 2 MyGatherLatch = 1 } } ELSE { IF(MyGatherLatch == 1) { Gather.Enable = 0 MyGatherLatch = 0 } } CLOSE Quote Link to comment Share on other sites More sharing options...
george.kontogiorgos Posted February 23, 2022 Author Share Posted February 23, 2022 Hi Eric! Thanks for replying me. 12 hours ago, Eric Hotchkiss said: The CaptCompISR should be as short as is possible. Yes, I do know that this is a good pratice, thanks for the advice. I think it would not be a problem if the CaptCompISR just enable the gather. 12 hours ago, Eric Hotchkiss said: The best method would be to set a flag (such as a script global variable), that can be reacted to by a background Script/C PLC. I had this idea but I was trying to avoid any delay between the interruption and enabling the gather. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.