You are on page 1of 24

FP Connect Function list Ver. 1.0.

Introduction
FP Connect is an ActiveX control for Windows operating system incorporating the Panasonic Communication
Manager to establish multiple communication channels via RS232/485, USB, Ethernet or Modem to PLC and
GT-Panel.

Data types
FP Connect takes and returns in most cases VARIANT(SAFEARRAY) and for WriteString and ReadString BSTR
data types. Depending on the programming language BSTR and VARIANT cast to:

BSTR: VBA, VB.Net As String

C# string

C++ CComBSTR

VARIANT: VBA Dim data(n) As <type> or Object

VB.Net Dim data As System.Array,

C# object, bool[], short[], long[], int[], float[], … etc.

C++ COleSafeArray

Casting PLC types


PLC C++ C# VB.Net VBA
BOOL bool bool[] Dim data As System.Array object As Boolean
INT short Int16[] Dim data As System.Array object As Short
DINT Int Int32[] Dim data As System.Array object As Integer
WORD unsigned short UInt16[] Dim data As System.Array object As UShort
DWORD long UInt32[] Dim data As System.Array object As UInteger
REAL float float[] Dim data As System.Array object As Double
STRING CString string[] Dim data As System.Array object As String

Notes
1. The file commonHostAndOCXIDs(.h, .vb, .cs) can be linked to the host application. This file provides
common defines for FP Connect and the host application

2. Some parameter can be passed also as strings rather than as variable:

AreaRead(lStationNumber, bstrStartAddress, lWords2Read, &bstrError) or

AreaRead(lStationNumber, “DT100”, lWords2Read, &bstrError)

3. If reading or writing a large number of word registers a progress bar is shown if the number of words is
negative.

Show progress bar


AreaRead(lStationNumber, “DT100”, -lWords2Read, &bstrError)

Hide progress bar


AreaRead(lStationNumber, “DT100”, lWords2Read, &bstrError)

1
Function Table
General AboutBox
GetOCXVersion
AttachHostHandle
SetLanguage
ChangeTimeOut
PortOpen PortClose
ShowParameter

PLC protection IsPLCProtected PLCPasswordOperation

PLC information and mode ReadPLCInformation ChangePLCMode

Read register AreaRead


ReadINT ReadDINT
ReadWORD ReadDWORD
ReadREAL
ReadBits
ReadString

Read shared memory module ReadSharedMemory

Write register AreaWrite


WriteINT WriteDINT
WriteWORD WriteDWORD
WriteREAL
WriteBits
WriteString

Write shared memory module WriteSharedMemory

Program code and Register UploadPLCCode DownloadPLCCode


ImportFPFile DownloadFPFile
ClearProgram

PLC and GT Panel TransparentMode

PLC and GT Panel SetCommunicationParameter GetCurrentlyUsedCommunicationParameter

2
AboutBox
Language Declarations
C++ ocx, C# void AboutBox()
C++ tlb HRESULT AboutBox()
VB.NET AboutBox()
VBA AboutBox

Language Samples Comment


C++ ocx, C# AboutBox();
C++ tlb AboutBox(); Ignore HRESULT
VB.NET AboutBox()
VBA AboutBox

GetOCXVersion
Returns the version of the registered FP_Connect.ocx.
Language Declarations
C++ ocx CString GetOCXVersion()
C++ tlb _bstr_t GetOCXVersion()
C# string GetOCXVersion()
VB.NET and GetOCXVersion() As String
VBA

Language Samples Comment


C++ ocx strRes = GetOCXVersion();
C++ tlb strRes = (LPCTSTR) GetOCXVersion(); CString strRes;
C# strRes = GetOCXVersion();
VB.NET,VBA strRes = GetOCXVersion() Dim strRes As String

AttachHostHandle
Attaches the application window’s handle. This handle is mandatory before the Modem Settings dialog can be
opened.
Language Declarations
C++ ocx void AttachHostHandle( int hwndHostHandle )
C++ tlb HRESULT AttachHostHandle( int hwndHostHandle )
C# void AttachHostHandle( int hwndHostHandle )
VB.NET AttachHostHandle( hwndHostHandle As Integer )
VBA AttachHostHandle( hwndHostHandle As Long )

Language Samples Comment


C++ ocx AttachHostHandle( (int) GetSafeHwnd() );
C++ tlb AttachHostHandle( (int) GetSafeHwnd() ); Ignore HRESULT
C# AttachHostHandle( (int) Handle );
VB.NET AttachHostHandle( Handle )
VBA AttachHostHandle( Application.Hwnd )

SetLanguage
Sets the MEWNET Manager dialog language.
Language Declarations
C++ ocx, C# void SetLanguage ( int nNewLanguage )
C++ tlb HRESULT SetLanguage ( int nNewLanguage )
VB.NET SetLanguage ( nNewLanguage As Integer )
VBA SetLanguage ( nNewLanguage As Long )

nNewLanguage:
RESOURCE_CASE_ENGLISH 0
RESOURCE_CASE_JAPANESE 1
RESOURCE_CASE_CHINESE 2
RESOURCE_CASE_CHINESE_T 3
RESOURCE_CASE_KOREAN 4
RESOURCE_CASE_SPANISH 5
RESOURCE_CASE_ITALIAN 6
RESOURCE_CASE_GERMAN 7
RESOURCE_CASE_FRENCH 8
Default: RESOURCE_CASE_ENGLISH 0

3
Language Samples Comment
C++ ocx C# SetLanguage ( RESOURCE_CASE_ITALIAN );
C++ tlb SetLanguage ( RESOURCE_CASE_ITALIAN ); Ignore HRESULT
VB.NET VBA SetLanguage ( RESOURCE_CASE_ITALIAN )

ChangeTimeOut
Changes the Communication Manager timeout. PortClose and PortOpen resets the timeout to its default value.
lNewTime: timeout in seconds
Language Declarations
C++ ocx void ChangeTimeOut ( long lNewTime)
C++ tlb HRESULT ChangeTimeOut ( long lNewTime )
C# void ChangeTimeOut ( int lNewTime)
VB.NET ChangeTimeOut ( lNewTime As Integer )
VBA ChangeTimeOut ( lNewTime As Long )

Language Samples Comment


C++ ocx, C# ChangeTimeOut (120 ); Set time out to 120 seconds
C++ tlb ChangeTimeOut (120); Ignore HRESULT
VB.NET, VBA ChangeTimeOut (120)

PortOpen
Opens the communication port with the current communication settings. The command must be called prior to all
PLC and all IOP communication.
Language Declarations
C++ ocx, tlb int PortOpen ( long lGT_PanelCommunication, long lStationNumber )
C# int PortOpen ( int lGT_PanelCommunication, int lStationNumber )
VB.NET PortOpen (lGT_PanelCommunication As Integer, lStationNumber As Integer ) As Integer
VBA PortOpen ( lGT_PanelCommunication As Long , lStationNumber As Long ) As Long

lGT_PanelCommunication: OPEN_PLC or OPEN_GT


lStationNumber: 0..99 0 = EE
return: NO_FP_CONNECT_ERROR or an error code
Language Samples Comment
C++ ocx, tlb, C# nResult = PortOpen(OPEN_PLC, lStationNumber );
VB.NET, VBA nResult = PortOpen(OPEN_GT, lStationNumber )

PortClose
Closes the communication port.
Language Declarations
C++ ocx, tlb, C# int PortClose()
VB.NET PortClose () As Integer
VBA PortClose () As Long

return: NO_FP_CONNECT_ERROR or an error code


Language Samples Comment
C++ ocx, tlb, C# nResult = PortClose ();
VB.NET, VBA nResult = PortClose ()

ShowParameter
Opens the Communication Settings dialog of the MEWNET Manager
Language Declarations
C++ ocx, tlb, C# int ShowParameter()
VB.NET ShowParameter () As Integer
VBA ShowParameter () As Long

return: IDOK or IDCANEL


Language Samples Comment
C++ ocx, tlb, C# nResult = ShowParameter();
VB.NET, VBA nResult = ShowParameter ()

4
IsPLCProtected
Reads the PLC password information.
Language Declarations
C++ ocx void IsPLCProtected(long lStationNumber, BSTR *bstrError, VARIANT * varReadDataReturn)
C++ tlb HRESULT IsPLCProtected(long lStationNumber , BSTR *bstrError, VARIANT * varReadDataReturn)
C# object IsPLCProtected(int lStationNumber ,ref string strError)
VB.NET IsPLCProtected ( lStationNumber As Integer, Byref strError As String) As Object
VBA IsPLCProtected ( lStationNumber As Long, Byref strError As String)

