///////////////////////////////////////////////////////////////// // // Filename : MILCOM.H // Content : Define for the Mcom module // Revision : 10.35.1105 // // Copyright © Matrox Electronic Systems Ltd., 1992-2019. // All Rights Reserved // ///////////////////////////////////////////////////////////////// #ifndef __MILCOM_H__ #define __MILCOM_H__ /* C++ directive if needed */ #ifdef __cplusplus extern "C" { #endif /* General milcom defines */ #define M_COM_SUCCESS 0 #define M_COM_ERROR 1 // Allocation control flags #define M_NO_RXYZ_SWAP 0x00000001 #define M_COM_NO_CONNECT 0x00000002 #define M_COM_NO_CONNECT_NO_RXYZ_SWAP 0x00000004 #define M_COM_EMULATION 0x00000008 /**************************************************************************/ /* McomAlloc TypeofProtocol */ /**************************************************************************/ #define M_COM_PROTOCOL_PROFINET 1 #define M_COM_PROTOCOL_ETHERNETIP 2 #define M_COM_PROTOCOL_MODBUS 3 #define M_COM_PROTOCOL_EPSON 4 #define M_COM_PROTOCOL_ABB 5 #define M_COM_PROTOCOL_FANUC 6 #define M_COM_PROTOCOL_KUKA 7 #define M_COM_PROTOCOL_MOTOMAN 8 #define M_COM_PROTOCOL_DENSO 9 #define M_COM_PROTOCOL_STAUBLI 10 #define M_COM_PROTOCOL_GENERIC 11 #define M_COM_PROTOCOL_CCLINK 12 #define M_COM_PROTOCOL_OPCUA 13 /**************************************************************************/ /* McomRead/McomWrite description */ /**************************************************************************/ #define M_DISCRETE_INPUT MIL_TEXT("M_DISCRETE_INPUT") #define M_COILS MIL_TEXT("M_COILS") #define M_HOLDING_REGISTER MIL_TEXT("M_HOLDING_REGISTER") #define M_INPUT_REGISTER MIL_TEXT("M_INPUT_REGISTER") #define M_COM_ETHERNETIP_PRODUCER_ID 110 #define M_COM_ETHERNETIP_PRODUCER MIL_TEXT("110") #define M_COM_ETHERNETIP_CONSUMER_ID 111 #define M_COM_ETHERNETIP_CONSUMER MIL_TEXT("111") #define M_COM_ETHERNETIP_CONFIG_ID 112 #define M_COM_ETHERNETIP_CONFIG MIL_TEXT("112") #define M_COM_MODBUS_PATH(id,table) MIL_TEXT(#id) MIL_TEXT("/") table #define M_COM_MODBUS_TCP_PATH(slave,id,table) MIL_TEXT(#id) MIL_TEXT("@") MIL_TEXT(slave) MIL_TEXT("/") table #define M_COM_ETHERNETIP_PATH(assembly) MIL_TEXT("/") MIL_TEXT(#assembly) #define M_COM_ETHERNETIP_REMOTE_PATH(assembly, remote) MIL_TEXT(slave) MIL_TEXT("/") MIL_TEXT(#assembly) #define M_COM_PROFINET_PATH(module) MIL_TEXT("/") MIL_TEXT(#module) // CClink Device #define M_COM_CCLINK_RAW MIL_TEXT("RAW") #define M_COM_CCLINK_INPUT_FLAG MIL_TEXT("RX") #define M_COM_CCLINK_OUTPUT_FLAG MIL_TEXT("RY") #define M_COM_CCLINK_INPUT_REGISTER MIL_TEXT("RWR") #define M_COM_CCLINK_OUTPUT_REGISTER MIL_TEXT("RWW") // CClink Raw mode Offset #define M_COM_CCLINK_FORCE_READ_INPUT (1UL << 0) #define M_COM_CCLINK_FLAGS_MEMORY_BANK (1UL << 1) #define M_COM_CCLINK_INPUT_FLAGS_MEMORY_BANK (M_COM_CCLINK_FLAGS_MEMORY_BANK | M_COM_CCLINK_FORCE_READ_INPUT) #define M_COM_CCLINK_OUTPUT_FLAGS_MEMORY_BANK (M_COM_CCLINK_FLAGS_MEMORY_BANK) #define M_COM_CCLINK_REGISTERS_MEMORY_BANK (1UL << 2) #define M_COM_CCLINK_INPUT_REGISTERS_MEMORY_BANK (M_COM_CCLINK_REGISTERS_MEMORY_BANK | M_COM_CCLINK_FORCE_READ_INPUT) #define M_COM_CCLINK_OUTPUT_REGISTERS_MEMORY_BANK (M_COM_CCLINK_REGISTERS_MEMORY_BANK) /**************************************************************************/ /* Mcom control/Inquire settings */ /**************************************************************************/ //General #define M_COM_REMOTE_ADDRESS (2|M_CLIENT_ENCODING) #define M_COM_REMOTE_ADDRESS_SIZE (M_STRING_SIZE + M_COM_REMOTE_ADDRESS) #define M_COM_REMOTE_PORT 3 #define M_COM_PROFINET_DEVICEID 7 #define M_COM_PROFINET_GET_MODULES 8 #define M_COM_HOOK_ID 9 #define M_COM_START 10 #define M_COM_TIMEOUT 11 #define M_COM_ABORT 12 #define M_COM_PROFINET_GET_PLC_STATE 13 #define M_COM_GET_CONNECTION_STATE 14 #define M_COM_IS_HARDWARE 15 #define M_COM_PROTOCOL_TYPE 16 #define M_COM_DEVICE_DESCRIPTION (17|M_CLIENT_ENCODING) #define M_COM_DEVICE_DESCRIPTION_SIZE (M_STRING_SIZE + M_COM_DEVICE_DESCRIPTION) #define M_COM_INIT_VALUE 19 #define M_COM_EMULATION_MODE 20 #define M_COM_EMULATOR_SYNC 21 #define M_COM_INSTANCE_NAME (22|M_CLIENT_ENCODING) #define M_COM_PROTOCOL_VERSION 23 #define M_COM_INSTANCE_NAME_SIZE (M_STRING_SIZE + M_COM_INSTANCE_NAME) //Robot #define M_COM_ROBOT_CONNECT 106 #define M_COM_ROBOT_TIMEOUT 107 #define M_COM_ROBOT_ISCONNECTED 108 #define M_COM_ROBOT_COMMAND_ABORT 109 #define M_COM_ROBOT_COMMAND_TIMEOUT 110 #define M_COM_ROBOT_DISCONNECT 111 #define M_COM_ROBOT_CONNECT_RETRY 112 #define M_COM_ROBOT_CONNECT_RETRY_WAIT 113 //Cclink #define M_COM_CCLINK_START 1000 #define M_COM_CCLINK_TOTAL_OCCUPIED_STATION M_COM_CCLINK_START + 1 //Opcua - Open Platform Communications Unified Architecture #define M_COM_OPCUA_START 2000 #define M_COM_OPCUA_NODESET_LIST M_COM_OPCUA_START + 1 //Ethernet/IP #define M_COM_ETHERNETIP_START 20000 #define M_COM_ETHERNETIP_CONSUMER_SIZE M_COM_ETHERNETIP_START + 1 #define M_COM_ETHERNETIP_PRODUCER_SIZE M_COM_ETHERNETIP_START + 2 #define M_COM_ETHERNETIP_CONFIG_SIZE M_COM_ETHERNETIP_START + 3 #define M_COM_ETHERNETIP_ASSEMBLY_LIST M_COM_ETHERNETIP_START + 4 //Profinet Array #define M_COM_PROFINET_GET_MODULE_ID 10000 #define M_COM_PROFINET_GET_MODULE_ID_RANGE 500 //We reserve 500 ID for modules ID #define M_COM_PROFINET_GET_SUBMODULE_ID (M_COM_PROFINET_GET_MODULE_ID + M_COM_PROFINET_GET_MODULE_ID_RANGE) #define M_COM_PROFINET_GET_SUBMODULE_ID_RANGE 500 //We reserve 500 ID for modules ID #define M_COM_PROFINET_GET_MODULE_INSIZE (M_COM_PROFINET_GET_SUBMODULE_ID + M_COM_PROFINET_GET_SUBMODULE_ID_RANGE) #define M_COM_PROFINET_GET_MODULE_INSIZE_RANGE 500 //We reserve 500 ID for module IN size #define M_COM_PROFINET_GET_MODULE_OUTSIZE (M_COM_PROFINET_GET_MODULE_INSIZE + M_COM_PROFINET_GET_MODULE_INSIZE_RANGE) #define M_COM_PROFINET_GET_MODULE_OUTSIZE_RANGE 500 #define M_COM_PROFINET_START (M_COM_PROFINET_GET_MODULE_OUTSIZE + M_COM_PROFINET_GET_MODULE_OUTSIZE_RANGE) #define M_COM_PROFINET_INPUT_SIZE M_COM_PROFINET_START + 1 #define M_COM_PROFINET_OUTPUT_SIZE M_COM_PROFINET_START + 2 //We reserve 500 ID for module OUT size /**************************************************************************/ /* McomControl Parameter */ /**************************************************************************/ /**************************************************************************/ /* McomInquire Parameter */ /**************************************************************************/ //Values for M_COM_PROFINET_GET_PLC_STATE #define M_COM_PROFINET_STATUS_STOP 0x0001 #define M_COM_PROFINET_STATUS_RUN 0x0002 #define M_COM_PROFINET_STATUS_PRIMARY 0x0010 #define M_COM_PROFINET_STATUS_BACKUP 0x0020 #define M_COM_PROFINET_STATUS_STATION_OK 0x0040 /**************************************************************************/ /* McomHookFunction HookType */ /**************************************************************************/ #define M_COM_ERROR_TRIGGER 4 #define M_COM_DATA_CHANGE 5 #define M_COM_GET_HOOK_INFO_SIZE 0x8000000000000000 /**************************************************************************/ /* McomGetHookInfo(), Info type */ /**************************************************************************/ #define M_COM_ID 99 #define M_COM_ERROR_NUMBER 56 #define M_COM_PROFINET_SLOT_CHANGED_COUNT 57 #define M_COM_PROFINET_SLOT_CHANGED_LIST 58 #define M_COM_EVENT_ID 59 #define M_COM_ERR_OFFSET 47000L /**************************************************************************/ /* McomQueryProtocols */ /**************************************************************************/ #define M_COM_PROTOCOL_NAME_SIZE 50 #define M_COM_PROTOCOL_TYPE_ALL 0 #define M_COM_PROTOCOL_TYPE_PLC 1 #define M_COM_PROTOCOL_TYPE_ROBOT 2 /**************************************************************************/ /* McomSendPositionXXX */ /**************************************************************************/ #define M_COM_FIND_POSITION_REQUEST 1 #define M_COM_ROBOT_FIND_POSITION_RESULT 2 #define M_COM_USER_OPCODE 1000 /**************************************************************************/ /* Function prototypes */ /**************************************************************************/ typedef MIL_HOOK_FUNCTION_PTR MIL_COM_HOOK_FUNCTION_PTR; #if M_MIL_USE_UNICODE MIL_ID MFTYPE McomAllocW(MIL_ID SysId, MIL_INT64 ProtocolType, MIL_CONST_TEXTW_PTR DeviceDescription, MIL_INT64 InitFlag, MIL_INT64 InitValue, MIL_ID* ComIdPtr); MIL_ID MFTYPE McomAllocA(MIL_ID SysId, MIL_INT64 ProtocolType, MIL_CONST_TEXTA_PTR DeviceDescription, MIL_INT64 InitFlag, MIL_INT64 InitValue, MIL_ID* ComIdPtr); void MFTYPE McomReadW(MIL_ID ComId, MIL_CONST_TEXTW_PTR DataObjectEntryName, MIL_INT Offset, MIL_INT Size, void* UserArrayPtr); void MFTYPE McomReadA(MIL_ID ComId, MIL_CONST_TEXTA_PTR DataObjectEntryName, MIL_INT Offset, MIL_INT Size, void* UserArrayPtr); void MFTYPE McomWriteW(MIL_ID ComId, MIL_CONST_TEXTW_PTR DataObjectEntryName, MIL_INT Offset, MIL_INT Size, const void* UserArrayPtr); void MFTYPE McomWriteA(MIL_ID ComId, MIL_CONST_TEXTA_PTR DataObjectEntryName, MIL_INT Offset, MIL_INT Size, const void* UserArrayPtr); MIL_INT MFTYPE McomQueryProtocolsW(MIL_ID SystemId, MIL_INT Type, MIL_INT Version, MIL_INT Index, MIL_TEXTW_PTR Name, MIL_INT64* Id); MIL_INT MFTYPE McomQueryProtocolsA(MIL_ID SystemId, MIL_INT Type, MIL_INT Version, MIL_INT Index, MIL_TEXTA_PTR Name, MIL_INT64* Id); void MFTYPE McomControlText(MIL_ID ComId, MIL_INT64 ControlType, MIL_CONST_TEXT_PTR ControlValue); void MFTYPE McomControlTextW(MIL_ID ComId, MIL_INT64 ControlType, MIL_CONST_TEXTW_PTR ControlValue); void MFTYPE McomControlTextA(MIL_ID ComId, MIL_INT64 ControlType, MIL_CONST_TEXTA_PTR ControlValue); #else MIL_ID MFTYPE McomAlloc(MIL_ID SysId, MIL_INT64 ProtocolType, MIL_CONST_TEXT_PTR DeviceDescription, MIL_INT64 InitFlag, MIL_INT64 InitValue, MIL_ID* ComIdPtr); void MFTYPE McomRead(MIL_ID ComId, MIL_CONST_TEXT_PTR DataObjectEntryName, MIL_INT Offset, MIL_INT Size, void* UserArrayPtr); void MFTYPE McomWrite(MIL_ID ComId, MIL_CONST_TEXT_PTR DataObjectEntryName, MIL_INT Offset, MIL_INT Size, const void* UserArrayPtr); MIL_INT MFTYPE McomQueryProtocols(MIL_ID SystemId, MIL_INT Type, MIL_INT Version, MIL_INT Index, MIL_TEXT_PTR Name, MIL_INT64* Id); void MFTYPE McomControlText(MIL_ID ComId, MIL_INT64 ControlType, MIL_CONST_TEXT_PTR ControlValue); #endif #if M_MIL_USE_64BIT // Prototypes for 64 bits OSs void MFTYPE McomControlInt64(MIL_ID ComId, MIL_INT64 ControlType, MIL_INT64 ControlValue); void MFTYPE McomControlDouble(MIL_ID ComId, MIL_INT64 ControlType, MIL_DOUBLE ControlValue); #else // Prototypes for 32 bits OSs #define McomControlInt64 McomControl #define McomControlDouble McomControl void MFTYPE McomControl(MIL_ID ComId, MIL_INT64 ControlType, MIL_DOUBLE ControlValue); #endif MIL_INT MFTYPE McomInquire(MIL_ID ComId, MIL_INT64 InquireType, void* UserVarPtr); MIL_INT MFTYPE McomHookFunction(MIL_ID ComId, MIL_INT HookType, MIL_COM_HOOK_FUNCTION_PTR HookHandlerPtr, void *UserDataPtr); MIL_INT MFTYPE McomGetHookInfo(MIL_ID EventId, MIL_INT64 InfoType, void* UserVarPtr); void MFTYPE McomSendPosition(MIL_ID ComId, MIL_INT64 OperationCode, MIL_INT64 Status, MIL_INT64 ObjectSpecifier, MIL_DOUBLE PositionX, MIL_DOUBLE PositionY, MIL_DOUBLE PositionZ, MIL_DOUBLE RotationX, MIL_DOUBLE RotationY, MIL_DOUBLE RotationZ, MIL_INT64 ControlFlag, MIL_DOUBLE ControlValue); void MFTYPE McomWaitPositionRequest(MIL_ID ComId, MIL_INT64 *OperationCodePtr, MIL_INT64 *StatusPtr, MIL_INT64 *ObjectSpecifierPtr, MIL_DOUBLE *PositionXPtr, MIL_DOUBLE *PositionYPtr, MIL_DOUBLE *PositionZPtr, MIL_DOUBLE *RotationXPtr, MIL_DOUBLE *RotationYPtr, MIL_DOUBLE *RotationZPtr, MIL_INT64 ControlFlag, MIL_DOUBLE ControlValue); void MFTYPE McomSendCommand(MIL_ID ComId, MIL_INT64 OperationCode, MIL_INT64 Status, MIL_INT64 DataSize, void* DataPtr, MIL_INT64 ControlFlag, MIL_DOUBLE ControlValue); void MFTYPE McomReceiveCommand(MIL_ID ComId, MIL_INT64 *OperationCodePtr, MIL_INT64 *StatusPtr, MIL_INT64 ArraySize, void* ArrayPtr, MIL_INT64 *ReceivedDataSizePtr, MIL_INT64 ControlFlag, MIL_DOUBLE ControlValue); void MFTYPE McomFree(MIL_ID ComId); #if M_MIL_USE_UNICODE #if M_MIL_UNICODE_API #define McomRead McomReadW #define McomWrite McomWriteW #define McomAlloc McomAllocW #define McomQueryProtocols McomQueryProtocolsW #else #define McomRead McomReadA #define McomWrite McomWriteA #define McomAlloc McomAllocA #define McomQueryProtocols McomQueryProtocolsA #undef McomControlText #define McomControlText McomControlTextA #endif #endif /* C++ directive if needed */ #ifdef __cplusplus } #endif #if M_MIL_USE_64BIT #ifdef __cplusplus ////////////////////////////////////////////////////////////// // McomControl function definition when compiling c++ files ////////////////////////////////////////////////////////////// #if !M_MIL_USE_LINUX inline void McomControl(MIL_ID ComId, MIL_INT64 ControlType, int ControlValue) { McomControlInt64(ComId, ControlType, ControlValue); }; #endif inline void McomControl(MIL_ID ComId, MIL_INT64 ControlType, MIL_INT32 ControlValue) { McomControlInt64(ComId, ControlType, ControlValue); }; inline void McomControl(MIL_ID ComId, MIL_INT64 ControlType, MIL_INT64 ControlValue) { McomControlInt64(ComId, ControlType, ControlValue); }; inline void McomControl(MIL_ID ComId, MIL_INT64 ControlType, MIL_DOUBLE ControlValue) { McomControlDouble(ComId, ControlType, ControlValue); }; inline void McomControl(MIL_ID ComId, MIL_INT64 ControlType, MIL_CONST_TEXT_PTR ControlValue) { McomControlText(ComId, ControlType, ControlValue); }; #else ////////////////////////////////////////////////////////////// // For C file, call the default function, i.e. Int64 one ////////////////////////////////////////////////////////////// #define McomControl McomControlDouble #endif // __cplusplus #endif // M_MIL_USE_64BIT #endif /* __MILCOM_H__ */