Mit dem Devlink komm ich mit allen 3 Beispielen nicht klar. Die Sache mit dem FileIO hört sich einfacher an, werde die Steuerung gleich ebend wieder anschließen und schauen, ob es machbar ist.
In der sysconf.br bin ich, wie bestimme ich den Pfad? Bzw. wie sollte er heißen?
Wäre der Pfad so richtig
/DEVICE=IF4.ST1
Habe es mit folgenden Beispiel aus der Hilfe versucht: Beispiel 1
AsUSB - Beispiel 1 in ANSI C
Beispielbeschreibung
Unterstützung eines SanDisk USB Sticks an einem beliebigen USB Port
Code:
/* //////////////////////////////////////////////////////////////////// INCLUDES
////////////////////////////////////////////////////////////////// */
#include <bur/plc.h>
#include <bur/plctypes.h>
#define _REPLACE_CONST
#include <asusb.h>
#include <fileio.h>
#include <string.h>
/* //////////////////////////////////////////////////////////////////
// DEFINES
////////////////////////////////////////////////////////////////// */
#define OK 0
#define FALSE 0
#define TRUE 1
#define MAXUSBDEVICES 32
#define SANDISK_VENDOR_ID 0x0781
#define SANDISK_PRODUCT_ID 0x7105
#define SANDISK_BCD 0x1033
#define USB_GETNODELIST 1
#define USB_SEARCHDEVICE 2
#define USB_DEVICELINK 3
#define USB_DEVICEUNLINK 4
#define USB_FILEACCESS 5
#define MSDEVICE "MS_DEVICE"
#define PARAMDEVICE "/DEVICE="
/* //////////////////////////////////////////////////////////////////
// DECLARATION
////////////////////////////////////////////////////////////////// */
_LOCAL UsbNodeListGet_typ UsbNodeListGetFub;
_LOCAL UsbNodeGet_typ UsbNodeGetFub;
_LOCAL usbNode_typ usbDevice;
_LOCAL DevLink_typ DevLinkFub;
_LOCAL DevUnlink_typ DevUnlinkFub;
_LOCAL DirInfo_typ DirInfoUsbDev;
_LOCAL BOOL enable,deviceLinked;
_LOCAL UINT status;
_LOCAL UDINT usbAttachDetachCount;
_LOCAL UINT usbAction,usbNodeIx;
_LOCAL UDINT usbNodeList[MAXUSBDEVICES];
_LOCAL UDINT usbNodeId;
_LOCAL char szDevParamName[asusb_DEVICENAMELENGTH+sizeof(PARAMDEVICE)];
/* //////////////////////////////////////////////////////////////////
// INIT UP
////////////////////////////////////////////////////////////////// */
_INIT void init(void)
{
usbAttachDetachCount = 0;
usbNodeIx = 0;
/* usbAction = USB_GETNODELIST; */
}
/* //////////////////////////////////////////////////////////////////
// CYCLIC TASK
////////////////////////////////////////////////////////////////// */
_CYCLIC void cyclic(void)
{
switch (usbAction)
{
case USB_GETNODELIST:
UsbNodeListGetFub.enable = 1;
UsbNodeListGetFub.pBuffer = (UDINT)&usbNodeList;
UsbNodeListGetFub.bufferSize = sizeof(usbNodeList);
UsbNodeListGetFub.filterInterfaceClass = asusb_CLASS_MASS_STORAGE;
UsbNodeListGetFub.filterInterfaceSubClass = asusb_SUBCLASS_SCSI_COMMAND_SET;
UsbNodeListGet(&UsbNodeListGetFub);
if (UsbNodeListGetFub.status == OK && UsbNodeListGetFub.listNodes)
{
/* USB Device Attach or detach */
usbAction = USB_SEARCHDEVICE;
usbNodeIx = 0;
usbAttachDetachCount = UsbNodeListGetFub.attachDetachCount;
}
else if (UsbNodeListGetFub.status == asusbERR_BUFSIZE
|| UsbNodeListGetFub.status == asusbERR_NULLPOINTER)
{
/* Error Handling */
}
break;
case USB_SEARCHDEVICE:
UsbNodeGetFub.enable = 1;
UsbNodeGetFub.nodeId = usbNodeList[usbNodeIx];
UsbNodeGetFub.pBuffer = (UDINT)&usbDevice;
UsbNodeGetFub.bufferSize = sizeof(usbDevice);
UsbNodeGet(&UsbNodeGetFub);
if (UsbNodeGetFub.status == OK )
{
/* SanDisk ? */
if (usbDevice.vendorId == SANDISK_VENDOR_ID
&& usbDevice.productId == SANDISK_PRODUCT_ID
&& usbDevice.bcdDevice == SANDISK_BCD)
{
/* SanDisk found */
strcpy(szDevParamName,PARAMDEVICE);
strcat (szDevParamName,usbDevice.ifName);
usbNodeId = usbNodeList[usbNodeIx];
usbAction = USB_DEVICELINK;
}
else
{
usbNodeIx++;
if (usbNodeIx >= UsbNodeListGetFub.allNodes)
{
/* USB Device not found */
usbAction = USB_GETNODELIST;
}
}
}
else if (UsbNodeGetFub.status == asusbERR_USB_NOTFOUND)
{
/* USB Device not found */
usbAction = USB_GETNODELIST;
}
else if (UsbNodeGetFub.status == asusbERR_BUFSIZE
|| UsbNodeGetFub.status == asusbERR_NULLPOINTER)
{
/* Error Handling */
}
break;
case USB_DEVICELINK:
DevLinkFub.enable = 1;
DevLinkFub.pDevice = (UDINT)MSDEVICE;
DevLinkFub.pParam = (UDINT)szDevParamName;
DevLink(&DevLinkFub);
if (DevLinkFub.status == OK)
{
usbAction = USB_FILEACCESS;
deviceLinked = TRUE;
}
break;
case USB_DEVICEUNLINK:
DevUnlinkFub.enable = 1;
DevUnlinkFub.handle = DevLinkFub.handle;
DevUnlink(&DevUnlinkFub);
if (DevUnlinkFub.status == OK)
{
usbAction = USB_GETNODELIST;
deviceLinked = FALSE;
}
break;
case USB_FILEACCESS:
/* Check USB Device */
UsbNodeGetFub.enable = 1;
UsbNodeGetFub.nodeId = usbNodeId;
UsbNodeGetFub.pBuffer = (UDINT)&usbDevice;
UsbNodeGetFub.bufferSize = sizeof(usbDevice);
UsbNodeGet(&UsbNodeGetFub);
if (UsbNodeGetFub.status == OK )
{
/* File Access */
DirInfoUsbDev.enable = 1;
DirInfoUsbDev.pDevice = (UDINT)MSDEVICE;
DirInfoUsbDev.pPath = 0;
DirInfo(&DirInfoUsbDev);
}
else if (UsbNodeGetFub.status == asusbERR_USB_NOTFOUND)
{
/* USB Device detached */
usbAction = USB_DEVICEUNLINK;
}
default:
break;
}
}
Der haut mir den Compiler entsprechend so um die Ohren. Im Einsatz ist ein Sandisk Cruzer. (nicht von B+R bezogen). Das Mapping hab ich auf IF.ST1 gelegt, wo der USB Stick steckt.
Code:
[...]C:/Users/sschultewolter/Desktop/Daro/Automation Studio/daro_2013_04_22/Temp/Objects/Config1/PLC1/NewProgra1.br : Error 6024: Unknown PV usbNodeId
Building configuration object "iomap" ...
No relevant changes.
Generating transfer list...
Error 430: Unable to open file C:\Users\sschultewolter\Desktop\Daro\Automation Studio\daro_2013_04_22\Binaries\Config1\PLC1\NewProgra1.br
Build: 2 error(s), 0 warning(s)