lStationNumber: 0..99 0 = EE
bstrError: empty if no error, or error code
reference: varReadDataReturn contains the password information or is empty on error
return: plc password information or NULL on error

varReadDataReturn[ ]
[0] = 0: No upload protection
= 1: PLC upload protected
[1] = 0: no password, 4 = 4 character password and 8 = 8 character password
[2] = 0: PLC is open 0xFF PLC is closed
[3] = i: i := {0,1,2,3} The remaining password retries. The PLC must be turned off and on after 3
failed attempts
[4] = 0: the PLC is not restricted type, e.g. FP0R, FP-Sigma, FP-X, FP7, …
= 1: the PLC is a restricted type, e.g. FP0, FP1, FP2SH, FP2, …
Language Samples Comment
C++ ocx IsPLCProtected( lStationNumber , &bstrError, varReadDataReturn); Use CComBSTR, COleSafeArray
C++ tlb IsPLCProtected( lStationNumber , &bstrError, varReadDataReturn); Ignore HRESULT
C# object obj = IsPLCProtected( lStationNumber, ref strError);
VB.NET plcData = IsPLCProtected( lStationNumber, strError) Dim plcData As System.Array
Dim strError As String
VBA plcData = IsPLCProtected( lStationNumber, strError) Dim plcData As Variant
Dim bstrError As String

PLCPasswordOperation
The command is used to create or delete a PLC password, login or logout from a protected PLC.
Language Declarations
C++ ocx long PLCPasswordOperation (long lStationNumber, long lOperationType, LPCTSTR bstrUserPassword, BSTR* bstrError)
C++ tlb long PLCPasswordOperation (long lStationNumber, long lOperationType, _bstr_t bstrUserPassword, BSTR* bstrError)
C# Int PLCPasswordOperation (int lStationNumber, long lOperationType, string bstrUserPassword, ref string bstrError)
VB.NET PLCPasswordOperation (lStationNumber As Integer, lOperationType As Integer, bstrUserPassword As String,
Byref strError As String) As Integer
VBA PLCPasswordOperation (lStationNumber As Long, lOperationType As Long, bstrUserPassword As String, strError As
String) As Long

lStationNumber: 0..99 0 = EE
lOperationType: NEWPASSWORD Set a new password
DELETEPASSWORD Delete existing password
PLC_LOGIN Login
PLC_LOGOUT Logout

Restricted vs. Not Restricted PLC


IsPLCProtected returns the password protection style, restricted or not-restricted. Restricted PLCs require to logical
OR RESTRICTED_PLC to the lOperationType constants.

Example: NEWPASSWORD | RESTRICTED_PLC

strUserPassword: new or login password


bstrError: empty if no error
return: NO_FP_CONNECT_ERROR or an error code

Language Samples Comment


C++ ocx, tlb nResult = PLCPasswordOperation( lStationNumber,10,"1234",&strError); Use CComBSTR strError;
C# nResult = PLCPasswordOperation( lStationNumber ,10,"1234", ref strError);
VB.NET, VBA nResult = PLCPasswordOperation( lStationNumber ,10,"1234", strError) Dim nResult As Integer/Long
Dim strError As String

5
ReadPLCInformation
Reads the PLC configuration including all hold area start addresses.
Language Declarations
C++ ocx void ReadPLCInformation(long lStationNumber,BSTR *bstrError, VARIANT* varReadDataReturn )
C++ tlb HRESULT ReadPLCInformation(long lStationNumber,BSTR *bstrError, VARIANT* varReadDataReturn )
C# object ReadPLCInformation(int lStationNumber,ref string strError)
VB.NET ReadPLCInformation(lStationNumber As Integer, ByRef strError As String) As Object
VBA ReadPLCInformation(lStationNumber As Long, strError As String)

lStationNumber: 0..99 0 = EE
bstrError: empty if no error
reference: varReadDataReturn contains the PLC configuration or is empty
return: PLC configuration or NULL if an error occured

varReadDataReturn
[0] ucCode Type hex code
[1] wVersion Firmware version
[2] wProSize Program capacity
[3] ucExecMode Run = 129, Prog = 128
[4] ucLinkUnit Link unit route number
[5] ucErrFlag Special Relay from R9000 to R9007. (HEX)
[6] wError Self diagnostic error number
[7] ucHardware Bit 2 = 1 comment memory
[8] ucProNum Available programming blocks 1 or 2
[9] sProAllSize PLC total memory size
[10] sHeaderSize n.a.
[11] sSysregSize n.a.
[12] ucPortNo Used communication port: 1 = Tool, 2 = COM1, 3 = USB or COM2
[13] ucVoidMem Comment memory: 0: SRAM, 10: EEPROM, 20: EPROM, 30: FLASH ROM
[14] lnVoidMemSize Comment memory size: 80:128, 100:256, 200: 512
[15] sVoidMemBlkSize n.a.
[16] counter start address
[17] SV, EV timer/counter
[18] WR register
[19] DT register
[20] FL register
[21] Link relay PLC 0
[22] Link relay PLC 1
[23] Link register PLC 0
[24] Link register PLC 1
[25] Step ladder hold/non-hold

Language Samples Comment


C++ ocx ReadPLCInformation(0, &bstrError, varReadDataReturn ); Use CComBSTR, COleSafeArray
C++ tlb ReadPLCInformation(0, &bstrError, varReadDataReturn ); Ignore HRESULT
C# object obj = ReadPLCInformation(0,ref strError);
VB.NET plcData = ReadPLCInformation(0, strError) Dim plcData As System.Array
Dim strError As String
VBA plcData = IsPLCProtected(0, strError ) Dim plcData As Variant
Dim strError As String

ChangePLCMode
Switches the PLC to RUN or PROG mode.
Language Declarations
C++ ocx long ChangePLCMode (long lStationNumber, long bModeFlag, BSTR *bstrError)
C++ tlb int ChangePLCMode (long lStationNumber, long bModeFlag, BSTR *bstrError)
C# int ChangePLCMode (int lStationNumber, int bModeFlag, ref string bstrError )
VB.NET ChangePLCMode (lStationNumber As Integer, bModeFlag As Integer, ByRef bstrError As String ) As Integer
VBA ChangePLCMode (lStationNumber As Long , bModeFlag As Long, bstrError As String ) As Long

lStationNumber: 0..99 0 = EE
bModeFlag: PLC_PROG_MODE or PLC_RUN_MODE
bstrError: empty if no error
return: NO_FP_CONNECT_ERROR or an error code
6
Language Samples Comment
C++ ocx, tlb nResult = ChangePLCMode(0, PLC_RUN_MODE, & bstrError ); Use CComBSTR
C# nResult = ChangePLCMode(0, PLC_RUN_MODE, ref strError );
VB.NET, VBA nResult = ChangePLCMode (0, strError) Dim nResult As Integer/Long
Dim strError As String

AreaRead
Reads one or more PLC register and return the (uncast) 16-bit values in an array
Language Declarations
C++ ocx void AreaRead (long lStationNumber, LPCTSTR strAddress, long lNumberOfRegisters, BSTR* bstrError, VARIANT*
varReadDataReturn)
C++ tlb HRESULT AreaRead (long lStationNumber, _bstr_t strAddress, long lNumberOfRegisters, BSTR* bstrError, VARIANT*
varReadDataReturn)
C# object AreaRead (int lStationNumber, string strAddress, int lNumberOfRegisters, ref string strError)
VB.NET AreaRead ( lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer, Byref strError As String) As
Object
VBA AreaRead ( lStationNumber As Long, strAddress As String, lNumberOfRegisters As Long , strError As String)

StationNumber: 0..99 0 = EE
strAddress: xx0..n xx = “DT”, “WR”, “LD”, etc. Example: “DT9013”
lNumberOfRegisters: number of register
bstrError: empty if no error
reference: varReadDataReturn contains the register data or is empty on error
return: register data array or NULL on error.

Language Samples Comment


C++ ocx AreaRead (0, “DT0”, 20, & bstrError, varReadDataReturn); Use CComBSTR, COleSafeArray
C++ tlb AreaRead (0, “DT0”, 20, & bstrError, varReadDataReturn); Ignore HRESULT
C# object plcData = AreaRead (0, “DT0”, 20, ref strError); object plcData
VB.NET plcData = AreaRead (0, “DT0”, 20, strError) Dim plcData As System.Array or
Dim plcData As Object
Dim strError As String
VBA plcData = AreaRead (0, “DT0”, 20, strError) Dim plcData As Variant
Dim strError As String

