Установить данные RPDO с помощью Canopen Python Framework - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь связаться со стандартным устройством CANopen через CAN.Для этого я использую фреймворк Python Canopen (версия 0.9.0).Считывание TPDO (передача данных ведомого) все еще работает.Но если я пытаюсь записать RPDO (получить данные подчиненного устройства), это не сработает.(Запись переменной T30 в RPDO 1 не имеет никакого эффекта).

Моя проблема в том, что я не хочу повторного отображения или чего-то еще.Я только хочу написать объект по умолчанию.

Мой код зависит от примера кода Криса Сандберга, но я не хочу никаких специальных предложений.Только чистые манипуляции с IO.

# Start with creating a network representing one CAN bus
network = canopen.Network()
pCan.Uninitialize(Channel='PCAN_USBBUS1')
#network.check()


# Connect to the CAN bus
# Arguments are passed to python-can's can.interface.Bus() constructor
# (see https://python-can.readthedocs.io/en/stable/bus.html).network.connect()
network.connect(bustype='pcan', channel='PCAN_USBBUS1', bitrate=125000)

# Add some nodes with corresponding Object Dictionaries
node = canopen.RemoteNode (1, 'C:\\Workspace\\project\\hw\\Devices\\eds\\IoX1_16DI_8DO.eds')
network.add_node(node)
node.nmt.state = 'RESET'
time.sleep(1)
node.nmt.state = 'PRE-OPERATIONAL'
# Read a variable using SDO
device_name = node.sdo['Manufacturer Device Name'].raw
print("DEVICE-NAME:",device_name)
vendor_id = node.sdo[0x1018][1].raw
print('VENDOR-ID:',vendor_id)
# Write a variable using SDO

# Read PDO configuration from node
node.tpdo.read()
node.rpdo.read()

# Re-map TPDO[1]
node.tpdo[1].trans_type = 0
node.tpdo[1].enabled = True



T30 = 1
node.rpdo[1].enabled = True
node.rpdo[1].start(0.1)
# Save new PDO configuration to node

# Transmit SYNC every 100 ms
network.sync.start(0.1)

# Change state to operational (NMT start)
node.nmt.state = 'OPERATIONAL'

# Read a value from TPDO[1]
node.tpdo[1].wait_for_reception()
DOHS = int.from_bytes(node.tpdo[1].data, byteorder='big')
print('DOHS_state is:', DOHS)
node.rpdo[1].set_data = T30
...