基于低代码控制系统共享内存使用,C#共享内存实现
共享内存
创建共享内存及设定访问权限,创建方法可能不同。
共享内存地址是否正确,进程通讯问题:命名管道、共享内存、信号量等不同方式进行通信,需要选择相同的IPC机制。
共享内存是一种进程间通信(Inter-Process Communication, IPC)的方式,使得多个进程可以访问同一块内存区域。共享内存的实现方法主要有以下几种:
1、基于文件映射的共享内存:这种方法将一个文件映射到共享内存。当进程需要访问共享内存时,它会像访问文件一样访问该内存区域。这种方法的优点是实现简单,并且可以跨平台使用。常见的系统调用包括 mmap()(在UNIX和类UNIX系统中)和 CreateFileMapping()(在Windows中)。
2、基于共享库的共享内存:这种方法通过将共享内存作为共享库来访问。当进程需要访问共享内存时,它会像调用库函数一样调用该内存区域。这种方法的优点是可以利用操作系统的共享库功能,缺点是需要在运行时动态加载库。
3、基于管道的共享内存:这种方法使用管道(pipe)作为共享内存。进程可以通过读写管道来交换数据。这种方法的优点是实现简单,但是只能用于两个进程之间的通信。
4、基于消息队列的共享内存:这种方法使用消息队列作为共享内存。进程可以通过发送和接收消息来交换数据。这种方法的优点是实现简单,但是只能用于两个进程之间的通信。
5、基于套接字的共享内存:这种方法使用套接字作为共享内存。进程可以通过读写套接字来交换数据。这种方法的优点是实现简单,但是只能用于两个进程之间的通信。
以上就是共享内存的几种实现方法,每种方法都有其优缺点,适用于不同的场景。
基于文件映射的共享内存可以实现两个进程或多个进程之间的数据共享交互,且与开发语言无关,跨平台应用程序数据交互。本次使用低代码控制系统原本拥有的功能采用该方法C#控制台程序来简要介绍一下使用方法。
低代码控制系统中
低代码系统创建共享内存,共享内存命名有效时,将所有变量放入共享内存中。多工站系统服务器与各工站之间都可以创建共享内存命名提供交互,实现对全部低代码普通变量交互,注意命名不要冲突。共享内存命名在Ctrl_Teach.txt文件中自定命名,有命名时将所有变量放入共享内存;依据需求是否读取创建的共享内存。

C#实现共享内存读写交互例程案例:
共享内存可以指示内存起始地址偏移量及个数,注意低代码每个变量为8字节浮点数,读写共享内存操作,0为起始地址。

低代码系统中共享变量(全局变量)创建共享内存读写实现,共享内存命名在Ctrl_Mtn.txt文件中,配置有效命名后即可同样实现将所有共享变量放入共享内存中。


内存映射文件,C#基于文件映射的共享内存实现方法。
共享内存创建方实现:C#创建共享内存,持续写入,实现数据共享。
//创建共享内存
MemoryMappedFile shareMemory = MemoryMappedFile.CreateOrOpen("Station_1", size);
//可随机访问的内存块。
MemoryMappedViewAccessor stream = shareMemory.CreateViewAccessor(0, size);
//内存流。调用Write按顺序依次写入,不可超出容量。
var stream = shareMemory.CreateViewStream(0, size);
共享内存读取(打开)方实现:可以自定义读取数据与写入数据。
//打开共享内存
MemoryMappedFile shareMemory = MemoryMappedFile.OpenExisting("Station_1");
//可随机访问的内存块。
MemoryMappedViewAccessor accessor = shareMemory.CreateViewAccessor(0, 8 * 10000);
//内存流。调用Read按顺序依次读取。
var accessor = shareMemory.CreateViewStream(0, 8 * 10000);
通过以上描述,我们就可以在同一设备中采用C#开发的进程应用等通过共享内存的方法实现对低代码控制系统的读写交互,可以实现二次开发。共享内存由操作系统分配实现,非常便捷。应用于视觉开发,界面设计,上位机开发等场景。