ReadINT, ReadDINT, ReadWORD, ReadDWORD, ReadREAL


Reads one or more PLC registers and casts the returned value. Parameters are common for all commands:

lStationNumber: 0..99 0 = EE
strAddress: xx0..n xx = “DT”, “WR”, “LD”, etc. Example: “DT9013”
lNumberOfRegisters: number of register
bstrError: empty if no error
reference: varReadDataReturn contains the register data or is empty on error
return: register data array or NULL on error

ReadINT
Language Declarations
C++ ocx void ReadINT (long lStationNumber, LPCTSTR strAddress, long lNumberOfRegisters, BSTR* bstrError, VARIANT*
varReadDataReturn )
C++ tlb HRESULT ReadINT (long lStationNumber, _bstr_t strAddress, long lNumberOfRegisters , BSTR* bstrError, VARIANT*
varReadDataReturn )
C# object ReadINT (int lStationNumber, string strAddress, int lNumberOfRegisters, ref string strError )
VB.NET ReadINT ( lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer, Byref strError As String) As
Object
VBA ReadINT ( lStationNumber As Long, strAddress As String, lNumberOfRegisters As Long , strError As String)

Language Samples Comment


C++ ocx ReadINT (0, “DT0”, 20, & bstrError, varReadDataReturn); Use CComBSTR, COleSafeArray
C++ tlb ReadINT (0, “DT0”, 20, & bstrError, varReadDataReturn); Ignore HRESULT
C# object obj = ReadINT (0, “DT0”, 20, ref strError); object plcData
VB.NET plcData = ReadINT (0, “DT0”, 20, strError) Dim plcData As System.Array or
Dim plcData As Object
Dim strError As String
VBA plcData = ReadINT (0, “DT0”, 20, strError) Dim plcData As Variant
Dim strError As String

7
ReadDINT
Language Declarations
C++ ocx void ReadDINT (long lStationNumber, LPCTSTR strAddress, long lNumberOfRegisters, BSTR* bstrError, VARIANT*
varReadDataReturn)
C++ tlb HRESULT ReadDINT (long lStationNumber, _bstr_t strAddress, long lNumberOfRegisters, BSTR* bstrError, VARIANT*
varReadDataReturn)
C# object ReadDINT (int lStationNumber, string strAddress, int lNumberOfRegisters, ref string strError)
VB.NET ReadDINT ( lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer, Byref strError As String)
As Object
VBA ReadDINT ( lStationNumber As Long, strAddress As String, lNumberOfRegisters As Long , strError As String)

Language Samples Comment


C++ ocx ReadDINT (0, “DT0”, 20, & bstrError, varReadDataReturn); Use CComBSTR, COleSafeArray
C++ tlb ReadDINT (0, “DT0”, 20, & bstrError, varReadDataReturn); Ignore HRESULT
C# object obj = ReadDINT (0, “DT0”, 20, ref strError); object plcData
VB.NET plcData = ReadDINT (0, “DT0”, 20, strError) Dim plcData As System.Array or
Dim plcData As Object
Dim strError As String
VBA plcData = ReadDINT (0, “DT0”, 20, strError) Dim plcData As Variant
Dim strError As String

ReadWORD
Language Declarations
C++ ocx void ReadWORD (long lStationNumber, LPCTSTR strAddress, long lNumberOfRegisters, BSTR* bstrError, VARIANT*
varReadDataReturn)
C++ tlb HRESULT ReadWORD (long lStationNumber, _bstr_t strAddress, long lNumberOfRegisters, BSTR* bstrError, VARIANT*
varReadDataReturn )
C# object ReadWORD (int lStationNumber, string strAddress, int lNumberOfRegisters, ref string strError )
VB.NET ReadWORD ( lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer,
Byref strError As String) As Object
VBA ReadWORD ( lStationNumber As Long, strAddress As String, lNumberOfRegisters As Long, strError As String)

Language Samples Comment


C++ ocx ReadWORD (0, “DT0”, 20, & bstrError, varReadDataReturn); Use CComBSTR, COleSafeArray
C++ tlb ReadWORD (0, “DT0”, 20, & bstrError, varReadDataReturn); Ignore HRESULT
C# object obj = ReadWORD (0, “DT0”, 20, ref strError); object plcData
VB.NET plcData = ReadWORD (0, “DT0”, 20, strError) Dim plcData As System.Array or
Dim plcData As Object
Dim strError As String
VBA plcData = ReadWORD (0, “DT0”, 20, strError) Dim plcData As Variant
Dim strError As String

ReadDWORD
Language Declarations
C++ ocx void ReadDWORD (long lStationNumber, LPCTSTR strAddress, long lNumberOfRegisters, BSTR* bstrError, VARIANT*
varReadDataReturn)
C++ tlb HRESULT ReadDWORD (long lStationNumber, _bstr_t strAddress, long lNumberOfRegisters, BSTR* bstrError, VARIANT*
varReadDataReturn)
C# object ReadDWORD (int lStationNumber, string strAddress, int lNumberOfRegisters, ref string strError )
VB.NET ReadDWORD ( lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer, Byref strError As String)
As Object
VBA ReadDWORD ( lStationNumber As Long, strAddress As String, lNumberOfRegisters As Long , strError As String)

Language Samples Comment


C++ ocx ReadDWORD (0, “DT0”, 20, & bstrError, varReadDataReturn); Use CComBSTR, COleSafeArray
C++ tlb ReadDWORD (0, “DT0”, 20, & bstrError, varReadDataReturn); Ignore HRESULT
C# object obj = ReadDWORD (0, “DT0”, 20, ref strError); object plcData
VB.NET plcData = ReadDWORD (0, “DT0”, 20, strError) Dim plcData As System.Array or
Dim plcData As Object
Dim strError As String
VBA plcData = ReadDWORD (0, “DT0”, 20, strError) Dim plcData As Variant
Dim strError As String

8
ReadREAL
Language Declarations
C++ ocx void ReadREAL (long lStationNumber, LPCTSTR strAddress, long lNumberOfRegisters, BSTR* bstrError, VARIANT*
varReadDataReturn)
C++ tlb HRESULT ReadREAL (long lStationNumber, _bstr_t strAddress, long lNumberOfRegisters, BSTR* bstrError, VARIANT*
varReadDataReturn)
C# object ReadREAL (int lStationNumber, string strAddress, int lNumberOfRegisters, ref string bstrError )
VB.NET ReadREAL( lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer, Byref strError As String) As
Object
VBA ReadREAL ( lStationNumber As Long, strAddress As String, lNumberOfRegisters As Long , strError As String)

Language Samples Comment


C++ ocx ReadREAL (0, “DT0”, 20, & bstrError, varReadDataReturn); Use CComBSTR, COleSafeArray
C++ tlb ReadREAL (0, “DT0”, 20, & bstrError, varReadDataReturn); Ignore HRESULT
C# object obj = ReadREAL (0, “DT0”, 20, ref strError); object plcData
VB.NET plcData = ReadREAL (0, “DT0”, 20, strError) Dim plcData As System.Array or
Dim plcData As Object
Dim strError As String
VBA plcData = ReadREAL (0, “DT0”, 20, strError) Dim plcData As Variant
Dim strError As String

ReadBits
Reads one or more bits from the PLC.
Language Declarations
C++ ocx void ReadBits (long lStationNumber, LPCTSTR strAddress, long lNumberOfBits, BSTR* bstrError, VARIANT*
varReadDataReturn)
C++ tlb HRESULT ReadBits (long lStationNumber, _bstr_t strAddress, long lNumberOfBits, BSTR* bstrError, VARIANT*
varReadDataReturn)
C# object ReadBits (int lStationNumber, string strAddress, int lNumberOfBits , ref string strError)
VB.NET ReadBits (lStationNumber As Integer, strAddress As String, lNumberOfBits As Integer, Byref strError As String) As Object
VBA ReadBits (lStationNumber As Long, strAddress As String, lNumberOfBits As Long, strError As String)

lStationNumber: 0..99 0 = EE
strAddress: x0..n x = R, Y, X
lNumberOfBits: number of bits
bstrError: empty if no error
reference: varReadDataReturn contains the bit data or is empty on error
return: bit data array or NULL on error
Language Samples Comment
C++ ocx ReadBits (0, “Y0”, 1, & bstrError, varReadDataReturn); Use CComBSTR,
COleSafeArray
C++ tlb ReadBits (0, “Y0”, 1, & bstrError, varReadDataReturn); Ignore HRESULT
C# object obj = ReadBits (0, “Y0”, 1, ref strError); object plcData
VB.NET plcData = ReadBits (0, “Y0”, 1, strError) Dim plcData As System.Array
VBA plcData = ReadBits (0, “Y0”, 1, strError) Dim plcData As Variant
Dim strError As String

