7,763
社区成员
发帖
与我相关
我的任务
分享
Public Class Form1
Dim MF_PLC_TO_SCADA As System.IO.MemoryMappedFiles.MemoryMappedFile 'MemoryMappedFile 内存映射文件对象
Dim MF_SCADA_TO_PLC As System.IO.MemoryMappedFiles.MemoryMappedFile 'MemoryMappedFile 内存映射文件对象
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
'MemoryMappedFile.CreateNew 获取表示非持久化内存映射文件的 MemoryMappedFile 对象(未与磁盘上的文件关联)
'参数1:要分配给内存映射文件的名称。
'参数2:要分配给内存映射文件的最大大小(以字节为单位)。
MF_PLC_TO_SCADA = MF_PLC_TO_SCADA.CreateNew("SYSIO_PLC_TO_SCADA", 10) '在主共享进程中创建一个非常驻的内存映射文件,其大小为5000字节
MF_SCADA_TO_PLC = MF_SCADA_TO_PLC.CreateNew("SYSIO_SCADA_TO_PLC", 10) '在主共享进程中创建一个非常驻的内存映射文件,其大小为5000字节
Me.Timer1.Interval = 500
End Sub
Private Sub Button_START_R_Click(sender As Object, e As EventArgs) Handles Button_START_R.Click
Me.Timer1.Enabled = True
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button_SEND.Click
Dim buf(10) As Byte
Dim ms As System.IO.MemoryMappedFiles.MemoryMappedViewStream '内存映射文件的视图流
ms = MF_PLC_TO_SCADA.CreateViewStream()
Dim Gsz_S As Int32 '定义一个Int32类型的数据
Gsz_S = Me.TextBox_SEND.Text
buf = BitConverter.GetBytes(Gsz_S) '将这个数据转化为 字节数组
ms.Write(buf, 0, buf.Length) '向内存映射文件写入信息
'字节数组,从该字节数组将字节复制到当前流中
'缓冲区中的偏移量,从此处开始将字节复制到当前流中。
'要写入当前流的字节数。
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Try
Dim buf() As Byte = {0, 0, 0, 0, 0} '定义一个字节数组
Dim ms As System.IO.MemoryMappedFiles.MemoryMappedViewStream
ms = MF_SCADA_TO_PLC.CreateViewStream()
Me.TextBox_ReadView_Length.Text = ms.Length()
ReDim buf(ms.Length())
ms.Read(buf, 0, buf.Length) '读取该映射文件中的指定内容
Me.TextBox_Read.Text = BitConverter.ToInt32(buf, 0)
Catch ex As Exception
MessageBox.Show(ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
End Class
Public Class Form1
Dim MF_PLC_TO_SCADA As System.IO.MemoryMappedFiles.MemoryMappedFile 'MemoryMappedFile 内存映射文件对象
Dim MF_SCADA_TO_PLC As System.IO.MemoryMappedFiles.MemoryMappedFile 'MemoryMappedFile 内存映射文件对象
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
'在系统内存中打开一个具有指定名称的现有内存映射文件。
MF_PLC_TO_SCADA = MF_PLC_TO_SCADA.OpenExisting("SYSIO_PLC_TO_SCADA") '打开一个内存中已经存在的映射,也就是主共享进程中创建的内存映射文件
MF_SCADA_TO_PLC = MF_SCADA_TO_PLC.OpenExisting("SYSIO_SCADA_TO_PLC") '打开一个内存中已经存在的映射,也就是主共享进程中创建的内存映射文件
Me.Timer1.Interval = 500
End Sub
Private Sub Button_START_R_Click(sender As Object, e As EventArgs) Handles Button_START_R.Click
Me.Timer1.Enabled = True
End Sub
#Region "接受"
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Try
Dim Ms_length As Int64 = 0
Dim buf() As Byte '这是一个字节数组,用于存储从映射内存返回的数据
Dim ms As System.IO.MemoryMappedFiles.MemoryMappedViewStream '这个内存数据流
ms = MF_PLC_TO_SCADA.CreateViewStream() '给这个内存数据流赋值
Ms_length = ms.Length()
ReDim buf(Ms_length)
ms.Read(buf, 0, buf.Length) '读取该映射文件中的指定内容 将指定数量的字节读入指定的数组
Me.TextBox_R.Text = BitConverter.ToInt32(buf, 0)
Catch ex As Exception
MessageBox.Show(ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
#End Region
#Region "发送"
Private Sub Button_SEND_Click(sender As Object, e As EventArgs) Handles Button_SEND.Click
Dim buf(10) As Byte
Dim ms As System.IO.MemoryMappedFiles.MemoryMappedViewStream '内存映射文件的视图流
ms = MF_SCADA_TO_PLC.CreateViewStream()
Dim Gsz_S As Int32 '定义一个Int32类型的数据
Gsz_S = Me.TextBox_SEND.Text
buf = BitConverter.GetBytes(Gsz_S) '将这个数据转化为 字节数组
ms.Write(buf, 0, buf.Length) '向内存映射文件写入信息
End Sub
#End Region
End Class