2014-04-17 10 views
0

최근에 Anybus Compactcom을 제거하고 약간의 펌웨어 업데이트를 실시하여 장치를 ModbusRTU에서 CANopen으로 전환했습니다. 이 디바이스는 이제 CANopen 노드로서 정상적으로 작동하는 것으로 보이지만, 주기적 데이터 전송을 위해 PDO를 매핑하는 데 문제가 있습니다.Anybus Compactcom을 사용하여 CANopen을 통한 PDO 매핑 및 사이 클릭 데이터 전송

호스트 응용 프로그램은 117 개의 Anybus ADI로 구성되며 각각 UINT16입니다. Anybus 문서에 따르면 ADI는 2001h에서 5fffh (ADI 1-3fff)까지 CANopen 노드의 객체 사전에있는 객체에 해당합니다.

마스터 시뮬레이터를 사용하여 CANopen 노드에서 직접 객체를 읽으려고 할 때마다 매번 예상되는 값을 얻지 만, 내 PDO를 매핑 한 후 첫 번째 ADI (모든 0)를 얻습니다. 주기적인 데이터 읽기. 내 EDS 파일에서

, 나는이 같은 각 ADI 매핑 : 내 마스터 구성 프로그램에서

[2001] 
ParameterName=ADI1 
ObjectType=0x7 
DataType=0x0006 
LowLimit=0x0000 
HighLimit=0xFFFF 
DefaultValue=0x0 
AccessType=ro 
PDOMapping=1 

를, 내가 PDO를 필요 마스터에 구성을 다운로드 ADI의지도. 데이터 전송을 시작하면 첫 번째 ADI가됩니다. 매핑하지 않은 경우에도 마찬가지입니다. ANY 객체가 매핑되어있는 한, 첫 번째 ADI에서 데이터를 가져온 다음 그 이후에 모두 0을 얻습니다.

나는 이것이 복잡한 설정 인 것을 알고 있으며 이것은 좋은 답변을 얻기에 충분한 정보는 아니지만 CANopen을 처음 사용하는 사람이라면 (특히 Anybus-CC를 사용하는) 제안 사항을 확인하거나 설정에 대해 알아야 할 기타 사항을 알려주십시오.

+0

적어도 첫 번째 TPDO에 대해 PDO 매핑을 게시 할 수 있습니까? 이것이 Idx 1A00의 모든 가치입니다. – LogicG8

답변

1

또한 AnyBusCC를 통해 CANopen 인터페이스를 구현하려고합니다. 내부적으로 매핑을 처리하는 데이터 구조의 유형은 다음과 같습니다

typedef struct ABCC_PdMapType 
{ 
    UINT16   iNbrMaps;  /* Number of ADI Write/Read mappings */ 
            /* present in asMaps[] array.   */ 
    ABCC_PdAdiMapType* psMaps;  /* Pointer to Array of ADI mappings */ 

} 
ABCC_PdMapType; 

는 불행하게도 AnyBusCC는 하나의 PDO에 psMaps의 개별 항목을 매핑합니다. 따라서 여러 ADI를 동일한 PDO에 매핑 할 수는 없지만 각 ADI는 다른 PDO에 매핑됩니다. 적어도 그것은 내가 가진 것입니다.

다른 측면에서 가능한 것이 있는지, 즉 0x16xx/0x1Axx 유형의 개체가있는 여러 PDO를 매핑 할 수 있는지 여부는 알 수 없지만 내부 처리에서 가능한 것으로 기대하지는 않습니다.