ReadString
Reads one string from the PLC.
Language Declarations
C++ ocx CString ReadString (long lStationNumber, LPCTSTR strAddress, BSTR* bstrError)
C++ tlb _bstr_t ReadString (long lStationNumber, _bstr_t strAddress, BSTR* bstrError, VARIANT* varReadDataReturn)
C# string ReadString (int lStationNumber, string strAddress, ref string strError)
VB.NET ReadString (lStationNumber As Integer, strAddress As String, Byref strError As String) As String
VBA ReadString (lStationNumber As Long, strAddress As String, strError As String) As String

lStationNumber: 0..99 0 = EE
strAddress: xx0..n xx = DT, WR, LD, etc.
bstrError: empty if no error
reference: varReadDataReturn contains the string data or is empty on error
return: string data array (one element only!) or NULL on error

9
Language Samples Comment
C++ ocx CString strData = ReadString (0, “DT0”, & bstrError); Use CComBSTR,
COleSafeArray
C++ tlb ReadString (0, “DT0”, & bstrError, varReadDataReturn); CString strData;
strData = (LPCTSTR)ReadString
C# string strData = ReadString (0, “DT0”, ref strError); object plcData
VB.NET, VBA strData = ReadString (0, “DT0”, strError) Dim plcData As String
Dim strError As String

ReadSharedMemory
Reads one or more bytes/words from the shared memory.
Language Declarations
C++ ocx void ReadSharedMemory(long lStationNumber, long lAccessMode, long lSlotNumber, long lBanknumber, long
lFirstPosition, long lItems2Read, BSTR* bstrError, VARIANT* varReadDataReturn);
C++ tlb HRESULT ReadSharedMemory(long lStationNumber, long lAccessMode, long lSlotNumber, long lBanknumber, long
lFirstPosition, long lItems2Read, BSTR* bstrError, VARIANT* varReadDataReturn);
C# object ReadSharedMemory(int lStationNumber, int lAccessMode, int lSlotNumber, int lBanknumber, int lFirstPosition, int
lItems2Read, ref string strError);
VB.NET ReadSharedMemory(lStationNumber As Integer, lAccessMode As Integer, lSlotNumber As Integer, lBanknumber As
Integer, lFirstPosition As Integer, lItems2Read As Integer, Byref strError As String) As Object
VBA ReadSharedMemory(lStationNumber As Long, lAccessMode As Long , lSlotNumber As Long , lBanknumber As Long,
lFirstPosition As Long , lItems2Read As Long , strError As String)

lStationNumber: 0..99 0 = EE
lAccessMode: 0xE = Word, 0xF = Byte boundry

Example:
lAccessMode = 0xE
varReadDataReturn[] = [0] 0000, [1] 0001, [2] 0002, [3] 0003, [4] 0004
lAccessMode = 0xF
varReadDataReturn[] = [0] 0100, [1] 0302, [2] 0004

lSlotNumber: modul slot number


lBanknumber: modul bank number
lFirstPosition: first byte/word in shared memory
lItems2Read: number of items to read
bstrError: empty if no error
reference: varReadDataReturn contains the shared memory data or is empty on error
return: shared memory data or NULL on error

Language Samples Comment


C++ ocx ReadSharedMemory(0, lAccessMode, lslotNumber, lBankNumber, lFirstPosition, Use CComBSTR, COleSafeArray
lItems2Read, & bstrError, varReadDataReturn); All numeric parameter declared as
long
C++ tlb ReadSharedMemory(0, lAccessMode, lslotNumber, lBankNumber, lFirstPosition, Ignore HRESULT
lItems2Read, & bstrError, varReadDataReturn); All numeric parameter declared as
long
C# object objReturn = ReadSharedMemory(0, lAccessMode, lslotNumber, lBankNumber, All numeric parameter declared as
lFirstPosition, lItems2Read, ref strError); int
VB.NET plcData = oxcFP_CONNECT.ReadSharedMemory(0, 0, 0, 0, 0, 1, strError ) Dim plcData As System.Array or
Dim plcData As Object
Dim strError As String
VBA plcData = oxcFP_CONNECT.ReadSharedMemory(0, 0, 0, 0, 0, 1, strError ) Dim plcData As Variant
Dim strError As String

10
AreaWrite
Writes one or more PLC registers.
Language Declarations
C++ ocx int AreaWrite(long lStationNumber, BSTR strAddress, long lNumberOfRegisters, VARIANT pArrayWriteDataFromHost,
BSTR* bstrError);
C++ tlb int AreaWrite(long lStationNumber, _bstr_t strAddress, long lNumberOfRegisters,
VARIANT pArrayWriteDataFromHost, BSTR* bstrError);
C# int AreaWrite(int lStationNumber, string strAddress, int lNumberOfRegisters, object pArrayWriteDataFromHost,
ref string strError);
VB.NET AreaWrite(lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer, pArrayWriteDataFromHost As
Object, Byref strError As String) As Integer
VBA AreaWrite(lStationNumber As Long, BSTR strAddress, lNumberOfRegisters As Long, VARIANT pArrayWriteDataFromHost,
strError As String) As Long

lStationNumber: 0..99 0 = EE
bstrStartAddress: xx0..n xx = DT, WR, LD, etc.
lNumberOfRegisters: number of words to write.
pArrayWriteDataFromHost: Array of 16bit write data
COleSafeArray VARTYPE = VT_I2
bstrError: empty if no error
return: NO_FP_CONNECT_ERROR or an error code

Language Samples Comment


C++ ocx, tlb nResult = AreaWrite(0, “DT100”, 10, arWriteData , &bstrError); Use CComBSTR, COleSafeArray
VARTYPE = VT_I2
C# nResult = AreaWrite(0, “DT100”, 10, arWriteData, ref strError); short[] arWriteData
VB.NET nResult = AreaWrite(0, “DT100”,2, arWriteData, strError) Dim arWriteData(n) As Integer
Dim strError As String
VBA nResult = AreaWrite(0, “DT100”,2, arWriteData, strError) Dim arWriteData As VARIANT
Dim strError As String

WriteINT, WriteDINT, WriteWORD, WriteDWORD, WriteREAL


Writes one or more cast values to the PLC. The following parameters are common for all commands:

lStationNumber: 0..99 0 = EE
strAddress: xx0..n xx = “DT”, “WR”, “LD”, etc. Example: “DT9013”
lNumberOfRegisters: number of register
pArrayWriteDataFromHost: contains the data for the PLC register
bstrError: empty if no error
return: NO_FP_CONNECT_ERROR or an error code

WriteINT
Language Declarations
C++ ocx int WriteINT(long lStationNumber, BSTR strAddress, long lNumberOfRegisters, VARIANT pArrayWriteDataFromHost,
BSTR* bstrError);
C++ tlb int WriteINT (long lStationNumber, _bstr_t strAddress, long lNumberOfRegisters,
VARIANT pArrayWriteDataFromHost, BSTR* bstrError);
C# int WriteINT (int lStationNumber, string strAddress, int lNumberOfRegisters, object pArrayWriteDataFromHost,
ref string strError);
VB.NET WriteINT (lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer, pArrayWriteDataFromHost As
Object, Byref strError As String) As Integer
VBA WriteINT (lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer, pArrayWriteDataFromHost As
Object, Byref strError As String) As Long

VARTYPE = VT_I2
Language Samples Comment
C++ ocx, tlb nResult = WriteINT(0, “DT100”, 10, arWriteData, &bstrError); Use CComBSTR,
COleSafeArray
C# nResult = WriteINT (0, “DT100”, 10, arWriteData, ref strError); short[] arWriteData
VB.NET nResult = WriteINT (0, “DT100”,2, arWriteData, strError) Dim arWriteData(n) As Short
Dim strError As String
VBA nResult = WriteINT (0, “DT100”,2, arWriteData, strError) Dim arWriteData As VARIANT
Dim strError As String

