Attribute VB_Name = "modMBUS_SMS" Option Explicit Private Const OFFSET_4 = 4294967296# ' 2^32 Private Const MAXINT_4 = 2147483647 ' 2^31 -1 Private Const OFFSET_2 = 65536 '2^16 Private Const MAXINT_2 = 32767 '2^15-1 Public Const MBUS_SMS_ERR_OK = &H0 Public Const MBUS_SMS_ERR_PORT_NOT_INITIALIZED = &H1 Public Const MBUS_SMS_ERR_WRITECOMM_ERROR = &H2 Public Const MBUS_SMS_ERR_TIMEOUT = &H3 Public Const MBUS_SMS_ERR_PROT_CHECKSUM_ERROR = &H4 Public Const MBUS_SMS_ERR_ECHO_ONLY = &H5 Public Const MBUS_SMS_ERR_NO_ECHO = &H6 Public Const MBUS_SMS_ERR_ASCIIHEX_TO_BIN_CONV_ERROR = &H7 Public Const MBUS_SMS_ERR_ASSIGNMENT_CFIELD_CIFIELD = &H8 Public Const MBUS_SMS_ERR_NO_RECEIVED_DATA_ASSIGNMENT = &H9 Public Const MBUS_SMS_ERR_WRITECOMM_ABOVE_1024_CHARS = &HA Public Const MBUS_SMS_ERR_READCOMM_ABOVE_1024_CHARS = &HB Public Const MBUS_SMS_ERR_SETCOMMSTATE_SET_BAUDRATE = &HC Public Const MBUS_SMS_ERR_A_FIELD_TX_RX_DIFFERENCE = &HD Public Const MBUS_SMS_ERR_C_FIELD_VALUE_INVALID = &HE Public Const MBUS_SMS_ERR_OPENCOMM = &HF Public Const MBUS_SMS_ERR_BUILDCOMMDCB = &H10 Public Const MBUS_SMS_ERR_SETCOMMSTATE = &H11 Public Const MBUS_SMS_ERR_COMPORT_CANNOT_BE_CHANGED = &H12 Public Const MBUS_SMS_ERR_CLOSEHANDLE = &H13 Public Const MBUS_SMS_ERR_DELAYTIME_NO_BAUDRATE_SET = &H14 Public Const MBUS_SMS_ERR_RECEIVE_BUFFER_TOO_SMALL = &H15 Public Const MBUS_SMS_ERR_OPTO_ON = &H16 Public Const MBUS_SMS_ERR_OPTO_OFF = &H17 Public Const MBUS_SMS_ERR_OPTO_ERROR1 = &H18 Public Const MBUS_SMS_ERR_VARDEF_FILE_NOT_FOUND = &H19 Public Const MBUS_SMS_ERR_CANNOT_LOAD_FILE = &H1A Public Const MBUS_SMS_ERR_VARDEF_FILE_FIELD_COUNT_LOW = &H1B Public Const MBUS_SMS_ERR_VARDEF_INVALID_VARIABLE_TYPE = &H1C Public Const MBUS_SMS_ERR_VARDEF_INVALID_ADDRESS = &H1D Public Const MBUS_SMS_ERR_VARDEF_INVALID_LENGTH = &H1E Public Const MBUS_SMS_ERR_UNKNOWN_VARIABLE = &H1F Public Const MBUS_SMS_ERR_RECEIVE_TELEGRAM_ERROR = &H20 Public Const MBUS_SMS_ERR_VARIABLE_NOT_IN_CRC_SECTION = &H21 Public Const MBUS_SMS_ERR_INVALID_CRC_SECTION_NAME = &H22 Public Const MBUS_SMS_ERR_CRC_SECTION_INVALID_CHECKSUM = &H23 Public Const MBUS_SMS_ERR_RESOURCE_ACCESS_ERROR = &H24 Public Const MBUS_SMS_ERR_UNKNOWN_ERROR = &HFFF Public Const MBUS_SMS_BAUDRATE_300 = &HB8 Public Const MBUS_SMS_BAUDRATE_2400 = &HBB Public Const MBUS_SMS_TEST1_ID_LCD_ON = &HE1 Public Const MBUS_SMS_TEST1_ID_LCD_OFF = &HE3 Public Const MBUS_SMS_TEST1_ID_FZV_FZE = &HE0 Public Const MBUS_SMS_TEST1_ID_SELFTEST = &HE2 Public Const MBUS_SMS_TEST1_ID_TEST_CS = &HE8 Public Const MBUS_SMS_TEST1_ID_COPY_RAM_EEPROM = &HEA Public Const MBUS_SMS_TEST1_ID_START_FLOW_SIMU = &HDC Public Const MBUS_SMS_TEST1_ID_STOP_FLOW_SIMU = &HDD Public Const MBUS_SMS_TEST2_ID_ADC = &HD0 Public Const MBUS_SMS_TEST2_ID_ENERGY = &HD6 Public Const MBUS_SMS_TEST2_ID_US = &HDA Public Const MBUS_SMS_AUTO_INIT_OFF = &H0 Public Const MBUS_SMS_AUTO_INIT_IEC = &H1 Public Const MBUS_SMS_AUTO_INIT_IEC_SCHICHT2 = &H2 Public Const INIT_PSE = &H1 Public Const INIT_KEV1 = &H2 Public Const INIT_HISTORICAL_DATA = &H4 Public Const INIT_LOGGER_HOURLY = &H8 Public Const RESET_PSE = &H10 Public Const RESET_KEV1 = &H20 Public Const INIT_LOGGER_DAILY = &H40 Private MBUS_SMS_Status As Long Public gblnMapfileLoaded As Boolean Public gblnOptoAktiv As Boolean ' void CALLCONV Init_MBUS_SMS(); Public Declare Sub Init_MBUS_SMS Lib "MBUS_SMS.dll" () ' void CALLCONV SetDebugView(BOOL on); Private Declare Sub SetDebugView Lib "MBUS_SMS.dll" (ByVal blnON As Boolean) ' void CALLCONV SetAutoInit(BYTE autoinit); Private Declare Sub SetAutoInit Lib "MBUS_SMS.dll" (ByVal autoinit As Byte) ' IECCOM_InitCom2(UINT ComPort, UINT BaudRate, UINT ByteSize, UINT Parity, UINT StopBits); Private Declare Function IECCOM_InitCom2 Lib "MBUS_SMS.dll" (ByVal comport As Integer, ByVal BAUDRATE As Integer, ByVal ByteSize As Integer, ByVal Parity As Integer, ByVal StopBits As Integer) As Integer 'typedef UINT (CALLBACK *lpIECCOM_InitSchicht2_2)(BYTE A_Feld, BYTE Mode, UINT Timeout, UINT repeat); Private Declare Function IECCOM_InitSchicht2_2 Lib "MBUS_SMS.dll" (ByVal A_Feld As Byte, ByVal Mode As Byte, ByVal Timeout As Integer, ByVal repeat As Integer) As Integer Private Declare Function LoadVarDef Lib "MBUS_SMS.dll" (ByVal filename As String) As Integer Public Declare Function SND_NKE Lib "MBUS_SMS.dll" () As Integer Public Declare Function REQ_UD2 Lib "MBUS_SMS.dll" (ByVal lpstr_received_buffer As String) As Integer ' UINT CALLCONV IECCOM_SetKopfOn(UINT Timeout); Public Declare Function IECCOM_SetKopfOn Lib "MBUS_SMS.dll" (ByVal Timeout As Integer) As Integer ' UINT CALLCONV IECCOM_SetKopfOff(void); Public Declare Function IECCOM_SetKopfOff Lib "MBUS_SMS.dll" () As Integer ' UINT CALLCONV IECCOM_SwitchOpto(UINT OptoFlag); Public Declare Function IECCOM_SwitchOpto Lib "MBUS_SMS.dll" (ByVal OptoFlag As Integer) As Integer ' typedef UINT (CALLBACK *lpIECCOM_SelectOptoHeader)(UINT SetBaudFlag); Public Declare Function IECCOM_SelectOptoHeader Lib "MBUS_SMS.dll" (ByVal SetBaudFlag As Integer) As Integer ' UINT CALLCONV IECCOM_SendOptoHeader(void); Public Declare Function IECCOM_SendOptoHeader Lib "MBUS_SMS.dll" () As Integer Public Declare Function IECCOM_CloseCom Lib "MBUS_SMS.dll" () As Integer ' MBUS_SMS_Status CALLCONV read_Byte(LPCSTR varname, BYTE *value); Public Declare Function read_Byte Lib "MBUS_SMS.dll" (ByVal Varname As String, ByRef value As Byte) As Integer ' MBUS_SMS_Status CALLCONV read_Word(LPCSTR varname, WORD *value); Public Declare Function read_Word Lib "MBUS_SMS.dll" (ByVal Varname As String, ByRef value As Integer) As Integer ' MBUS_SMS_Status CALLCONV read_ULong(LPCSTR varname, ULONG *value); Public Declare Function read_ULong Lib "MBUS_SMS.dll" (ByVal Varname As String, ByRef value As Long) As Integer ' MBUS_SMS_Status CALLCONV read_Float(LPCSTR varname, float *value); Public Declare Function read_Float Lib "MBUS_SMS.dll" (ByVal Varname As String, ByRef value As Single) As Integer 'write_Byte(LPCSTR varname, BYTE value) Public Declare Function write_Byte Lib "MBUS_SMS.dll" (ByVal Varname As String, ByVal value As Byte) As Integer 'write_CP16(LPCSTR varname, LPSTR value) 'write_CP32(LPCSTR varname, LPSTR value) 'write_EEPROM(WORD address, LPSTR write_buffer, BYTE length) 'write_Float(LPCSTR varname, float value) Public Declare Function write_Float Lib "MBUS_SMS.dll" (ByVal Varname As String, ByVal value As Single) As Integer 'write_Memory(CString memtype, BYTE typebyte, WORD address, LPSTR write_buffer, BYTE length) 'write_Memory(TVarMemType memtype, WORD address, LPSTR write_buffer, BYTE length) 'write_RAM(WORD address, LPSTR write_buffer, BYTE length) 'write_ULong(LPCSTR varname, ULONG value) Public Declare Function write_ULong Lib "MBUS_SMS.dll" (ByVal Varname As String, ByVal value As Long) As Integer 'write_Var(LPCSTR varname, LPSTR write_buffer) 'write_Var_Typed(CString vartype, LPCSTR varname, BYTE *value, long excpected_size) 'write_Word(LPCSTR varname, WORD value) Public Declare Function write_Word Lib "MBUS_SMS.dll" (ByVal Varname As String, ByVal value As Integer) As Integer 'MBUS_SMS_Status CALLCONV NOWA_start() Public Declare Function NOWA_START_FW2 Lib "MBUS_SMS.dll" Alias "NOWA_start" () As Integer 'MBUS_SMS_Status CALLCONV NOWA_stop() Public Declare Function NOWA_STOP_FW2 Lib "MBUS_SMS.dll" Alias "NOWA_stop" () As Integer 'MBUS_SMS_Status CALLCONV Init_FW2(BYTE cmd) Public Declare Function Init_FW2 Lib "MBUS_SMS.dll" (ByVal command As Byte) As Integer ' MBUS_SMS_Status CALLCONV do_test2(BYTE test, BYTE index); Public Declare Function do_test2 Lib "MBUS_SMS.dll" (ByVal bTest As Byte, ByVal nIndex As Byte) As Integer ' MBUS_SMS_Status CALLCONV do_test3(BYTE test, BYTE para1, BYTE para2); ' pDo_test2(0xE8,0x5a); ' MBUS_SMS_Status CALLCONV do_test2(BYTE test, BYTE index) ' Schloss öffnen / Schliessen Public Declare Function open_fw2 Lib "MBUS_SMS.dll" Alias "open" () As Integer Public Declare Function close_fw2 Lib "MBUS_SMS.dll" Alias "close" () As Integer 'INITSCHICHT2 init_para; 'LPTSTR Getsleer() 'LPTSTR Getsnull() 'MBUS_SMS_Status CALLCONV DefineEastExtendedLogger(BYTE loggertype, BYTE packageflag) 'MBUS_SMS_Status CALLCONV GetEastExtendedLoggerConfig(BYTE loggertype, BYTE *type, WORD *Index, BYTE *size, BYTE *config,WORD *LastBlockNr) 'MBUS_SMS_Status CALLCONV GetSMS_DLLVersion(LPTSTR version) 'MBUS_SMS_Status CALLCONV Init_FW2(BYTE cmd) 'MBUS_SMS_Status CALLCONV LoadVarDef(LPCSTR filename) 'MBUS_SMS_Status CALLCONV NOWA_start() 'MBUS_SMS_Status CALLCONV NOWA_stop() 'MBUS_SMS_Status CALLCONV REQ_UD2(LPSTR receive_buffer) 'MBUS_SMS_Status CALLCONV SND_NKE() 'MBUS_SMS_Status CALLCONV application_reset() 'MBUS_SMS_Status CALLCONV check_section_crc(LPCSTR sectionname, WORD &crc_calced, WORD &crc_stored) 'MBUS_SMS_Status CALLCONV check_var_section_crc(LPCSTR varname, WORD &crc_calced, WORD &crc_stored) 'MBUS_SMS_Status CALLCONV close() 'MBUS_SMS_Status CALLCONV deselection() 'MBUS_SMS_Status CALLCONV do_test1(BYTE test) 'MBUS_SMS_Status CALLCONV do_test2(BYTE test, BYTE index) 'MBUS_SMS_Status CALLCONV do_test3(BYTE test, BYTE para1, BYTE para2) 'MBUS_SMS_Status CALLCONV jump_display_level(BYTE userlevel,BYTE position) 'MBUS_SMS_Status CALLCONV open() 'MBUS_SMS_Status CALLCONV read_Byte(LPCSTR varname, BYTE *value) 'MBUS_SMS_Status CALLCONV read_CP16(LPCSTR varname, LPSTR value) 'MBUS_SMS_Status CALLCONV read_CP32(LPCSTR varname, LPSTR value) 'MBUS_SMS_Status CALLCONV read_EEPROM(WORD address, BYTE length, LPSTR receive_buffer, long buffer_size) ''' versuch Public Declare Function read_EEPROM Lib "MBUS_SMS.dll" (int_address As Integer, byte_length As Byte, ByVal lpstr_receive_buffer As String, lng_buffer_size As Long) As Integer 'MBUS_SMS_Status CALLCONV read_Float(LPCSTR varname, float *value) 'MBUS_SMS_Status CALLCONV read_RAM(WORD address, BYTE length, LPSTR receive_buffer, long buffer_size) ''' versuch Public Declare Function read_RAM Lib "MBUS_SMS.dll" (int_address As Integer, byte_length As Byte, ByVal lpstr_receive_buffer As String, lng_buffer_size As Long) As Integer 'MBUS_SMS_Status CALLCONV read_ULong(LPCSTR varname, ULONG *value) 'MBUS_SMS_Status CALLCONV read_Var(LPCSTR varname, LPSTR receive_buffer, long buffer_size) Public Declare Function read_Var Lib "MBUS_SMS.dll" (ByRef Varname As String, ByRef receive_buffer As String, ByRef buffer_size As Long) As Integer 'MBUS_SMS_Status CALLCONV read_Var_Typed(CString vartype, LPCSTR varname, BYTE *value, long excpected_size) 'MBUS_SMS_Status CALLCONV read_Word(LPCSTR varname, WORD *value) 'MBUS_SMS_Status CALLCONV read_bigEEPROM(DWORD address, BYTE length, LPSTR receive_buffer, long buffer_size) 'MBUS_SMS_Status CALLCONV recalc_section_crc(LPCSTR sectionname, WORD &crc_calced, WORD &crc_stored) 'MBUS_SMS_Status CALLCONV recalc_section_crc2(LPCSTR sectionname) 'MBUS_SMS_Status CALLCONV recalc_var_section_crc(LPCSTR varname, WORD &crc_calced, WORD &crc_stored) 'MBUS_SMS_Status CALLCONV recalc_var_section_crc2(LPCSTR varname) 'MBUS_SMS_Status CALLCONV reset_errortime() 'MBUS_SMS_Status CALLCONV reset_maxima() 'MBUS_SMS_Status CALLCONV select_baud(Baudrate_ID baudrate) 'MBUS_SMS_Status CALLCONV select_telegram(BYTE type) 'MBUS_SMS_Status CALLCONV selection(Selection_ID id, WORD man, BYTE gen, BYTE med) 'MBUS_SMS_Status CALLCONV set_BonusMalusTarif(QUADBYTE password,BYTE OnOff, float temperature, BYTE powermode) 'MBUS_SMS_Status CALLCONV set_CzechiaTarif(QUADBYTE password,DWORD Flow) 'MBUS_SMS_Status CALLCONV set_FZE_FZV(BYTE type, float value) 'MBUS_SMS_Status CALLCONV set_ID1(QUADBYTE SC) 'MBUS_SMS_Status CALLCONV set_ID2(QUADBYTE SC, WORD man, BYTE gen, BYTE med) 'MBUS_SMS_Status CALLCONV set_InitCounter1(QUADBYTE value) 'MBUS_SMS_Status CALLCONV set_InitCounter2(QUADBYTE value) 'MBUS_SMS_Status CALLCONV set_ParameterCounter1(QUADBYTE fabnr,QUADBYTE index, BYTE medium, BYTE scaling ,float value) 'MBUS_SMS_Status CALLCONV set_ParameterCounter2(QUADBYTE fabnr,QUADBYTE index, BYTE medium, BYTE scaling ,float value) 'MBUS_SMS_Status CALLCONV set_PrimAdr_Counter1(BYTE adress) 'MBUS_SMS_Status CALLCONV set_PrimAdr_Counter2(BYTE adress) 'MBUS_SMS_Status CALLCONV set_RomaniaTarif(QUADBYTE password,WORD ReturnTemp, WORD DeltaT) 'MBUS_SMS_Status CALLCONV set_SecAdr_Counter1(QUADBYTE adress) 'MBUS_SMS_Status CALLCONV set_SecAdr_Counter2(QUADBYTE adress) 'MBUS_SMS_Status CALLCONV set_address(BYTE address) 'MBUS_SMS_Status CALLCONV set_averaging_time(BYTE min1, BYTE min2) 'MBUS_SMS_Status CALLCONV set_cooling(float TV, float delta_T) 'MBUS_SMS_Status CALLCONV set_counter_1(UINT bcd_value) 'MBUS_SMS_Status CALLCONV set_counter_1_2(QUADBYTE ID1, BYTE VIF1, float value1, QUADBYTE ID2, BYTE VIF2, float value2) 'MBUS_SMS_Status CALLCONV set_counter_2(UINT bcd_value) 'MBUS_SMS_Status CALLCONV set_credit_off() 'MBUS_SMS_Status CALLCONV set_credit_on() 'MBUS_SMS_Status CALLCONV set_customer_loc(QUADBYTE NR) 'MBUS_SMS_Status CALLCONV set_date_time(BYTE year, BYTE month, BYTE day, BYTE hour, BYTE minute) 'MBUS_SMS_Status CALLCONV set_date_time_pw(BYTE year, BYTE month, BYTE day, BYTE hour, BYTE minute, QUADBYTE password) 'MBUS_SMS_Status CALLCONV set_display(DISPLAYBUF displaybuf) 'MBUS_SMS_Status CALLCONV set_fixed_date(USHORT date) 'MBUS_SMS_Status CALLCONV set_logger_intervall_time(WORD minuten) 'MBUS_SMS_Status CALLCONV set_password(QUADBYTE pw) 'MBUS_SMS_Status CALLCONV set_pulsmode(BYTE type, float val) 'MBUS_SMS_Status CALLCONV set_tarif(BYTE mode, float value) 'MBUS_SMS_Status CALLCONV set_tarif_time(WORD var1, WORD var2) 'MBUS_SMS_Status CALLCONV set_var_bits_Byte(LPCSTR varname, BYTE setmask, BYTE clearmask) 'MBUS_SMS_Status CALLCONV set_var_bits_Word(LPCSTR varname, WORD setmask, WORD clearmask) 'MBUS_SMS_Status CALLCONV show_display_level(BYTE levelN) 'MBUS_SMS_Status CALLCONV write_Byte(LPCSTR varname, BYTE value) 'MBUS_SMS_Status CALLCONV write_CP16(LPCSTR varname, LPSTR value) 'MBUS_SMS_Status CALLCONV write_CP32(LPCSTR varname, LPSTR value) 'MBUS_SMS_Status CALLCONV write_EEPROM(WORD address, LPSTR write_buffer, BYTE length) 'MBUS_SMS_Status CALLCONV write_Float(LPCSTR varname, float value) 'MBUS_SMS_Status CALLCONV write_Memory(CString memtype, BYTE typebyte, WORD address, LPSTR write_buffer, BYTE length) 'MBUS_SMS_Status CALLCONV write_Memory(TVarMemType memtype, WORD address, LPSTR write_buffer, BYTE length) 'MBUS_SMS_Status CALLCONV write_RAM(WORD address, LPSTR write_buffer, BYTE length) 'MBUS_SMS_Status CALLCONV write_ULong(LPCSTR varname, ULONG value) 'MBUS_SMS_Status CALLCONV write_Var(LPCSTR varname, LPSTR write_buffer) 'MBUS_SMS_Status CALLCONV write_Var_Typed(CString vartype, LPCSTR varname, BYTE *value, long excpected_size) 'MBUS_SMS_Status CALLCONV write_Word(LPCSTR varname, WORD value) 'MBUS_SMS_Status DoAutoInit() 'MBUS_SMS_Status GetSendDataStatus(UINT code) 'MBUS_SMS_Status NormalSendData(UINT CI_Field, CString &sdat) 'MBUS_SMS_Status read_Memory(CString memtype, BYTE typebyte, WORD address, BYTE length, LPSTR receive_buffer, long buffer_size) 'MBUS_SMS_Status read_Memory(TVarMemType memtype, WORD address, BYTE length, LPSTR receive_buffer, long buffer_size) 'MBUS_SMS_Status read_Memory_LowLevel(CString memtype, BYTE typebyte, WORD address, BYTE length, LPSTR receive_buffer, long buffer_size) 'MBUS_SMS_Status read_bigMemory(CString memtype, BYTE typebyte, DWORD address, BYTE length, LPSTR receive_buffer, long buffer_size) 'MBUS_SMS_Status read_bigMemory(TVarMemType memtype, DWORD address, BYTE length, LPSTR receive_buffer, long buffer_size) 'MBUS_SMS_Status read_bigMemory_LowLevel(CString memtype, BYTE typebyte, DWORD address, BYTE length, LPSTR receive_buffer, long buffer_size) 'MBUS_SMS_Status sendCI(UINT CI) 'SLAVEPARA slave_para_init; 'SLAVEPARA slave_para_temp; 'UINT init_repeat; 'UINT res; 'long CALLCONV get_var_adress(LPCSTR varname) 'long CALLCONV get_var_size(LPCSTR varname) 'static void wartezeit(UINT ms) 'static void wartezeit(UINT ms); 'void CALLCONV Init_MBUS_SMS() 'void CALLCONV SetAutoInit(BYTE autoinit) 'void CALLCONV SetDebugView(BOOL on) 'void CopyQB(QUADBYTE src, QUADBYTE &dest) 'void DebugOut(CString txt) Public Function Errorstring(intErrorcode As Integer) As String If intErrorcode = MBUS_SMS_ERR_OK Then Errorstring = "MBUS_SMS_ERR_OK" If intErrorcode = 1 Then Errorstring = "MBUS_SMS_ERR_PORT_NOT_INITIALIZED" If intErrorcode = 2 Then Errorstring = "MBUS_SMS_ERR_WRITECOMM_ERROR" If intErrorcode = 3 Then Errorstring = "MBUS_SMS_ERR_TIMEOUT" If intErrorcode = 4 Then Errorstring = "MBUS_SMS_ERR_PROT_CHECKSUM_ERROR" If intErrorcode = 5 Then Errorstring = "MBUS_SMS_ERR_ECHO_ONLY" End If If intErrorcode = 6 Then Errorstring = "MBUS_SMS_ERR_NO_ECHO" If intErrorcode = 7 Then Errorstring = "MBUS_SMS_ERR_ASCIIHEX_TO_BIN_CONV_ERROR" If intErrorcode = 8 Then Errorstring = "MBUS_SMS_ERR_ASSIGNMENT_CFIELD_CIFIELD" If intErrorcode = 9 Then Errorstring = "MBUS_SMS_ERR_NO_RECEIVED_DATA_ASSIGNMENT" If intErrorcode = 10 Then Errorstring = "MBUS_SMS_ERR_WRITECOMM_ABOVE_1024_CHARS" If intErrorcode = 11 Then Errorstring = "MBUS_SMS_ERR_READCOMM_ABOVE_1024_CHARS" If intErrorcode = 12 Then Errorstring = "MBUS_SMS_ERR_SETCOMMSTATE_SET_BAUDRATE" If intErrorcode = 13 Then Errorstring = "MBUS_SMS_ERR_A_FIELD_TX_RX_DIFFERENCE" If intErrorcode = 14 Then Errorstring = "MBUS_SMS_ERR_C_FIELD_VALUE_INVALID" If intErrorcode = 15 Then Errorstring = "MBUS_SMS_ERR_OPENCOMM" If intErrorcode = 16 Then Errorstring = "MBUS_SMS_ERR_BUILDCOMMDCB" If intErrorcode = 17 Then Errorstring = "MBUS_SMS_ERR_SETCOMMSTATE" If intErrorcode = 18 Then Errorstring = "MBUS_SMS_ERR_COMPORT_CANNOT_BE_CHANGED" If intErrorcode = 19 Then Errorstring = "MBUS_SMS_ERR_CLOSEHANDLE" If intErrorcode = 20 Then Errorstring = "MBUS_SMS_ERR_DELAYTIME_NO_BAUDRATE_SET" If intErrorcode = 21 Then Errorstring = "MBUS_SMS_ERR_RECEIVE_BUFFER_TOO_SMALL" If intErrorcode = 22 Then Errorstring = "MBUS_SMS_ERR_OPTO_ON" If intErrorcode = 23 Then Errorstring = "MBUS_SMS_ERR_OPTO_OFF" If intErrorcode = 24 Then Errorstring = "MBUS_SMS_ERR_OPTO_ERROR1" If intErrorcode = 25 Then Errorstring = "MBUS_SMS_ERR_VARDEF_FILE_NOT_FOUND" If intErrorcode = 26 Then Errorstring = "MBUS_SMS_ERR_CANNOT_LOAD_FILE" If intErrorcode = 27 Then Errorstring = "MBUS_SMS_ERR_VARDEF_FILE_FIELD_COUNT_LOW" If intErrorcode = 28 Then Errorstring = "MBUS_SMS_ERR_VARDEF_INVALID_VARIABLE_TYPE" If intErrorcode = 29 Then Errorstring = "MBUS_SMS_ERR_VARDEF_INVALID_ADDRESS" If intErrorcode = 30 Then Errorstring = "MBUS_SMS_ERR_VARDEF_INVALID_LENGTH" If intErrorcode = 31 Then Errorstring = "MBUS_SMS_ERR_UNKNOWN_VARIABLE" If intErrorcode = 32 Then Errorstring = "MBUS_SMS_ERR_RECEIVE_TELEGRAM_ERROR" If intErrorcode = 33 Then Errorstring = "MBUS_SMS_ERR_VARIABLE_NOT_IN_CRC_SECTION" If intErrorcode = 34 Then Errorstring = "MBUS_SMS_ERR_INVALID_CRC_SECTION_NAME" If intErrorcode = 35 Then Errorstring = "MBUS_SMS_ERR_CRC_SECTION_INVALID_CHECKSUM" If intErrorcode = 36 Then Errorstring = "MBUS_SMS_ERR_RESOURCE_ACCESS_ERROR" If intErrorcode = 4095 Then Errorstring = "MBUS_SMS_ERR_UNKNOWN_ERROR" End Function Public Function WriteValueOhneWdh(ByRef Varname As String, ByVal value As Variant) As Long Dim valbyte8 As Byte Dim valint16 As Integer Dim vallong32 As Long Dim valdouble As Double Dim valsingle As Single Varname = LCase(Varname) If Left(Varname, 2) = "u8" Then valbyte8 = value WriteValueOhneWdh = write_Byte(Varname, valbyte8) Exit Function End If If Left(Varname, 3) = "u16" Then If value > MAXINT_2 Then valint16 = value - OFFSET_2 Else valint16 = value End If WriteValueOhneWdh = write_Word(Varname, valint16) Exit Function End If If Left(Varname, 3) = "u32" Then If value > MAXINT_4 Then vallong32 = value - OFFSET_4 Else vallong32 = value End If WriteValueOhneWdh = write_ULong(Varname, vallong32) Exit Function End If If Left(Varname, 3) = "i16" Then valint16 = value WriteValueOhneWdh = write_Word(Varname, valint16) Exit Function End If If Left(Varname, 3) = "i32" Then vallong32 = value WriteValueOhneWdh = write_ULong(Varname, vallong32) Exit Function End If If Left(Varname, 2) = "f_" And IsNumeric(value) Then valsingle = CSng(value) WriteValueOhneWdh = write_Float(Varname, valsingle) Exit Function End If Exit Function: Errorhandler: WriteToLog "Fehler " & Err.Number & " in WriteValueOhneWdh('" & Varname & "') : " & Err.Description End Function ' neu RH 23.11.2016 ' Wrapper für ReadValue, der diesen Befehl bis zu 3 mal wiederholt, wenn es einen Fehler d.h. einen Rückgabewert <> 0 gibt Public Function ReadValue(ByRef Varname As String, ByRef value As Variant) As Integer Dim intWdh As Integer Dim strMsg As String On Error GoTo Errorhandler strMsg = "" intWdh = 0 Do ReadValue = ReadValueOhneWdh(Varname, value) If ReadValue <> 0 Then strMsg = "ReadValue(" & Varname & ") Fehler " & ReadValue & "=" & Errorstring(ReadValue) & ", Wdh=" & intWdh & "/3" End If intWdh = intWdh + 1 Loop While ReadValue <> 0 And intWdh <= 3 If strMsg <> "" Then LogIntoDB strMsg, "FW2" End If Exit Function Errorhandler: LogIntoDB "Fehler " & Err.Number & " in ReadValue(" & Varname & "): " & Err.Description, "FW2" End Function ' neu RH 23.11.2016 ' Wrapper für WriteValue, der diesen Befehl bis zu 3 mal wiederholt, wenn es einen Fehler, d.h. einen Rückgabewert <> 0 gibt Public Function WriteValue(ByRef Varname As String, ByRef value As Variant) As Integer Dim intWdh As Integer Dim strMsg As String On Error GoTo Errorhandler strMsg = "" intWdh = 0 Do WriteValue = WriteValueOhneWdh(Varname, value) If WriteValue <> 0 Then strMsg = "WriteValue(" & Varname & "," & value & ") Fehler " & WriteValue & "=" & Errorstring(WriteValue) & ", Wdh=" & intWdh & "/3" End If intWdh = intWdh + 1 Loop While WriteValue <> 0 And intWdh <= 3 If strMsg <> "" Then LogIntoDB strMsg, "FW2" End If Exit Function Errorhandler: LogIntoDB "Fehler " & Err.Number & " in WriteValue(" & Varname & ",...): " & Err.Description, "FW2" End Function ' Lese eine FW2 Variable, Verzweigung in die typabhängigen Lesefunktionen je nach Variablentyp ' Rückgabewert -1 wenn Typ nicht bekannt ' sonst Rückgabewert = Rückgabewert aus Lesefunktion Public Function ReadValueOhneWdh(ByRef Varname As String, ByRef value As Variant) As Integer On Error GoTo Errorhandler Dim errorcode As Long Dim valbyte8 As Byte Dim valint16 As Integer Dim vallong32 As Long Dim valdouble As Double Dim valsingle As Single Varname = LCase(Varname) valbyte8 = 0 If Left(Varname, 2) = "u8" Then ReadValueOhneWdh = read_Byte(Varname, valbyte8) value = valbyte8 Exit Function End If If Left(Varname, 3) = "u16" Then ReadValueOhneWdh = read_Word(Varname, valint16) If valint16 < 0 Then value = valint16 + OFFSET_2 Else value = valint16 End If Exit Function End If If Left(Varname, 3) = "u32" Then ReadValueOhneWdh = read_ULong(Varname, vallong32) If vallong32 < 0 Then value = vallong32 + OFFSET_4 Else value = vallong32 End If Exit Function End If If Left(Varname, 3) = "i16" Then ReadValueOhneWdh = read_Word(Varname, valint16) value = valint16 Exit Function End If If Left(Varname, 3) = "i32" Then ReadValueOhneWdh = read_ULong(Varname, vallong32) value = vallong32 Exit Function End If If Left(Varname, 2) = "f_" Then ' single weil (read_Float Lib "MBUS_SMS.dll") auch single zurück gibt ReadValueOhneWdh = read_Float(Varname, valsingle) value = valsingle Exit Function End If ReadValueOhneWdh = -1 WriteToLog "Unbekannter Typ der Variablen " & Varname LogIntoDB "Unbekannter Typ der Variablen " & Varname, "FW2" Exit Function Errorhandler: WriteToLog "Fehler " & Err.Number & " in ReadValueOhneWdh('" & Varname & "') : " & Err.Description End Function 'UINT32 ReadValue(Char * varname, Float * value) '{ ' ' UINT32 errorcode=0; ' UINT8 val1=0; ' UINT16 val2=0; ' UINT32 val3=0; ' INT32 val5=0; ' float val4=0; ' ' ' wartezeit(DELAY_COM); ' ' ' if (strnicmp(varname,"U8",2)==0) ' { ' errorcode=pRead_Byte(varname,&val1); ' *value=(float) val1; ' return(errorcode); ' } ' ' if (strnicmp(varname,"U1",2)==0) ' { ' errorcode=pRead_Word(varname,&val2); ' *value=(float) val2; ' return(errorcode); ' } ' ' if (strnicmp(varname,"U3",2)==0) ' { ' errorcode=pRead_ULong(varname,&val3); ' *value=(float) val3; ' return(errorcode); ' } ' ' if (strnicmp(varname,"I1",2)==0) ' { ' errorcode=pRead_Word(varname,&val5); ' *value=(float) val5; ' return(errorcode); ' } ' ' ' if (strnicmp(varname,"I3",2)==0) ' { ' errorcode=pRead_ULong(varname,&val3); ' *value=(float) val3; ' return(errorcode); ' } ' ' if (strnicmp(varname,"F_",2)==0) ' { ' errorcode=pRead_Float(varname,&val4); ' *value =val4; ' return(errorcode); ' } ' return(errorcode); '} ' Public Function ScanPort(ByVal intPortNr As Integer) As Long ScanPort = modMBUS_SMS.fw2_open_comport(intPortNr, 1, "", True) If ScanPort > 0 Then Exit Function End If ScanPort = modMBUS_SMS.SND_NKE() If ScanPort <> 0 Then Debug.Print "ScanPort Fehler " & ScanPort Else Debug.Print "ScanPort SND_NKE OK" End If IECCOM_CloseCom End Function Public Function SendNKE(intPortNr As Integer) As Integer SendNKE = modMBUS_SMS.fw2_open_comport(intPortNr, 1, "", True) If SendNKE <> 0 Then Exit Function End If SendNKE = modMBUS_SMS.SND_NKE Call IECCOM_CloseCom End Function Public Function GetFWGeneration(ByVal intPortNr As Integer, ByRef strFWGeneration As String) As Long Dim sBuffer As String GetFWGeneration = modMBUS_SMS.fw2_open_comport(intPortNr, 1, "", True) If GetFWGeneration > 0 Then Exit Function End If sBuffer = Space(250) GetFWGeneration = modMBUS_SMS.REQ_UD2(sBuffer) If GetFWGeneration = MBUS_SMS_ERR_OK Then sBuffer = Trim(sBuffer) ' Debug.Print "000000000111111111122222222223" ' Debug.Print "123456789012345678901234567890" ' Debug.Print sBuffer If Len(Trim(sBuffer)) > 1 Then strFWGeneration = Mid(sBuffer, 13, 2) Else strFWGeneration = "" End If Else Debug.Print modMBUS_SMS.Errorstring(CInt(GetFWGeneration)) End If Call IECCOM_CloseCom End Function ' '/** ' ------------------------------------------------------------------------------- ' ' @fn CloseComPort ' ' @brief schliessen der Schnittstelle am Ende oder beim Umschalten ' ' @return Fehlercode ' ' ------------------------------------------------------------------------------- ' **/ ' 'int close_comport(void) '{ ' return(pIECCOM_CloseCom()); '} ' 'static int open_comport(UINT portnr, UINT baudrate, UINT opto, char * mapfile) Public Function fw2_open_comport(intPortNr As Integer, intBaudrate As Integer, strMapfile As String, Optional blnMitOptoHeader As Boolean = True, Optional kommunikations_repeats As Integer = 3) As Integer On Error GoTo Errorhandler Dim iReturncode As Integer ' int returncode=0; ' UINT16 bd=19200; ' ' // Display Taste muss für Opto einmal gedrückt werden ' ' optoAktiv=FALSE; gblnOptoAktiv = False ' if(opto && Testsystem) ' pressDisplayTaste( 1, 500); // Display Taste muss für Opto einmal gedrückt werden ' pInit_MBUS_SMS(); Call Init_MBUS_SMS ' pSetDebugView(TRUE); Call SetDebugView(True) ' pSetAutoInit(0); Call SetAutoInit(0) ' if(!MapFileLoaded) ' { ' returncode=pLoadVarDef(MapFilePCE); ' MapFileLoaded=TRUE; ' if (returncode > 0) ' return returncode; ' ' } If strMapfile <> "" Then iReturncode = LoadVarDef(strMapfile) gblnMapfileLoaded = True If iReturncode <> 0 Then fw2_open_comport = iReturncode WriteToLog "Fehlercode LoadVarDef(" & strMapfile & ")=" & iReturncode Exit Function End If End If ' returncode=pIECCOM_InitCom2(portnr, baudrate, 8, 2, 0); ' if (returncode > 0) return returncode; ' UINT ComPort; // Comport: 1=Com1, 2=Com2... ' UINT BaudRate; // Baudrate: 1....57600 ' UINT ByteSize; // Datenbits 4-8 ' UINT Parity; // Parity 0-4=none,odd,even,mark,space ' UINT StopBits; // StopBits 0,1,2 =1,1.5,2 ' Folgendes geht nicht, aber wieso? Es gibt immer eine lange Wartezeit von 110 Sekunden und Reserve = 1245187 ' DebugView bringt uns auch nicht weiter 'iReturncode = IECCOM_InitCom2(CInt(intPortNr) And 255, intBaudrate And 65535, 8, 2, 0) ' also wird nun Baudrate als Konstante codiert iReturncode = IECCOM_InitCom2(CInt(intPortNr) And 255, 2400, 8, 2, 0) If iReturncode > 0 Then fw2_open_comport = iReturncode WriteToLog "Fehlercode IECCOM_InitCom2(" & intPortNr & " and 255,2400,8,2,0)=" & iReturncode & ": " & Errorstring(iReturncode) Exit Function End If ' returncode= pIECCOM_InitSchicht2_2(0xFE, 50,600, kommunikations_repeats); ' if (returncode > 0) return returncode; iReturncode = IECCOM_InitSchicht2_2(&HFE, 50, 600, kommunikations_repeats) If (iReturncode > 0) Then fw2_open_comport = iReturncode WriteToLog "Fehlercode IECCOM_InitSchicht2_2(&HFE, 50, 600, " & kommunikations_repeats & ")=" & iReturncode Exit Function End If ' if(opto) ' { ' pIECCOM_SetKopfOn(800); ' pIECCOM_SwitchOpto(2); // OptoHeader über IECCOM ' pIECCOM_SelectOptoHeader(1); ' // pIECCOM_SendOptoHeader(); // macht die IEECOM32.DLL ' wartezeit(100); ' optoAktiv=TRUE; ' ' } If blnMitOptoHeader Then 'Call IECCOM_SetKopfOn(800) Call IECCOM_SwitchOpto(2) Call IECCOM_SelectOptoHeader(1) Sleep 100, False gblnOptoAktiv = True End If ' ist hier sowieso noch 0 sonst wär die Function schon früher beendet worden fw2_open_comport = iReturncode If (iReturncode > 0) Then fw2_open_comport = iReturncode WriteToLog "Fehlercode fw2_open_comport=" & iReturncode Exit Function End If Exit Function Errorhandler: fw2_open_comport = Err.Number g_strErrorDesc = Err.Description End Function Public Function GetNowaVolume(ByRef dblResult As Double) As Long Dim lngReturn As Long Dim strResult As String Dim bytScaling As Byte GetNowaVolume = read_Byte("u8_scaling", bytScaling) If lngReturn <> 0 Then GetNowaVolume = lngReturn Exit Function Else Dim sngWert As Single lngReturn = read_Float("f_nowa_volume", sngWert) dblResult = CDbl(sngWert) GetNowaVolume = lngReturn If lngReturn = 0 Then Select Case bytScaling Case 0: Case 1: dblResult = dblResult * 10 Case 2: dblResult = dblResult * 100 Case 3: dblResult = dblResult * 1000 Case Else GetNowaVolume = -80 ' unkbown scaling Exit Function End Select End If End If End Function Public Function WarteAufOpto(EinbauplatzNr As Integer, Optional parenForm As Form) As Boolean Dim objForm As frmUSFW2WarteAufOpto Set objForm = New frmUSFW2WarteAufOpto objForm.m_COMPort = Val(g_App.Settings.getUSComPort(EinbauplatzNr)) If objForm.m_COMPort > 0 Then objForm.mstrText = "Keine Verbindung zum Rechenwerk an Einbauplatz " & EinbauplatzNr & ". Bitte roten Knopf drücken!" objForm.m_iEinbauplatzNr = EinbauplatzNr objForm.Show vbModal, parenForm WarteAufOpto = objForm.mbln_Erfolg End If End Function 'Public Function FW2_ReadMemory(intPortNr As Integer) As Long ' FW2_ReadMemory = modMBUS_SMS.fw2_open_comport(intPortNr, 1, "", True) ' If FW2_ReadMemory <> MBUS_SMS_ERR_OK Then ' Exit Function ' End If ' ' Dim lngbufferlen As Long ' Dim ret As Integer ' Dim strBuffer As String ' Dim i As Long ' ' ret = read_EEPROM(0, 255, strBuffer, lngbufferlen) ' Debug.Print strBuffer ' ' Call IECCOM_CloseCom 'End Function