Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Shared Mem

2014-11-20
2017-01-06
  • tomatensaft - 2014-11-20

    Hallo,

    Ist es möglich vom Plc-System eine Kommunikation über den Shared-Mem einer C-Applikation auszubauen ?
    Hab ein paar C-Applikationen die Daten von verschiedenen Datenquellen zur Verfügung stellen können und diese würde ich gerne ins Plc-System übertragen.

    Thx

     
  • eschwellinger

    eschwellinger - 2014-11-20

    Hallo Marco,

    auch das:

    \#include <stdio.h>
    \#include <stdlib.h>
    \#include <sys/mman.h>
    \#include <sys/stat.h>
    \#include <fcntl.h>
    \#include <string.h>
    int main(int argc, char **argv)
    {
       char buf[128]={0};
       void *pMemory;
       int fd = shm_open("mymemory", O_CREAT | O_RDWR, S_IRWXU | S_IRWXG);
       ftruncate(fd, 1024);
       pMemory = mmap(0, 1024, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
       close(fd);
       memset(pMemory,0x41,16);
       do
       {
          sleep(5);
       }while(getchar()!=0x61);
       munmap(pMemory,1024);
       shm_unlink("mymemory");
       exit(0);
    }
    

    das auf dem Pi übersetzen mit

    gcc -o sharedmem.bin myshm.c -lrt
    

    dann starten

    root@raspberrypi:~# ./sharedmem.bin
    

    mit dem CODESYS Projekt einloggen... starten.

    Siehe scennshot CODESYS den sharedmem Bereich
    den kannst du dann unter Linux kontrollieren mit

    sudo cat /dev/shm/mymemory
    

    Grüße
    Edwin

    IMG: CDS_LINUX_SHARED.png

    IMG: check.png

    IMG: gcc.png

    SharedMemLinuxPiSP5.project [170.76 KiB]

    myshm.c [496 Bytes]

     
  • tomatensaft - 2014-11-22

    Hallo Edwin,

    genau das hab ich gesucht - das werde ich nächste Woche gleich probieren.

    Vielen Dank

     
  • tomatensaft - 2015-01-20

    Guten Morgen,

    hatte letzte Woch mal kurz Zeit und wollte das ausprobieren - leider ohne Erfolg.

    Im Beispiel wir der shm mit "mymemory" bezeichnet und sollte ja somit auch in der PLC-Runtime mit diesem Namen ansprechbar sein, oder ?
    Wenn ich mit beiden Programmen auf den gleichen mem zugreife dann bekomme ich auf dem Raspi immer Speicherzugriffsfehler ?

    Hab ich da Übersehen ?

    Danke & Gruß
    Marco

     
  • eschwellinger

    eschwellinger - 2015-01-20

    Hallo Marco,

    du hattest recht, ich habe das CODESYS Projekt angepasst,
    und ne detailierte Beschreibung hinzugefügt...!
    Siehe oben meine erste Antwort mit Screenshots usw.
    l viewtopic.php?f=18&t=4711&p=15255#p15120 l

    Grüße
    Edwin

     
  • tomatensaft - 2015-01-22

    Hallo Edwin,

    danke für die Anpassungen.

    Soweit hatte ich mir das auch schon angepasst - hab nur einen blöden Fehler gemacht -> habs nicht als su ausgeführt.
    Aber Danke - Funktioniert alles Top.

    Danke & Gruß
    Marco

     
  • ffares - 2016-06-09

    hallo Edwin,
    nach dem Übersetzen habe ich immer noch einen Fehler " Bezeichner pCounter nicht definiert", obwohl dieser schon als global Var mit " pCounter : POINTER To Byte := ADR(counter); " deklariert ist.

    was konnte bitte noch fehlen??
    in der hochgeladenen Datei können Sie auch die eingefügten Bibliotheken sehen.

    Gruß

    IMG: libraries.PNG

    IMG: bug in file.PNG

     
  • eschwellinger

    eschwellinger - 2016-06-13

    Hi,
    Pi mit rechtsclick aktualisieren und aktuelleCompilerversion / Visuprofil setzen.

    Grüße
    Edwin

    SharedMemLinuxPiSP9.project [60.08 KiB]

     
  • NetFritz - 2017-01-05

    Hallo
    Ich habe mir "Shared Memory Communication" Beispiel runter geladen und installiert.
    http://store.codesys.com/shared-memory-communication.html
    Die Datei "myshm.c" habe ich mit "gcc myshm.c -o myshm -lrt" compiliert.
    In "myshm.c" steht als Dateiname:

    char sSharedMemReadName[100] = "_CODESYS_SharedMemoryTest_Write"; 
    char sSharedMemWriteName[100] = "_CODESYS_SharedMemoryTest_Read";
    

    drin.
    Unter /dev/shm werden 2 Dateien angelegt wenn ich myshm starte:

    _CODESYS_SharedMemoryTest_Read
    _CODESYS_SharedMemoryTest_Write
    

    Im Shared Memory.project wird aber in der Read_App und Write_App in der
    Variable szName "MySharedMemory" angelegt.
    Ist das so richtig?
    Oben im Beispiel wird im C Programm und im Project der gleiche Name verwendet.
    Gruß NetFritz

     
  • NetFritz - 2017-01-06

    Hallo
    Entschuldigung irgendwie ist mir das Falsche Project dazu rein gerutscht.
    Das richtige Project ist "SharedMemoryExampleExt.project".
    Gruß NetFritz

     

Log in to post a comment.