11
WriteDINT
Language Declarations
C++ ocx int WriteDINT(long lStationNumber, BSTR strAddress, long lNumberOfRegisters, VARIANT pArrayWriteDataFromHost,
BSTR* bstrError);
C++ tlb int WriteDINT (long lStationNumber, _bstr_t strAddress, long lNumberOfRegisters,
VARIANT pArrayWriteDataFromHost, BSTR* bstrError);
C# int WriteDINT (int lStationNumber, string strAddress, int lNumberOfRegisters, object pArrayWriteDataFromHost,
ref string strError);
VB.NET WriteDINT (lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer, pArrayWriteDataFromHost
As Object, Byref strError As String) As Integer
VBA WriteDINT (lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer, pArrayWriteDataFromHost
As Object, Byref strError As String) As Long

VARTYPE = VT_I4
Language Samples Comment
C++ ocx, tlb nResult = WriteDINT (0, “DT100”, 10, arWriteData, &bstrError); Use CComBSTR,
COleSafeArray
C# nResult = WriteDINT (0, “DT100”, 10, arWriteData, ref strError); int[] arWriteData
VB.NET nResult = WriteDINT (0, “DT100”,2, arWriteData, strError) Dim arWriteData(n) As Integer
Dim strError As String
VBA nResult = WriteDINT (0, “DT100”,2, arWriteData, strError) Dim arWriteData As VARIANT
Dim strError As String

WriteWORD
Language Declarations
C++ ocx int WriteWORD(long lStationNumber, BSTR strAddress, long lNumberOfRegisters, VARIANT pArrayWriteDataFromHost,
BSTR* bstrError);
C++ tlb int WriteWORD (long lStationNumber, _bstr_t strAddress, long lNumberOfRegisters,
VARIANT pArrayWriteDataFromHost, BSTR* bstrError);
C# int WriteWORD (int lStationNumber, string strAddress, int lNumberOfRegisters, object pArrayWriteDataFromHost,
ref string strError);
VB.NET WriteWORD (lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer, pArrayWriteDataFromHost
As Object, Byref strError As String) As Integer
VBA WriteWORD (lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer, pArrayWriteDataFromHost
As Object, Byref strError As String) As Long

VARTYPE = VT_UI2
Language Samples Comment
C++ ocx, tlb nResult = WriteWORD (0, “DT100”, 10, arWriteData, &bstrError); Use CComBSTR,
COleSafeArray
C# nResult = WriteWORD (0, “DT100”, 10, arWriteData, ref strError); ushort[] arWriteData
VB.NET nResult = WriteWORD (0, “DT100”,2, arWriteData, strError) Dim arWriteData(n) As UShort
Dim strError As String
VBA nResult = WriteWORD (0, “DT100”,2, arWriteData, strError) Dim arWriteData As VARIANT
Dim strError As String

WriteDWORD
Language Declarations
C++ ocx int WriteDWORD(long lStationNumber, BSTR strAddress, long lNumberOfRegisters, VARIANT pArrayWriteDataFromHost,
BSTR* bstrError);
C++ tlb int WriteDWORD (long lStationNumber, _bstr_t strAddress, long lNumberOfRegisters,
VARIANT pArrayWriteDataFromHost, BSTR* bstrError);
C# int WriteDWORD (int lStationNumber, string strAddress, int lNumberOfRegisters, object pArrayWriteDataFromHost,
ref string strError);
VB.NET WriteDWORD (lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer,
pArrayWriteDataFromHost As Object, Byref strError As String) As Integer
VBA WriteDWORD (lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer,
pArrayWriteDataFromHost As Object, Byref strError As String) As Long

VARTYPE = VT_UI4
Language Samples Comment
C++ ocx, tlb nResult = WriteDWORD (0, “DT100”, 10, arWriteData, &bstrError); Use CComBSTR,
COleSafeArray
C# nResult = WriteDWORD (0, “DT100”, 10, arWriteData, ref strError); uint[] arWriteData
VB.NET nResult = WriteDWORD (0, “DT100”,2, arWriteData, strError) Dim arWriteData(n) As UInteger
Dim strError As String
VBA nResult = WriteDWORD (0, “DT100”,2, arWriteData, strError) Dim arWriteData As VARIANT
Dim strError As String

12
WriteREAL
Language Declarations
C++ ocx int WriteREAL(long lStationNumber, BSTR strAddress, long lNumberOfRegisters, VARIANT pArrayWriteDataFromHost,
BSTR* bstrError);
C++ tlb int WriteREAL (long lStationNumber, _bstr_t strAddress, long lNumberOfRegisters,
VARIANT pArrayWriteDataFromHost, BSTR* bstrError);
C# int WriteREAL (int lStationNumber, string strAddress, int lNumberOfRegisters, object pArrayWriteDataFromHost,
ref string strError);
VB.NET WriteREAL (lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer, pArrayWriteDataFromHost
As Object, Byref strError As String) As Integer
VBA WriteREAL (lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer, pArrayWriteDataFromHost
As Object, Byref strError As String) As Long

VARTYPE = VT_R4
Language Samples Comment
C++ ocx, tlb nResult = WriteREAL (0, “DT100”, 10, arWriteData, &bstrError); Use CComBSTR,
COleSafeArray
C# nResult = WriteREAL (0, “DT100”, 10, arWriteData, ref strError); float[] arWriteData
VB.NET nResult = WriteREAL (0, “DT100”,2, arWriteData, strError) Dim arWriteData(n) As Double
Dim strError As String
VBA nResult = WriteREAL (0, “DT100”,2, arWriteData, strError) Dim arWriteData As VARIANT
Dim strError As String

WriteBits
Writes one or more bits to the PLC.
Language Declarations
C++ ocx int WriteBits(long lStationNumber, BSTR strAddress, long lNumberOfRegisters, VARIANT pArrayWriteDataFromHost, BSTR*
bstrError);
C++ tlb int WriteBits (long lStationNumber, _bstr_t strAddress, long lNumberOfBits, VARIANT pArrayWriteDataFromHost, BSTR*
bstrError);
C# int WriteBits (int lStationNumber, string strAddress, int lNumberOfRegisters, object pArrayWriteDataFromHost,
ref string strError);
VB.NET WriteBits (lStationNumber As Integer, strAddress As String, lNumberOfRegisters As Integer, pArrayWriteDataFromHost As
Object, Byref strError As String) As Integer
VBA int WriteBits (int lStationNumber, string strAddress, int lNumberOfRegisters, object pArrayWriteDataFromHost,
ref string strError) As Long

lStationNumber: 0..99 0 = EE
strAddress: x0..n x = R, Y, X
lNumberOfRegisters: number of register
pArrayWriteDataFromHost: contains the bit information for the PLC. Each word in the array represents
one single bit. VARTYPE = VT_BOOL.
bstrError: empty if no error
return: NO_FP_CONNECT_ERROR or an error code

Language Samples Comment


C++ ocx, tlb nResult = WriteBits (0, “DT100”, 10, arWriteData, &bstrError); Use CComBSTR, COleSafeArray
C# nResult = WriteBits (0, “DT100”, 10, arWriteData, ref strError); short[] arWriteData
VB.NET nResult = WriteBits (0, “DT100”,2, arWriteData, strError) Dim arWriteData(n) As Short
Dim strError As String
VBA nResult = WriteBits (0, “DT100”,2, arWriteData, strError) Dim arWriteData As VARIANT
Dim strError As String

WriteString
Writes one character string to the PLC.
Language Declarations
C++ ocx int WriteString(long lStationNumber, BSTR strAddress, BSTR strString2Write, long lStringVariableSize, BSTR* bstrError);
C++ tlb int WriteString(long lStationNumber, _bstr_t strAddress, _bstr_t strString2Write, long lStringVariableSize,
BSTR* bstrError);
C# int WriteString(int lStationNumber, string strAddress, string strString2Write, int lStringVariableSize,
ref string strError);
VB.NET WriteString(lStationNumber As Integer, strAddress, strString2Write As Integer, lStringVariableSize As Integer,
Byref strError As String) As Integer
VBA WriteString(lStationNumber As Long, strAddress, strString2Write As Long, lStringVariableSize As Long, strError As String)
As Long

lStationNumber: 0..99 0 = EE
strAddress: xx0..n xx = “DT”, “WR”, “LD”, etc.
13
strString2Write:
lStringVariableSize: defines the maximal string capacity and is in the range of {-1,0,n}

lStringVariable PLC Result


Size Mode
-1 PROG write the string data to the PLC but do not check if the string length fits into the maximal string capacity
-1 RUN read the current string definition from the PLC and write the string data only if the maximal capacity > string length
> -1 X write the string data to the plc with the size defined in variable lStringVariableSize

bstrError: empty if no error


