; EHR_CANIO_305.eds ; CiA 306 Electronic Data Sheet for the EHR / MRS CAN I/O PLC 1.033.305.0001 ; Hand-authored from src/app/user_sources/canopen_od.c, canopen.h and ; src/ds/user/user_code.c (prg_default_parameters / fun_validate_parameters) ; of the firmware that ships this EDS's FileVersion.FileRevision. ; DO NOT hand-edit the Object Dictionary here without also updating ; canopen_od.c (firmware) and pc_tool/co_defs.py (PC tool) -- see the ; [Comments] section and the project README for the three-way sync note. [FileInfo] FileName=EHR_CANIO_305.eds FileVersion=1 FileRevision=0 EDSVersion=4.0 Description=EHR CAN I/O PLC 1.033.305.0001 -- CANopen slave (MSC113-derived, fixed PDO layout) CreationTime=12:00AM CreationDate=09-02-2026 CreatedBy=EHR / ElectroForce ModificationTime=12:00AM ModificationDate=09-02-2026 ModifiedBy=EHR / ElectroForce [DeviceInfo] VendorName=EHR / ElectroForce VendorNumber=0x00000000 ProductName=CAN I/O PLC 1.033.305.0001 ProductNumber=0x00000000 ProductVersion=1 ProductRevision=1 OrderCode=1.033.305.0001 BaudRate_10=1 BaudRate_20=1 BaudRate_50=1 BaudRate_125=1 BaudRate_250=1 BaudRate_500=1 BaudRate_800=0 BaudRate_1000=1 SimpleBootUpMaster=0 SimpleBootUpSlave=1 Granularity=8 DynamicChannelsSupported=0 GroupMessaging=0 NrOfRXPDO=3 NrOfTXPDO=3 LSS_Supported=0 [DeviceComissioning] NodeID=0x0C NodeName=CAN I/O PLC 305 Baudrate=250 NetNumber=0 NetworkName= CANopenManager=0 LSS_SerialNumber=0 [Comments] Lines=9 Line1=This EDS documents the module's actual expedited-SDO Object Dictionary Line2=and identity. It does NOT declare CiA-301 PDO Communication/Mapping Line3=objects (1400-1403 / 1600-1603 / 1801-1803 / 1A00-1A03): this firmware Line4=does not implement them. TPDO1-3/RPDO1-3 COB-IDs and byte layout are Line5=fixed at compile time, not SDO-configurable -- see the printed manual Line6=(EHR_CANIO_305_CANopen_Manual_EN.pdf) for the exact byte tables. A Line7=generic CANopen master that relies on 1600/1A00 for auto PDO wiring Line8=will NOT auto-configure this device from this file alone. Line9=RPDO1 COB-ID base is 0x100 (not the DS-301 default 0x200) -- MSC113-derived. [MandatoryObjects] SupportedObjects=2 1=0x1001 2=0x1018 ; NOTE: object 0x1000 (Device Type), CiA-301's third mandatory object, is ; NOT implemented by this firmware -- documented gap, not an omission here. [1001] ParameterName=Error register ObjectType=0x7 DataType=0x0005 AccessType=ro PDOMapping=0 [1018] ParameterName=Vendor ID ObjectType=0x7 DataType=0x0007 AccessType=ro DefaultValue=0x00000000 PDOMapping=0 ObjFlags=0 ; NOTE: CiA-301 defines 0x1018 as an Identity RECORD (sub1 VendorID / sub2 ; ProductCode / sub3 RevisionNumber / sub4 SerialNumber). This firmware ; exposes a single VAR at sub-index 0 instead -- Product Code / Revision / ; Serial Number are not readable over SDO in this firmware revision. ; VendorNumber/VendorID are placeholders (0x0) pending a CiA-assigned ; Vendor-ID for EHR / ElectroForce. [OptionalObjects] SupportedObjects=17 1=0x1009 2=0x100A 3=0x1010 4=0x1011 5=0x1017 6=0x1800 7=0x6000 8=0x6001 9=0x6002 10=0x6003 11=0x6004 12=0x6010 13=0x2100 14=0x2101 15=0x1001 16=0x1018 17=0x1000 [1009] ParameterName=Hardware version ObjectType=0x7 DataType=0x0007 AccessType=ro PDOMapping=0 [100A] ParameterName=Software version ObjectType=0x7 DataType=0x0007 AccessType=ro DefaultValue=0x00000100 PDOMapping=0 ; 0x0100 = v1.00 (CO_SW_VERSION), zero-extended to U32. [1010] ParameterName=Store parameters ObjectType=0x9 SubNumber=2 [1010sub0] ParameterName=Number of entries ObjectType=0x7 DataType=0x0005 AccessType=ro DefaultValue=1 PDOMapping=0 [1010sub1] ParameterName=Store all parameters ObjectType=0x7 DataType=0x0007 AccessType=wo LowLimit=0x65766173 HighLimit=0x65766173 PDOMapping=0 ; Write ASCII "save" (0x65766173, little-endian) to commit P to EEPROM. ; Any other value is rejected with abort 0x08000020. [1011] ParameterName=Restore default parameters ObjectType=0x9 SubNumber=2 [1011sub0] ParameterName=Number of entries ObjectType=0x7 DataType=0x0005 AccessType=ro DefaultValue=1 PDOMapping=0 [1011sub1] ParameterName=Restore all default parameters ObjectType=0x7 DataType=0x0007 AccessType=wo LowLimit=0x64616F6C HighLimit=0x64616F6C PDOMapping=0 ; Write ASCII "load" (0x64616F6C, little-endian) to reload factory defaults ; into P (still RAM-only until a subsequent 0x1010.1 "save"). [1017] ParameterName=Heartbeat producer time [ms] ObjectType=0x7 DataType=0x0006 AccessType=rw DefaultValue=1000 LowLimit=0 HighLimit=65535 PDOMapping=0 ; 0 = heartbeat sent once at boot-up only, no periodic heartbeat. [1800] ParameterName=PDO parameters (vendor-specific record, MSC113-derived) ObjectType=0x9 SubNumber=5 ; NOTE: NOT the CiA-301 "TPDO Communication Parameter" record (COB-ID / ; Transmission type / Inhibit time / Event timer). Sub-indices 2, 3 and 4 ; do not exist on this device; sub0 (number of entries) reports 7 to match ; the highest implemented sub-index (7), not the count of existing entries. [1800sub0] ParameterName=Number of entries ObjectType=0x7 DataType=0x0005 AccessType=ro DefaultValue=7 PDOMapping=0 [1800sub1] ParameterName=Node-ID ObjectType=0x7 DataType=0x0005 AccessType=rw DefaultValue=12 LowLimit=1 HighLimit=127 PDOMapping=0 [1800sub5] ParameterName=Time Send (TPDO period) [ms] ObjectType=0x7 DataType=0x0006 AccessType=rw DefaultValue=100 LowLimit=10 HighLimit=30000 PDOMapping=0 [1800sub6] ParameterName=Boot mode (0=pre-operational,1=operational) ObjectType=0x7 DataType=0x0006 AccessType=rw DefaultValue=0 LowLimit=0 HighLimit=1 PDOMapping=0 [1800sub7] ParameterName=PDO3 (digital inputs) Tx enable ObjectType=0x7 DataType=0x0006 AccessType=rw DefaultValue=0 LowLimit=0 HighLimit=1 PDOMapping=0 [6000] ParameterName=Pin configuration ObjectType=0x9 SubNumber=15 ; Value legend (object CO_PM_* / manual "Pin Modes" table): ; 0=Disabled 1=Digital output 2=PWM output (IO2..IO7 only) ; 4=Digital input 6=Analog in 0..11.4V 7=Analog in 0..33.68V (AI5 only) ; The raw range accepted here is 0..12 (MSC113 numbering kept for headroom); ; the SDO server additionally enforces a narrower PER-PIN legal set for ; assembly 1.033.305.0001 (voltage-only analog front end) and rejects ; anything else with abort 0x06090030 -- see the manual for the exact ; per-pin table (mirrored in pc_tool/co_defs.py IO_MODES / AI_MODES). [6000sub0] ParameterName=Number of entries ObjectType=0x7 DataType=0x0005 AccessType=ro DefaultValue=14 PDOMapping=0 [6000sub1] ParameterName=Pin mode IO0 ObjectType=0x7 DataType=0x0005 AccessType=rw DefaultValue=0 LowLimit=0 HighLimit=12 PDOMapping=0 [6000sub2] ParameterName=Pin mode IO1 ObjectType=0x7 DataType=0x0005 AccessType=rw DefaultValue=0 LowLimit=0 HighLimit=12 PDOMapping=0 [6000sub3] ParameterName=Pin mode IO2 ObjectType=0x7 DataType=0x0005 AccessType=rw DefaultValue=0 LowLimit=0 HighLimit=12 PDOMapping=0 [6000sub4] ParameterName=Pin mode IO3 ObjectType=0x7 DataType=0x0005 AccessType=rw DefaultValue=0 LowLimit=0 HighLimit=12 PDOMapping=0 [6000sub5] ParameterName=Pin mode IO4 ObjectType=0x7 DataType=0x0005 AccessType=rw DefaultValue=0 LowLimit=0 HighLimit=12 PDOMapping=0 [6000sub6] ParameterName=Pin mode IO5 ObjectType=0x7 DataType=0x0005 AccessType=rw DefaultValue=0 LowLimit=0 HighLimit=12 PDOMapping=0 [6000sub7] ParameterName=Pin mode IO6 ObjectType=0x7 DataType=0x0005 AccessType=rw DefaultValue=0 LowLimit=0 HighLimit=12 PDOMapping=0 [6000sub8] ParameterName=Pin mode IO7 ObjectType=0x7 DataType=0x0005 AccessType=rw DefaultValue=0 LowLimit=0 HighLimit=12 PDOMapping=0 [6000sub9] ParameterName=Pin mode AI0 ObjectType=0x7 DataType=0x0005 AccessType=rw DefaultValue=0 LowLimit=0 HighLimit=12 PDOMapping=0 [6000subA] ParameterName=Pin mode AI1 ObjectType=0x7 DataType=0x0005 AccessType=rw DefaultValue=0 LowLimit=0 HighLimit=12 PDOMapping=0 [6000subB] ParameterName=Pin mode AI2 ObjectType=0x7 DataType=0x0005 AccessType=rw DefaultValue=0 LowLimit=0 HighLimit=12 PDOMapping=0 [6000subC] ParameterName=Pin mode AI3 ObjectType=0x7 DataType=0x0005 AccessType=rw DefaultValue=0 LowLimit=0 HighLimit=12 PDOMapping=0 [6000subD] ParameterName=Pin mode AI4 ObjectType=0x7 DataType=0x0005 AccessType=rw DefaultValue=0 LowLimit=0 HighLimit=12 PDOMapping=0 [6000subE] ParameterName=Pin mode AI5 (0..33.68V capable) ObjectType=0x7 DataType=0x0005 AccessType=rw DefaultValue=0 LowLimit=0 HighLimit=12 PDOMapping=0 [6001] ParameterName=PWM configuration ObjectType=0x9 SubNumber=3 [6001sub0] ParameterName=Number of entries ObjectType=0x7 DataType=0x0005 AccessType=ro DefaultValue=2 PDOMapping=0 [6001sub1] ParameterName=PWM frequency IO2..IO4 [Hz] ObjectType=0x7 DataType=0x0006 AccessType=rw DefaultValue=100 LowLimit=3 HighLimit=500 PDOMapping=0 [6001sub2] ParameterName=PWM frequency IO5..IO7 [Hz] ObjectType=0x7 DataType=0x0006 AccessType=rw DefaultValue=100 LowLimit=3 HighLimit=500 PDOMapping=0 [6002] ParameterName=Fault configuration ObjectType=0x9 SubNumber=5 [6002sub0] ParameterName=Number of entries ObjectType=0x7 DataType=0x0005 AccessType=ro DefaultValue=4 PDOMapping=0 [6002sub1] ParameterName=Fault mode (0=persist/latched,1=auto-reset) ObjectType=0x7 DataType=0x0005 AccessType=rw DefaultValue=0 LowLimit=0 HighLimit=1 PDOMapping=0 [6002sub2] ParameterName=Timeout RX [ms] ObjectType=0x7 DataType=0x0006 AccessType=rw DefaultValue=2000 LowLimit=10 HighLimit=30000 PDOMapping=0 [6002sub3] ParameterName=Startup time (alarm-check delay) [ms] ObjectType=0x7 DataType=0x0006 AccessType=rw DefaultValue=2000 LowLimit=0 HighLimit=30000 PDOMapping=0 [6002sub4] ParameterName=Timeout RX counter not changed [ms] ObjectType=0x7 DataType=0x0006 AccessType=rw DefaultValue=400 LowLimit=100 HighLimit=30000 PDOMapping=0 [6003] ParameterName=Output current feedback (raw ADC, 2.26 mA/digit) ObjectType=0x9 SubNumber=9 [6003sub0] ParameterName=Number of entries ObjectType=0x7 DataType=0x0005 AccessType=ro DefaultValue=8 PDOMapping=0 [6003sub1] ParameterName=Output current feedback IO0 ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6003sub2] ParameterName=Output current feedback IO1 ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6003sub3] ParameterName=Output current feedback IO2 ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6003sub4] ParameterName=Output current feedback IO3 ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6003sub5] ParameterName=Output current feedback IO4 ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6003sub6] ParameterName=Output current feedback IO5 ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6003sub7] ParameterName=Output current feedback IO6 ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6003sub8] ParameterName=Output current feedback IO7 ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6004] ParameterName=Applied output duty [permille] ObjectType=0x9 SubNumber=9 ; Value actually driven at the pin AFTER NMT / PWM-enable / RPDO-timeout ; gating -- i.e. what the pin is really doing, not the raw RPDO command. [6004sub0] ParameterName=Number of entries ObjectType=0x7 DataType=0x0005 AccessType=ro DefaultValue=8 PDOMapping=0 [6004sub1] ParameterName=Applied output duty IO0 [permille] ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6004sub2] ParameterName=Applied output duty IO1 [permille] ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6004sub3] ParameterName=Applied output duty IO2 [permille] ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6004sub4] ParameterName=Applied output duty IO3 [permille] ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6004sub5] ParameterName=Applied output duty IO4 [permille] ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6004sub6] ParameterName=Applied output duty IO5 [permille] ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6004sub7] ParameterName=Applied output duty IO6 [permille] ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6004sub8] ParameterName=Applied output duty IO7 [permille] ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6010] ParameterName=Extended analog inputs [mV] ObjectType=0x9 SubNumber=7 ; ANA_IO0..5 in millivolts, read only while the matching IOx pin is in an ; analog-capable mode. SDO-only -- not carried in any TPDO. [6010sub0] ParameterName=Number of entries ObjectType=0x7 DataType=0x0005 AccessType=ro DefaultValue=6 PDOMapping=0 [6010sub1] ParameterName=Extended AI IO0 [mV] ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6010sub2] ParameterName=Extended AI IO1 [mV] ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6010sub3] ParameterName=Extended AI IO2 [mV] ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6010sub4] ParameterName=Extended AI IO3 [mV] ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6010sub5] ParameterName=Extended AI IO4 [mV] ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [6010sub6] ParameterName=Extended AI IO5 [mV] ObjectType=0x7 DataType=0x0006 AccessType=ro PDOMapping=0 [ManufacturerObjects] SupportedObjects=2 1=0x2100 2=0x2101 [2100] ParameterName=Baud rate [kbit] ObjectType=0x7 DataType=0x0006 AccessType=rw DefaultValue=250 LowLimit=10 HighLimit=1000 PDOMapping=0 ; Valid discrete values only: 10, 20, 50, 100, 125, 250, 500, 1000 kbit. ; 100 kbit is accepted by this firmware but is NOT one of the CiA-301 ; standard bit rates (10/20/50/125/250/500/800/1000) -- no corresponding ; DeviceInfo BaudRate_xxx field exists for it; documented here instead. ; Takes effect only after object 0x1010.1 ("save") + a power cycle: the ; MRS bootloader re-applies the stored baud rate on the next boot. The ; running application keeps the compiled 250 kbit until then. [2101] ParameterName=Node-ID (alias of 0x1800sub1) ObjectType=0x7 DataType=0x0005 AccessType=rw DefaultValue=12 LowLimit=1 HighLimit=127 PDOMapping=0