Source code for pyads.constants

# -*- coding: utf-8 -*-
"""Constants for the work with the ADS API.

:author: Stefan Lehmann <stlm@posteo.de>
:license: MIT, see license file or https://opensource.org/licenses/MIT
:created on: 2018-06-11 18:15:53

"""
from typing import Type, Dict, Callable, Union
from ctypes import (
    Array,
    c_bool,
    c_ubyte,
    c_int8,
    c_uint8,
    c_int16,
    c_uint16,
    c_int32,
    c_uint32,
    c_float,
    c_double,
    c_char,
    c_wchar,
    c_int64,
    c_uint64,
)

STRING_BUFFER: int = 1024
PLC_DEFAULT_STRING_SIZE: int = 80

MAX_ADS_SUB_COMMANDS: int = 500


[docs]class PLCTYPE_WSTRING: """Special dummy class for handling WSTRING."""
# plc data types: PLCTYPE_BOOL = c_bool PLCTYPE_BYTE = c_ubyte PLCTYPE_DWORD = c_uint32 PLCTYPE_DINT = c_int32 PLCTYPE_INT = c_int16 PLCTYPE_LREAL = c_double PLCTYPE_REAL = c_float PLCTYPE_SINT = c_int8 PLCTYPE_STRING = c_char PLCTYPE_TOD = c_int32 PLCTYPE_UBYTE = c_ubyte PLCTYPE_UDINT = c_uint32 PLCTYPE_UINT = c_uint16 PLCTYPE_USINT = c_uint8 PLCTYPE_WORD = c_uint16 PLCTYPE_LINT = c_int64 PLCTYPE_ULINT = c_uint64 PLCTYPE_DATE = PLCTYPE_DWORD PLCTYPE_DATE_AND_TIME = PLCTYPE_DWORD PLCTYPE_DT = PLCTYPE_DWORD PLCTYPE_TIME = PLCTYPE_DWORD # Typing PLCSimpleDataType = Union[ PLCTYPE_BOOL, PLCTYPE_BYTE, PLCTYPE_DWORD, PLCTYPE_DINT, PLCTYPE_INT, PLCTYPE_LREAL, PLCTYPE_REAL, PLCTYPE_SINT, PLCTYPE_STRING, PLCTYPE_WSTRING, PLCTYPE_TOD, PLCTYPE_UBYTE, PLCTYPE_UDINT, PLCTYPE_UINT, PLCTYPE_USINT, PLCTYPE_WORD, PLCTYPE_LINT, PLCTYPE_ULINT, PLCTYPE_DATE, PLCTYPE_DATE_AND_TIME, PLCTYPE_DT, PLCTYPE_TIME, ] PLCDataType = Union[Array, PLCSimpleDataType] # Datatype unpacking values DATATYPE_MAP: Dict[Type, str] = { PLCTYPE_BOOL: "<?", PLCTYPE_BYTE: "<B", PLCTYPE_DINT: "<i", PLCTYPE_DWORD: "<I", PLCTYPE_INT: "<h", PLCTYPE_LREAL: "<d", PLCTYPE_REAL: "<f", PLCTYPE_SINT: "<b", PLCTYPE_UDINT: "<I", PLCTYPE_UINT: "<H", PLCTYPE_USINT: "<B", PLCTYPE_LINT: "<q", PLCTYPE_ULINT: "<Q", PLCTYPE_WORD: "<H", } # ADS data types ADST_VOID: int = 0 ADST_INT8: int = 16 ADST_UINT8: int = 17 ADST_INT16: int = 2 ADST_UINT16: int = 18 ADST_INT32: int = 3 ADST_UINT32: int = 19 ADST_INT64: int = 20 ADST_UINT64: int = 21 ADST_REAL32: int = 4 ADST_REAL64: int = 5 ADST_BIGTYPE: int= 65 ADST_STRING: int = 30 ADST_WSTRING: int = 31 ADST_REAL80: int = 32 ADST_BIT: int = 33 ADST_MAXTYPES: int = 34 ads_type_to_ctype = { # ADST_VOID ADST_INT8: PLCTYPE_BYTE, ADST_UINT8: PLCTYPE_UBYTE, ADST_INT16: PLCTYPE_INT, ADST_UINT16: PLCTYPE_UINT, ADST_INT32: PLCTYPE_DINT, ADST_UINT32: PLCTYPE_UDINT, ADST_INT64: PLCTYPE_LINT, ADST_UINT64: PLCTYPE_ULINT, ADST_REAL32: PLCTYPE_REAL, ADST_REAL64: PLCTYPE_LREAL, # ADST_BIGTYPE ADST_STRING: PLCTYPE_STRING, ADST_WSTRING: PLCTYPE_WSTRING, # ADST_REAL80 ADST_BIT: PLCTYPE_BOOL, }
[docs]def PLCTYPE_ARR_REAL(n: int) -> Type[Array]: """Return an array with n float values.""" return c_float * n
[docs]def PLCTYPE_ARR_LREAL(n: int) -> Type[Array]: """Return an array with n double values.""" return c_double * n
[docs]def PLCTYPE_ARR_BOOL(n: int) -> Type[Array]: """Return an array with n boolean values.""" return c_bool * n
[docs]def PLCTYPE_ARR_INT(n: int) -> Type[Array]: """Return an array with n int16 values.""" return c_int16 * n
[docs]def PLCTYPE_ARR_UINT(n: int) -> Type[Array]: """Return an array with n uint16 values.""" return c_uint16 * n
[docs]def PLCTYPE_ARR_SHORT(n: int) -> Type[Array]: """Return an array with n short values.""" return c_int16 * n
[docs]def PLCTYPE_ARR_USHORT(n: int) -> Type[Array]: """Return an array with n ushort values.""" return c_uint16 * n
[docs]def PLCTYPE_ARR_DINT(n: int) -> Type[Array]: """Return an array with n int32 values.""" return c_int32 * n
[docs]def PLCTYPE_ARR_UDINT(n: int) -> Type[Array]: """Return an array with n uint32 values.""" return c_uint32 * n
[docs]def PLCTYPE_ARR_SINT(n: int) -> Type[Array]: """Return an array with n int8 values.""" return c_int8 * n
[docs]def PLCTYPE_ARR_USINT(n: int) -> Type[Array]: """Return an array with n uint8 values.""" return c_uint8 * n
# Map c-type array names to PLCTYPE_* arrays PLC_ARRAY_MAP: Dict[str, Callable] = { 'real': PLCTYPE_ARR_LREAL, # LREAL, not REAL 'boolean': PLCTYPE_ARR_BOOL, 'int32': PLCTYPE_ARR_DINT, 'uint32': PLCTYPE_ARR_UDINT, 'int16': PLCTYPE_ARR_INT, 'uint16': PLCTYPE_ARR_UINT, 'int8': PLCTYPE_ARR_SINT, 'uint8': PLCTYPE_ARR_USINT, } # Index Group # READ_M - WRITE_M INDEXGROUP_MEMORYBYTE = 0x4020 #: plc memory area (%M), offset means byte-offset # READ_MX - WRITE_MX INDEXGROUP_MEMORYBIT = ( 0x4021 ) #: plc memory area (%MX), offset means the bit address, calculatedb by bytenumber * 8 + bitnumber # noqa: E501 # PLCADS_IGR_RMSIZE INDEXGROUP_MEMORYSIZE = 0x4025 #: size of the memory area in bytes # PLCADS_IGR_RWRB INDEXGROUP_RETAIN = 0x4030 #: plc retain memory area, offset means byte-offset # PLCADS_IGR_RRSIZE INDEXGROUP_RETAINSIZE = 0x4035 #: size of the retain area in bytes # PLCADS_IGR_RWDB INDEXGROUP_DATA = 0x4040 #: data area, offset means byte-offset # PLCADS_IGR_RDSIZE INDEXGROUP_DATASIZE = 0x4045 #: size of the data area in bytes ADSIGRP_SYMTAB = 0xF000 ADSIGRP_SYMNAME = 0xF001 ADSIGRP_SYMVAL = 0xF002 ADSIGRP_SYM_HNDBYNAME = 0xF003 ADSIGRP_SYM_VALBYNAME = 0xF004 ADSIGRP_SYM_VALBYHND = 0xF005 ADSIGRP_SYM_RELEASEHND = 0xF006 ADSIGRP_SYM_INFOBYNAME = 0xF007 ADSIGRP_SYM_VERSION = 0xF008 ADSIGRP_SYM_INFOBYNAMEEX = 0xF009 ADSIGRP_SYM_DOWNLOAD = 0xF00A ADSIGRP_SYM_UPLOAD = 0xF00B ADSIGRP_SYM_UPLOADINFO = 0xF00C ADSIGRP_SYM_DOWNLOAD2 = 0xF00D ADSIGRP_SYM_DT_UPLOAD = 0xF00E ADSIGRP_SYM_UPLOADINFO2 = 0xF00F ADSIGRP_SYMNOTE = 0xF010 #: notification of named handle ADSIGRP_IOIMAGE_RWIB = 0xF020 #: read/write input byte(s) ADSIGRP_IOIMAGE_RWIX = 0xF021 #: read/write input bit ADSIGRP_IOIMAGE_RWOB = 0xF030 #: read/write output byte(s) ADSIGRP_IOIMAGE_RWOX = 0xF031 #: read/write output bit ADSIGRP_IOIMAGE_CLEARI = 0xF040 #: write inputs to null ADSIGRP_IOIMAGE_CLEARO = 0xF050 #: write outputs to null ADSIGRP_SUMUP_READ = 0xF080 #: ADS Sum Read Request ADSIGRP_SUMUP_WRITE = 0xF081 #: ADS Sum Write Request ADSIGRP_DEVICE_DATA = 0xF100 #: state, name, etc... ADSIOFFS_DEVDATA_ADSSTATE = 0x0000 #: ads state of device ADSIOFFS_DEVDATA_DEVSTATE = 0x0002 #: device state # PORTS PORT_LOGGER: int = 100 PORT_EVENTLOGGER: int = 110 PORT_REALTIME_CORE: int = 200 # Real-time core PORT_IO: int = 300 PORT_SPECIALTASK1: int = 301 PORT_SPECIALTASK2: int = 302 PORT_NC: int = 500 PORT_SPS1: int = 801 # Twincat 2 Runtime system 1 PORT_SPS2: int = 811 # Twincat 2 Runtime system 2 PORT_SPS3: int = 821 # Twincat 2 Runtime system 3 PORT_SPS4: int = 831 # Twincat 2 Runtime system 4 PORT_TC2PLC1: int = PORT_SPS1 PORT_TC2PLC2: int = PORT_SPS2 PORT_TC2PLC3: int = PORT_SPS3 PORT_TC2PLC4: int = PORT_SPS4 PORT_TC3PLC1: int = 851 # Twincat 3 Runtime system 1 PORT_TC3PLC2: int = 852 # Twincat 3 Runtime system 2 PORT_TC3PLC3: int = 853 # Twincat 3 Runtime system 3 PORT_TC3PLC4: int = 854 # Twincat 3 Runtime system 4 PORT_NOCKE: int = 900 PORT_CAM: int = PORT_NOCKE PORT_SYSTEMSERVICE: int = 10000 PORT_SCOPE: int = 14000 PORT_REMOTE_UDP: int = 48899 # ADSState-constants ADSSTATE_INVALID: int = 0 ADSSTATE_IDLE: int = 1 ADSSTATE_RESET: int = 2 ADSSTATE_INIT: int = 3 ADSSTATE_START: int = 4 ADSSTATE_RUN: int = 5 ADSSTATE_STOP: int = 6 ADSSTATE_SAVECFG: int = 7 ADSSTATE_LOADCFG: int = 8 ADSSTATE_POWERFAILURE: int = 9 ADSSTATE_POWERGOOD: int = 10 ADSSTATE_ERROR: int = 11 ADSSTATE_SHUTDOWN: int = 12 ADSSTATE_SUSPEND: int = 13 ADSSTATE_RESUME: int = 14 ADSSTATE_CONFIG: int = 15 # system is in config mode ADSSTATE_RECONFIG: int = 16 # system should restart in config mode # ADSTransmode ADSTRANS_NOTRANS: int = 0 #: no notifications ADSTRANS_CLIENTCYCLE: int = 1 ADSTRANS_CLIENT1REQ: int = 2 ADSTRANS_SERVERCYCLE: int = 3 #: notify on a cyclic base ADSTRANS_SERVERONCHA: int = 4 #: notify everytime the value changes # symbol flags ADSSYMBOLFLAG_PERSISTENT = 0x00000001 ADSSYMBOLFLAG_BITVALUE = 0x00000002 ADSSYMBOLFLAG_REFERENCETO = 0x0004 ADSSYMBOLFLAG_TYPEGUID = 0x0008 ADSSYMBOLFLAG_TCCOMIFACEPTR = 0x0010 ADSSYMBOLFLAG_READONLY = 0x0020 ADSSYMBOLFLAG_CONTEXTMASK = 0x0F00 # ADS Command IDs ADSCOMMAND_INVALID = 0x00 ADSCOMMAND_READDEVICEINFO = 0x01 ADSCOMMAND_READ = 0x02 ADSCOMMAND_WRITE = 0x03 ADSCOMMAND_READSTATE = 0x04 ADSCOMMAND_WRITECTRL = 0x05 ADSCOMMAND_ADDDEVICENOTE = 0x06 ADSCOMMAND_DELDEVICENOTE = 0x07 ADSCOMMAND_DEVICENOTE = 0x08 ADSCOMMAND_READWRITE = 0x09 # STATE Flags ADSSTATEFLAG_REQRESP = 0x0001 ADSSTATEFLAG_COMMAND = 0x0004