return: NO_FP_CONNECT_ERROR or an error code

Language Samples Comment


C++ ocx, tlb nResult =WriteString(0,strStartAddress,strDataValue, 32, & bstrError); Use CComBSTR, COleSafeArray
C# nResult =WriteString(0, "Mystring", 128, ref strError );
VB.NET, VBA nResult =WriteString(0,strStartAddress,strDataValue, 32, strError); Dim strError As String

WriteSharedMemory
Writes one or more bytes/words to the shared memory.
Language Declarations
C++ ocx,tlb long WriteSharedMemory(long lStationNumber, long lAccessMode, long lSlotNumber, long lBanknumber, long lFirstPosition,
long lItems2Write, VARIANT pArrayWriteDataFromHost, BSTR* bstrError);
C# int WriteSharedMemory(int lStationNumber, int lAccessMode, int lSlotNumber, int lBanknumber, int lFirstPosition, int
lItems2Write, object pArrayWriteDataFromHost, ref string strError);
VB.NET WriteSharedMemory(lStationNumber As Integer, lAccessMode As Integer, lSlotNumber As Integer, lBanknumber As
Integer, lFirstPosition As Integer, lItems2Write As Integer, pArrayWriteDataFromHost As Object, By Ref strError As
String) As Integer
VBA WriteSharedMemory(lStationNumber As Long, lAccessMode As Long, lSlotNumber As Long , lBanknumber As Long,
lFirstPosition As Long, lItems2Write As Long, Object pArrayWriteDataFromHost, strError As String) As Long

lStationNumber: 0..99 0 = EE
lAccessMode: 0xE = Word, 0xF = Byte boundry
Example:
lAccessMode = 0xE
varReadDataReturn[] = [0] 0000, [1] 0001, [2] 0002, [3] 0003, [4] 0004
lAccessMode = 0xF
varReadDataReturn[] = [0] 0100, [1] 0302, [2] 0004
lSlotNumber: modul slot number
lBanknumber: modul bank number
lFirstPosition: first byte/word in shared memory
lItems2Write: number of items to read
pArrayWriteDataFromHost: Write data

bstrError: empty if no error


return: NO_FP_CONNECT_ERROR or an error code

Language Samples Comment


C++ ocx, tlb nResult = WriteSharedMemory(0,0xe,lSlot,lBank,0,5,arWriteData, &bstrError); Use CComBSTR, COleSafeArray
C# nResult = WriteSharedMemory(0,0xe,lSlot,lBank,0,5,arWriteData, ref strError);
VB.NET, VBA nResult = WriteSharedMemory(0,0xe,lSlot,lBank,0,5,arWriteData, strError) Dim strError As String

UploadPLCCode
Upload the PLC code & system registers to the computer.
Language Declarations
C++ ocx void UploadPLCCode(long lStationNumber, long lProgramNumber, BSTR* bstrError, VARIANT* varReadDataReturn);
C++ tlb HRESULT UploadPLCCode(long lStationNumber, long lProgramNumber, BSTR* bstrError, VARIANT* varReadDataReturn);
C# object UploadPLCCode(int lStationNumber, int lProgramNumber, ref string strError);
VB.NET UploadPLCCode (lStationNumber As Integer, lProgramNumber As Integer, By Ref strError As String) As Object
VBA UploadPLCCode (lStationNumber As Long, lProgramNumber As Long, By Ref strError As String)

lStationNumber: 0..99 0 = EE
lProgramNumber: 0,1 (FP2SH)
bstrError: empty if no error
reference: varReadDataReturn contains the uploaded PLC code or is empty on error
return: uploaded PLC code or NULL on error
14
Language Samples Comment
C++ ocx UploadPLCCode( lStationNumber,0, &bstrError,cosaSafeArray); Use CComBSTR, COleSafeArray
C++ tlb UploadPLCCode( lStationNumber,0, &bstrError,cosaSafeArray); Ignore HRESULT
C# plcCode = UploadPLCCode( lStationNumber,0,ref strError); object plcCode
VB.NET, VBA plcCode = UploadPLCCode( lStationNumber,1,strError) Dim strError As String

ImportFPFile
Reads an FP-formatted file and returns a BSTR string in an array of size 1 (2 in case of FP2SH).
Language Declarations
C++ ocx void ImportFPFile(BSTR bstrFPFilePath, int *lPLCTypeCode, BSTR* bstrError, VARIANT* varReadDataReturn);
C++ tlb HRESULT ImportFPFile(_bstr_t bstrFPFilePath, int *lPLCTypeCode, BSTR* bstrError,
VARIANT* varReadDataReturn);
C# object ImportFPFile (string lStationNumber, ref int lPLCTypeCode, ref string strError);
VB.NET ImportFPFile (bstrFPFilePath As String, By Ref lPLCTypeCode As Integer, By Ref strError As string ) As Object
VBA ImportFPFile (bstrFPFilePath As String, lPLCTypeCode As Long, strError As string )

bstrFPFilePath: path to the fp file


lPLCTypeCode: the PLC type code
bstrError: empty if no error
reference: varReadDataReturn contains the PLC Code string array or is empty on error
return: PLC Code string array or NULL on error

Language Samples Comment


C++ ocx ImportFPFile (strFilePath, &nPLCType, &bstrError, plcStringData); Use CComBSTR, COleSafeArray
C++ tlb ImportFPFile (strFilePath, &nPLCType,&bstrError, plcStringData); Ignore HRESULT
C# obPlcStringData = ImportFPFile ("c:\\file.fp", ref nPLCType, ref strError); object obPlcStringData
VB.NET, VBA obPlcStringData = ImportFPFile ("c:\\file.fp", nPLCType, strError) Dim strError As String
Dim obPlcStringData As Object or
Dim obPlcStringData(2) As String

ClearProgram
Clears the PLC program and all data registers. The PLC must be in PROG-Mode.
Language Declarations
C++ ocx, tlb int ClearProgram(long lStationNumber, BSTR* bstrError);
C# int ClearProgram(int lStationNumber, ref string strError);
VB.NET ClearProgram(lStationNumber As Integer, By Ref strError As String) As Integer
VBA ClearProgram(lStationNumber As Integer, strError As String) As Long

lStationNumber: 0..99 0 = EE
bstrError: empty if no error
return: NO_FP_CONNECT_ERROR or an error code

Language Samples Comment


C++ ocx, tlb nResult = ClearProgram(lStationNumber, &bstrError); Use CComBSTR
C# nResult = ClearProgram(0, ref strError);
VB.NET, VBA nResult = ClearProgram(lStationNumber, strError) Dim strError As String

DownloadPLCCode
Downloads the PLC code and system registers. The command does not test or change the PLC mode nor tests if
the download code is compatible with the target PLC.
Language Declarations
C++ ocx, tlb int DownloadPLCCode(long lStationNumber, long lProgramNumber, BSTR* strStringPLC_Code, BSTR* bstrError);
C# int DownloadPLCCode(int lStationNumber, int lProgramNumber, ref string strStringPLC_Code, ref string strError);
VB.NET DownloadPLCCode ( lStationNumber As Integer, lProgramNumber As Integer, By Ref strStringPLC_Code As String,
By Ref strError As String) As Integer
VBA DownloadPLCCode ( lStationNumber As Long, lProgramNumber As Integer, strStringPLC_Code As String,
strError As String)

lStationNumber: 0..99 0 = EE
lProgramNumber: 0 or 1
strStringPLC_Code: usually data that has been uploaded with UploadPLCCode
bstrError: empty if no error
return: NO_FP_CONNECT_ERROR or an error code

Language Samples Comment


15
C++ ocx, tlb nResult = DownloadPLCCode(lStationNumber,0,& strPLCode, & bstrError); Use CComBSTR, COleSafeArray
C# nResult = DownloadPLCCode(lStationNumber,0,ref strPLCCode , ref strError);
VB.NET, VBA nResult = DownloadPLCCode(lStationNumber,0,ref strPLCCode , strError) Dim strError As String
Dim strPLCCode As String

DownloadFPFile
Reads an FP-formatted file and downloads it to the PLC. The function checks whether the file has a valid FP
format. The type of the connected PLC must match with the type in the FP file and the PLC must be in PROG
mode. The command is aborted if either the PLC types do not match or the PLC is not in PROG Mode.

