Ok, I missed something. Marco
Hi, I appreciate your solution to avoid modifying the SOEM lib. Everything works now, but with one mistery left: I don't understand why the "EEPROM read" needs Pause and Resume to work properly, but the read back I added, that does exactly the same, doesn't need Pause and Resume. Can you see a reason for that? By the way, in my opinion the read back is necessary because ec_readeepromAP successful, means that the communication between the master and the ESC and between the ESC and the EEPROM was ok,...
Hi, from the WireShark trace, captured during programming, (see attachement) we can see that there are many "EEPROM command error". This is not unusual as it happen if the EEPROM interface, and the EEPROM itself , is not fast enought to cope with the master requestes. This is explained in the Beckhoff documentation as follows: 11.2.1.1 Missing Acknowledge Missing acknowledges from the EEPROM chip are a common issue, especially if a fast PDI uses the EEPROM interface. E.g., a write access to the EEPROM...
Hi, some wrong bytes randomly. I am trying to track down what happen using WireSharK. Bye Marco
Hi, ok for the restored patch in the wrapper, but the EEPROM write still fails. It failed also in R29, also programming the EEPROM in one shot (in my previous post I was wrong). The only way I found to make it work is to disable the cyclic slave polling, commenting out line 242 in MainDialog.cs. The added functions Pause and Resume actually stop and restart the slave polling but this has a good effect on the EEPROM read but not on the EEPROM write. I don't know why ... Regards Marco
Hi, ok for the restored patch in the wrapper, but the EEPROM write still fails. It failed also in R29, also programming the EEPROM in one shot (in my previous post I was wrong). The only way I found to make it work is to disable the cyclic slave polling, commenting out line 242 in MainDialog.cs. The added functions Pause and Resume actually stop and restart the slave polling but this has a good effect on the EEPROM read but not on the EEPROM write. I don't know why ... Regards Marco P.S. A minor...
Hi, the last revision (r29) works only if I write the data to the EEPROM in only one shot (without the progress bar) because you forgot to put my latest patch into the wrapper. uint16 data = ((uint16)buf[i]) & 0x00FF; data |= ((uint16)buf[i + 1]) << 8; Anyway Pause and Resume the cyclical activity do their job. Good night. Marco
Hi, I tested the write EEPROM function with your last code, and it fails with many wrong bytes. This is due to the interference between the cyclic slave polling (10mS sample time) and the programming process. I disabled the cyclic slave polling, in a very crude way, commenting out line 242 in MainDialog.cs // SoemInterrop.Run(); In this way the programming operation succeeds Please note that also the read EEPROM function fails if the cyclic slave polling is running. You can check this executing several...
Hi, thanks, I will get back to you when I have some useful result. No problem for the risk of bricking my EtherCAT board. I use this EtherCAT shield for Arduino and I have the capability of restore the EEPROM in any situation. https://www.bausano.net/en/hardware/ethercat-e-arduino/easycat.html Bye Marco
Hi, I realize now that my patch is wrong. It works with my application because I write the EEPROM in just one chunk, and then starting from 0. The patch must be: uint16 data = ((uint16)buf[i]) & 0x00FF; // Marco new data |= ((uint16)buf[i + 1]) << 8; // " and not: uint16 data = ((uint16)buf[start + i]) & 0x00FF; // Marco wrong data |= ((uint16)buf[start + i + 1]) << 8; // " Good night Marco
Hi, I tested my patch only using the wrapper with my application and I though that the EterCAT Explorer included all the necessary to program the EEPROM. I will try to add the missing code and, if I will succeed, I will get back to you. Regards Marco
Hi, I downloaded the release 0.5 but I see that the "write memory" function is still disabled. Further the release version in the "about" is still stuck to 0.3. Please see attachements. Regards Marco
Thanks for your feedback ! :-) Marco
I use the EtherCAT explorer with satisfaction but I have seen that the EEprom_Write function doesn't work propely. I worked to fix the issue and, after some debug, I replaced line 210 in the SoemWrapper.c file: uint16 data=buf[start]+(((uint16)buf[start+1])<<8); with: uint16 data = ((uint16)buf[start + i]) & 0x00FF; data |= ((uint16)buf[start + i + 1]) << 8; Now the EEprom_Write works fine, and I hope somobody can take advantage of this. Marco