New EtherCAT Slave Devices REAL data to HAL

More
1 year 2 months ago #333318 by emresensoy
Hi there,
I made a new ethercat slave device, that you can connect any incremental encoder to ethercat network,
you can watch its video;


Everything is ok with Twincat, I can read A B Z pin situations, encoder puls register (s32), encoder rpm value (real)
But in HAL, I cant get ENC2RPM value correctly, it shows irrelevant numbers,
in xml file there is;
Code:
<pdoEntry idx="0006" subIdx="01" bitLen="32" halPin="ENC2RPM" halType="float" />

Main question;
what should be the halType for a variable that can read successfully in Twincat (REAL)


Slave devices ethercat xml command output is here;
Code:
<!-- Slave 3 -->     <Vendor>       <Id>1640067</Id>     </Vendor>     <Descriptions>       <Devices>         <Device>           <Type ProductCode="#x00000001" RevisionNo="#x00000002">ENCODER INTERFACE</Type>           <Name><![CDATA[ENCODER INTERFACE]]></Name>           <Sm Enable="1" StartAddress="#x1000" ControlByte="#x64" DefaultSize="0" />           <Sm Enable="1" StartAddress="#x1200" ControlByte="#x20" DefaultSize="0" />           <RxPdo Sm="0" Fixed="1" Mandatory="1">             <Index>#x1600</Index>             <Name>Outputs</Name>             <Entry>               <Index>#x0005</Index>               <SubIndex>1</SubIndex>               <BitLen>32</BitLen>               <Name>ENC1_PULS_PER_REV</Name>               <DataType>UINT32</DataType>             </Entry>             <Entry>               <Index>#x0005</Index>               <SubIndex>2</SubIndex>               <BitLen>32</BitLen>               <Name>ENC2_PULS_PER_REV</Name>               <DataType>UINT32</DataType>             </Entry>           </RxPdo>           <TxPdo Sm="1" Fixed="1" Mandatory="1">             <Index>#x1a00</Index>             <Name>Inputs</Name>             <Entry>               <Index>#x0006</Index>               <SubIndex>1</SubIndex>               <BitLen>32</BitLen>               <Name>ENC1RPM</Name>               <DataType>UINT32</DataType>             </Entry>             <Entry>               <Index>#x0006</Index>               <SubIndex>2</SubIndex>               <BitLen>32</BitLen>               <Name>REAL_ENC1_PULSE_PER_REV</Name>               <DataType>UINT32</DataType>             </Entry>             <Entry>               <Index>#x0006</Index>               <SubIndex>3</SubIndex>               <BitLen>32</BitLen>               <Name>ENC2RPM</Name>               <DataType>UINT32</DataType>             </Entry>             <Entry>               <Index>#x0006</Index>               <SubIndex>4</SubIndex>               <BitLen>32</BitLen>               <Name>REAL_ENC2_PULSE_PER_REV</Name>               <DataType>UINT32</DataType>             </Entry>             <Entry>               <Index>#x0006</Index>               <SubIndex>5</SubIndex>               <BitLen>16</BitLen>               <Name>ENC2POSITION</Name>               <DataType>UINT16</DataType>             </Entry>             <Entry>               <Index>#x0006</Index>               <SubIndex>6</SubIndex>               <BitLen>16</BitLen>               <Name>ENC1POSITION</Name>               <DataType>UINT16</DataType>             </Entry>             <Entry>               <Index>#x0006</Index>               <SubIndex>7</SubIndex>               <BitLen>8</BitLen>               <Name>ENC2A</Name>               <DataType>UINT8</DataType>             </Entry>             <Entry>               <Index>#x0006</Index>               <SubIndex>8</SubIndex>               <BitLen>8</BitLen>               <Name>ENC2B</Name>               <DataType>UINT8</DataType>             </Entry>             <Entry>               <Index>#x0006</Index>               <SubIndex>9</SubIndex>               <BitLen>8</BitLen>               <Name>ENC2Z</Name>               <DataType>UINT8</DataType>             </Entry>             <Entry>               <Index>#x0006</Index>               <SubIndex>10</SubIndex>               <BitLen>8</BitLen>               <Name>ENC1A</Name>               <DataType>UINT8</DataType>             </Entry>             <Entry>               <Index>#x0006</Index>               <SubIndex>11</SubIndex>               <BitLen>8</BitLen>               <Name>ENC1Z</Name>               <DataType>UINT8</DataType>             </Entry>             <Entry>               <Index>#x0006</Index>               <SubIndex>12</SubIndex>               <BitLen>8</BitLen>               <Name>ENC1B</Name>               <DataType>UINT8</DataType>             </Entry>           </TxPdo>         </Device>       </Devices>

           

Please Log in to join the conversation.

More
1 year 2 months ago #333332 by Hakan
halType="float-ieee" matches REAL type

Cool board, is there IO on the board as well?
I see you have this in the ESI file
Code:
            <Entry>               <Index>#x0006</Index>               <SubIndex>1</SubIndex>               <BitLen>32</BitLen>               <Name>ENC1RPM</Name>               <DataType>UINT32</DataType>             </Entry>
You might have a mixup on names, ESI file says ENC2RPM is at 0x0006:03
They are also specified here as UINT32. And you say float (Ethercat REAL type).
This doesn't match.
Make the datatype REAL for this variable, read it as a float in the processor and as float-ieee in hal (gous into a float type hal variable)

Please Log in to join the conversation.

More
1 year 2 months ago #333335 by emresensoy
Dear Hakan, 
thank you very much, 
Now everything is ok, and works good,

This encoder interface has no IO,
But I made another IO card, it has 12x Digital input, 12x Digital output, 4x Analog 0-10V input and 4x Analog 0-10V output,

Please Log in to join the conversation.

More
1 year 2 months ago #333384 by Hakan
The boards looks nice, is it a hobby or are you going to sell them?

I guess you already know this but just in case, here is how you create individual pins for i/o
Code:
   <pdoEntry idx="6002" subIdx="00" bitLen="8" halType="complex">             <complexEntry bitLen="1" halPin="in-1" halType="bit"/>             <complexEntry bitLen="1" halPin="in-2" halType="bit"/>             <complexEntry bitLen="1" halPin="in-3" halType="bit"/> and so on

Please Log in to join the conversation.

More
1 year 2 months ago #333432 by emresensoy

Code:
They are also specified here as UINT32. And you say float (Ethercat REAL type). This doesn't match. Make the datatype REAL for this variable, read it as a float in the processor and as float-ieee in hal (gous into a float type hal variable)

as you can see, in the twincat ENC1RPM and ENC2RPM is REAL,
I also checked the XML files, they are REAL too,
But output of ethercat xml command, it seems like UINT32, I dont know why,


By the way, I am planning to sell the boards via ebay, and the Turkish local market via n11.com
there is 3. board, it can control 4x RC servo motor, actually it has 4x  isolated PWM output,

Please Log in to join the conversation.

More
1 year 2 months ago #333453 by Hakan
I would look at the datatypes in the MCU and make sure they are right there.
Linuxcnc reads out this info from the board/mcu.
Can't see from the video but looks like LAN9252 plus mcu.
Then this info comes from the mcu, not the eeprom or esi file.

 

Please Log in to join the conversation.

Time to create page: 0.240 seconds
Powered by Kunena Forum