Language Declarations
C++ ocx int DownloadFPFile(long lStationNumber, BSTR bstrFPFilePath, BSTR* bstrError);
C++ tlb int DownloadFPFile(long lStationNumber, _bstr_t bstrFPFilePath, BSTR* bstrError);
C# int DownloadFPFile(int lStationNumber, string strFPFilePath, ref string strError);
VB.NET DownloadFPFile(lStationNumber As Integer, strFPFilePath As String, By Ref strError As String) As Integer
VBA DownloadFPFile(lStationNumber As Long, strFPFilePath As String, strError As String)

lStationNumber: 0..99 0 = EE
bstrFPFilePath path to the fp file
bstrError: empty if no error
return: NO_FP_CONNECT_ERROR or an error code

Language Samples Comment


C++ ocx, tlb nResult = DownloadFPFile (1,"c:\\file1.fp", &bstrError); Use CComBSTR, COleSafeArray
C# nResult = DownloadFPFile (1, strPath, ref strError);
VB.NET, VBA nResult = DownloadFPFile (1,strPath, strError) Dim strError As String

SetCommunicationParameter
Sets the Communication Parameters. The settings can only be changed if the communication port is closed!
Language Declarations
C++ ocx int SetCommunicationParameter(VARIANT pArrayWriteNumericDataFromHost, BSTR bstrTitle,
BSTR bstrParameter1, BSTR bstrParameter2);
C++ tlb int SetCommunicationParameter(VARIANT pArrayWriteNumericDataFromHost, _bstr_t bstrTitle,
_bstr_t bstrParameter1, _bstr_t bstrParameter2);
C# int SetCommunicationParameter(object pArrayWriteNumericDataFromHost, string strTitle,
string strParameter1, string strParameter2);
VB.NET SetCommunicationParameter(pArrayWriteNumericDataFromHost As Object, strTitle As Integer,
strParameter1 As String, strParameter2 As String) As Integer
VBA SetCommunicationParameter(pArrayWriteNumericDataFromHost As Object, strTitle As Long,
strParameter1 As String, strParameter2 As String)

pArrayWriteNumericDataFromHost: Integer array. Parameter according to the communication type.


bstrTitle: Title string in case of MODEM and ETHERNET
bstrParameter1: First string parameter for MODEM or ETHERNET communication
bstrParameter2: Second string parameter for MODEM or ETHERNET communication
return: NO_FP_CONNECT_ERROR or an error code

pArrayWriteNumericDataFromHost (Examples can be found in the C# and CPPTlb samples)


VARTYPE = VT_I4

n C-NET MODEM ETHERNET USB


0 COMSETTING_CNET COMSETTING_MODEM COMSETTING_ETHERNET COMSETTING_USB
1 COM Port number COM Port number Acquire IP address autom. CommunicationTime-out
2 Baud rate Baud rate Use ET-LAN unit
3 Data length Data length Computer Port No.:
4 Stop bit Stop bits Computer Station No.:
5 Parity Parity Destination Port No.:
6 Auto setting Dial mode Destination Station No.:
7 CommunicationTime-out CommunicationTime-out CommunicationTime-out
8 Public Line Time-out Connection Time-out
Title: Title:
<bstrTitle> <bstrTitle>
Initial AT command Computer IP address
<bstrParameter1> <bstrParameter1>
Telephone No.: Destination IP address
<bstrParameter2> <bstrParameter2>

16
Language Samples Comment
C++ ocx nResult = SetCommunicationParameter(cosaSafeArray,strTitle, strP1, strP2); Use COleSafeArray
C++ tlb nResult = SetCommunicationParameter(cosaSafeArray,(_bstr_t)strTitle, (_bstr_t)strP1,
(_bstr_t)strP2);
C# nResult = SetCommunicationParameter(arIntWriteData,””,””,””); int[] arIntWriteData
VB.NET, VBA nResult = SetCommunicationParameter(arIntWriteData,””,””,””); Dim arIntWriteData(n)

GetCurrentlyUsedCommunicationParameter
Reads the current Communication Settings. The returned data is split up into an array of integers and
three string references.
Language Declarations
C++ ocx void GetCurrentlyUsedCommunicationParameter(BSTR* bstrTitle, BSTR* bstrParameter1, BSTR* bstrParameter2,
VARIANT* varReadDataReturn);
C++ tlb HRESULT GetCurrentlyUsedCommunicationParameter(BSTR* bstrTitle, BSTR* bstrParameter1, BSTR* bstrParameter2,
VARIANT* varReadDataReturn);
C# object GetCurrentlyUsedCommunicationParameter(ref string strTitle, ref string strParameter1, ref string strParameter2);
VB.NET GetCurrentlyUsedCommunicationParameter(Ref By strTitle As String, Ref By strParameter1 As String,
Ref By strParameter2 As String) As Object
VBA GetCurrentlyUsedCommunicationParameter(Ref By strTitle As String, Ref By strParameter1 As String,
Ref By strParameter2 As String)

bstrTitle: Titlestring in case of MODEM and ETHERNET


bstrParameter1: First string parameter for MODEM or ETHERNET communication
bstrParameter2: Second string parameter for MODEM or ETHERNET communication
reference: varReadDataReturn contains the Integer parameter according to the communication type
or is empty on error
return: array according to the communication type or NULL on error.
Note: See Communication Settings Array above

Language Samples Comment


C++ ocx GetCurrentlyUsedCommunicationParameter(&bstrTitle, &bstrPar1, &bstrPar2, Use CComBSTR, COleSafeArray
cosaSafeArray);
C++ tlb GetCurrentlyUsedCommunicationParameter(&bstrTitle, &bstrPar1, &bstrPar2, Ignore HRESULT
cosaSafeArray);
C# arIntParameter = GetCurrentlyUsedCommunicationParameter(ref strTitle, ref strPar1, object arIntParameter
ref strPar2);
VB.NET, VBA arIntParameter = GetCurrentlyUsedCommunicationParameter(strTitle, strPar1, ref
strPar2);

Example

17
TransparentMode
Sends and receives binary data to a PLC or GT panel.
Language Declarations
C++ ocx void TransparentMode(VARIANT pArrayWriteDataFromHost, long lBytes2Send, long lExpectResponseData, BSTR*
bstrError, VARIANT* varReadDataReturn);
C++ tlb HRESULT TransparentMode(VARIANT pArrayWriteDataFromHost, long lBytes2Send, long lExpectResponseData, BSTR*
bstrError, VARIANT* varReadDataReturn);
C# object TransparentMode(object pArrayWriteDataFromHost, int lBytes2Send, int lExpectResponseData, ref string strError);
VB.NET TransparentMode(object pArrayWriteDataFromHost, int lBytes2Send, int lExpectResponseData, ref string strError) As
Object
VBA TransparentMode(object pArrayWriteDataFromHost, int lBytes2Send, int lExpectResponseData, ref string strError)

pArrayWriteDataFromHost: write data bytes


lBytes2Send: number of bytes in pArrayWriteDataFromHost
lExpectResponseData: 0: do not wait for a reponse
1: wait for response

bstrError: empty if no error


reference: varReadDataReturn contains the PLC response if the parameter
lExpectResponseData = 1 or empty on error
return: PLC response if lExpectResponseData = 1 or NULL on error

Language Samples Comment


C++ ocx TransparentMode(cosaSafeArrayRequest, 100, 1, & bstrError, Use CComBSTR, COleSafeArray
cosaSafeArrayResponse); VARTYPE = VT_UI1
C++ tlb TransparentMode(cosaSafeArrayRequest, lCount, 1, & bstrError, Ignore HRESULT
cosaSafeArrayResponse);
C# objResponse = TransparentMode(btyRequest, 10, 0, ref strError); byte[] btyRequest
object objResponse
VB.NET, VBA objResponse = TransparentMode(btyRequest, 10, 0, strError); Dim btyRequest As Byte
Dim objResponse As String or
Dim objResponse As Object

18
Defines
Name Value
PLC errors
NO_FP_CONNECT_ERROR 0
ERROR_PORT_CLOSED -20001
ERROR_WRITEDATA_MISSING -20002
ERROR_STATIONNUMBER_OUT_OF_RANGE -20003
ERROR_DOWNLOAD_PLCCODE_MISSING -20004
ERROR_REGISTER_OUT_OF_RANGE -20005
ERROR_STRING_TO_LARGE -20006
ERROR_INVALID_LANGUAGE_CODE -20008
ERROR_INVALID_COMSETTING -20009
ERROR_COMSETTING_PORTISOPEN -20010
ERROR_COMSETTING_INVALID_SIZE -20011

FP File Import
ERROR_FP_INVALIDPATH -20012
ERROR_FP_NO_FP_FILE -20013
ERROR_FP_FILEOPEN -20014
ERROR_FP_INVALIDHEADER1 -20015
ERROR_FP_INVALIDHEADER2 -20016
ERROR_FP_INVALIDHEADER3 -20017
ERROR_FP_INVALIDVERSION -20018
ERROR_FP_PLC_NOTSUPPORTED -20019

FP File Import
ERROR_FP_INVALIDHEADER6 -20020
ERROR_SYSREG_FORMAT1 -20021
ERROR_SYSREG_FORMAT2 -20022
ERROR_SYSREG_FORMAT3 -20023
ERROR_PROGRAM_FORMAT1 -20025
ERROR_PROGRAM_FORMAT2 -20026
ERROR_PROGRAM_FORMAT3 -20027
ERROR_PROGRAM_FORMAT4 -20028
ERROR_PROGRAM_FORMAT5 -20029
ERROR_MACHINE_FORMAT1 -20030
ERROR_MACHINE_FORMAT2 -20031
ERROR_MACHINE_FORMAT3 -20032
ERROR_MACHINE_FORMAT4 -20033
ERROR_CONFIG_FORMAT1 -20034
ERROR_CONFIG_FORMAT2 -20035
ERROR_CONFIG_FORMAT3 -20036
ERROR_CONFIG_FORMAT4 -20037
ERROR_UPLOAD_PLCHEADER -20038
ERROR_PLCTYPE_MISMATCH -20039
ERROR_FPFILE_DOWNLOAD -20040
WARNING_PLC_STRING_SIZE -25001

19
Language
RESOURCE_CASE_JAPANESE 0
RESOURCE_CASE_ENGLISH 1
RESOURCE_CASE_CHINESE 2
RESOURCE_CASE_CHINESE_T 3
RESOURCE_CASE_KOREAN 4
RESOURCE_CASE_SPANISH 5
RESOURCE_CASE_ITALIAN 6
RESOURCE_CASE_GERMAN 7
RESOURCE_CASE_FRENCH 8

Port Open
OPEN_PLC 0
OPEN_GT 1
IDOK 1
IDCANCEL 2

Password
NEWPASSWORD 0
DELETEPASSWORD 1
PLC_LOGIN 2
PLC_LOGOUT 3
RESTRICTED_PLC e.g. login restricted PLC: RESTRICTED_PLC | PLC_LOGIN 8

PLC Mode
PLC_PROG_MODE 0
PLC_RUN_MODE 1

Transparent mode
TRANSPARENT_NO_RESPONSE 0
TRANSPARENT_RESPONSE 1

Communication Settings
COMSETTING_CNET 1
COMSETTING_USB 10
COMSETTING_MODEM 6
COMSETTING_ETHERNET 5

Type size
COMSETTING_CNET_SIZE 8
COMSETTING_USB_SIZE 3
COMSETTING_MODEM_SIZE 9
COMSETTING_ETHERNET_SIZE 9

Serial settings
COMSETTING_BAUD1200 0
COMSETTING_BAUD2400 1
COMSETTING_BAUD4800 2

20
COMSETTING_BAUD9600 3
COMSETTING_BAUD19200 4
COMSETTING_BAUD38400 5
COMSETTING_BAUD57600 6
COMSETTING_BAUD115200 7
COMSETTING_BAUD230400 8
COMSETTING_LENGHT7 7
COMSETTING_LENGHT8 8
COMSETTING_PARITY_NO 0
COMSETTING_PARITY_ODD 1
COMSETTING_PARITY_EVEN 2
COMSETTING_PARITY_NULL 3
COMSETTING_STOPBIT1 1
COMSETTING_STOPBIT2 2

Modem
COMSETTING_DIAL_PULS 0
COMSETTING_DIAL_TON 1
COMSETTING_DIAL_OTHER 2

Ethernet
COMSETTING_PC_IP_AUTOMATIC 1
COMSETTING_PC_IP_MANUAL 0
COMSETTING_USE_ET_LAN 1
COMSETTING_DONTUSE_ET_LAN 2
COMSETTING_ETHERNET_PORT_AUTO 0

Auto baudrate detection bits Can be ORed


COMSETTING_AUTODETECT_NO 0
COMSETTING_AUTODETECT_LENGHT 1
COMSETTING_AUTODETECT_PARITY 2
COMSETTING_AUTODETECT_BAUDRATE 8
COMSETTING_AUTODETECT_ALL 11

21
Samples
The setup installs samples for C++, C#, VB.NET, Excel and PowerPoint.

1. C++
a. COMAndCPP: Dialog application which inserts FP_CONNECT.OCX to the dialog
b. CPPTlbSamples: Dialog application. Shows how to dynamically create FP Connect.

2. .NET
a. CSharp: Comprehensive .NET dialog application shows all functions
b. Multithreaded: Concurrent communication with multiple FP Connect instances
c. VB.Net: Dialog application

3. Office VBA
a. Powerpoint: OCX embedded in a slide
b. Excel OCX embedded in a sheet

Getting Started
We strongly recommend using one of the samples that have been provided. The samples are ready-to-run and
provides a flying start.

.NET
The C# example has no COM overhead, is easy to understand and shows all functions.

For Microsoft Visual Studio 2008 and higher do the following:

1. Add the control to References


2. Add commonHostAndOCXIDs to your project folder and project files tree as shown below.

reference to FP connect

Important Compiler setting


If the .NET project is running on a 64-bit operating systems (x64), select “x86” as your platform. Projects running
on 32-bit systems (x86) can be left on “Any”. The wrong settings may lead to an application crash or unexpected
behaviour!

OS (x64)

22
C++

FP_CONNECT.ocx
A C++ user must decide how they would like to add FP Connect to their application. The easiest way to add the
control is to embed it in a dialog or dialog application. The IDE automates creates all required code and files. A
disadvantage is that new functions included in future control updates must be added manually to an existing
project, however. Please see CPPCOM.sln example

FP Connect.tlb
The preferred method is to use the FP Connect Type Library (tlb) file. This file contains all declarations and needs
only to be copied to the project folder. The FP Connect instance must be created at runtime to be usable and
destroyed if the hosting application shuts down. This method is a safe way to test if the control is registered, as an
unregistered control can crashes the application if used. Please test CPPTlbSamples.sln example

VBA Office
In general the MS Office default setting is “do not allow” ActiveX controls. This is the reason why we have not
inserted the FP Connect ActiveX in the Excel sheet or PowerPoint slide. The Excel and PowerPoint example
instructs the user how to change the MS Office security settings for ActiveX controls and how to add
FP_CONNECT.OCX. Please use Office VBA Excel.xls or Office VBA PowerPoint.ppt example

OCX Updates
A new FP Connect version can be installed by running the FP Connect setup. However, in OEM products it might
be more convenient to use the following procedure:

i. Unregister the existing FP_CONNECT.ocx


ii. Copy the new FP_CONNECT.ocx to your system folder

a. Windows\system32 for x86 systems


b. Windows\WOW64 for x64 systems

iii. Register the new control with regsvr32 FP_CONNECT.ocx.


iv. New ocx functionality require either a manual update of the new functions in the existing declaration files if
the control is embedded in a dialog, or simply by replacing the existing tlb.

Limitations
1. The samples do not validate the correctness of register names, addresses, write data and, in case of a
program download, the PLC type!

2. For the sake of simplicity Multi-Read commands show only the first read register on the GUI.
Example: ReadINT (… DT0, count = 10…) Register DT0 to DT9 is read and available in object “objReturn”,
but only DT0 is shown.

3. Multi-Write commands write the same value to all consecutive registers.


Example: WriteREAL (..DT10, count=5, data=1.34,…) writes 1.34 to DT10,…,DT14

4. WriteBits must use 0 for FALSE and 1 for TRUE

23
Supported Devices

PLCs: FP0, FP0R, FP-SIGMA (read/write Flash), FP-X, FP2, FP2SH


GT Panels: GT01, GT02, GT03, GT05, GT11, GT12, GT21, GT32/E

DISCLAIMER OF WARRANTY
This source code is provided "as is" and without warranties as to performance or merchantability. The author
and/or distributors of this source code may have made statements about this source code. Any such statements do
not constitute warranties and shall not be relied on by the user in deciding whether to use this source code. This
source code is provided without any express or implied warranties whatsoever. Because of the diversity of
conditions and hardware under which this source code may be used, no warranty of fitness for a particular purpose
is offered. The user is advised to test the source code thoroughly before relying on it. The user must assume the
entire risk of using the source code examples.

24

You might also like