Codesys在Linux通过SharedMemory共享内存与Qt程序交互

概述

Linux下的SharedMemory有多种共享内存的操作方式。

Codesys的SharedMemory 是 POSIX 方式。简而言之是,在/dev/shm生成一个文件(文件名称为key值),来供其他进程访问。

而Qt的SharedMemory则提供2种方式, System V 和 POSIX 。 其中如果没有在Configure设置POSIX,一般默认是System V。

因此,默认情况下,qt的QSharedMemory访问不了Codesys的SharedMemory。因为共享内存的方式不一样。

既然 POSIX 方式 就是在/dev/shm生成文件,那qt想要访问Codesys的SharedMemory,那就Qfile去操作Codesys存在/dev/shm的文件即可。

Codesys的ST代码

(*
#@Copyright:
#@License:
#@Birth:            created by Along on 2023-08-12
#@Content:          Shm_PRG-共享内存读写
#@Version:          0.0.1
#@Revision:         last revised by Along on 2023-08-12
#@brief            	共享内存读写
#@output           
    
*)


PROGRAM Shm_PRG
VAR
	
handle_shmm_create				:SysShm.RTS_IEC_HANDLE;				//create函数输出的handle
result_shmm_create				:SysShm.RTS_IEC_RESULT;				//create函数输出的result

result_shmm_write				:SysShm.RTS_IEC_RESULT;				//write函数输出的result
result_shmm_read				:SysShm.RTS_IEC_RESULT;				//read函数输出的result

mem_str_key						:STRING:='codesys_shm';				//共享内存的key字符串

ui_SharedMemorySizeCreate		:UINT;								//create反馈的size

info_read						:Stru_Info;							//共享内存的读取的结构体实例

END_VAR


(*

RTS_IEC_RESULT 的值 是 CmpErrors2 Interfaces Library 的 Errors枚举体.

*)


//获取或打开 共享内存的handle。 开机时创建,后面打开。create函数本身 是创建或打开。
handle_shmm_create := SysSharedMemoryCreate(pszName:= mem_str_key, ulPhysicalAddress:= 0, pulSize:= ADR(ui_SharedMemorySizeCreate), pResult:= ADR(result_shmm_create) );

//共享内存的读函数
SysSharedMemoryRead(
		hShm:= handle_shmm_create, 
		ulOffset:= 0, 
		pbyData:= ADR(info_read), 
		ulSize:= glvars.ui_SharedMemorySize, 
		pResult:= ADR(result_shmm_read)
		);

//判断读取共享内存的数据的流向值。
IF info_read.flow = 1 THEN
// info_read.flow = 1 = 上位机程序更新后

	//把共享内存的值覆盖自己的info
	glvars.info_data := info_read;
	
	//修改内存流向标志位	
	glvars.info_data.flow := 0;
	
END_IF

//把改后的值,往内存写入
	SysSharedMemoryWrite(
		hShm:= handle_shmm_create, 
		ulOffset:= 0, 
		pbyData:= ADR(glvars.info_data), 
		ulSize:= glvars.ui_SharedMemorySize, 
		pResult:= ADR(result_shmm_write)
		);

//关闭hande,释放
SysSharedMemoryClose(hShm:= handle_shmm_create);
	




命令行截图

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CODESYS是一种用于编程控制系统的综合开发环境,而C是一种通用的高级编程语言。 CODESYS是一款广泛应用于工业自动化领域的开发工具,它提供了一个集成的开发环境,可以用来编写、调试和测试PLC控制器程序CODESYS具有丰富的功能,包括图形化编程界面,强大的调试工具,灵活的网络通讯功能等。同时,CODESYS还支持多种编程语言,如结构化文本语言(ST)、功能块图(FBD)等。通过CODESYS,开发人员可以轻松地创建具有高度可靠性和灵活性的控制系统。 而C语言是一种通用的高级编程语言,广泛应用于嵌入式系统开发、操作系统内核等领域。C语言以其简洁而强大的语法,成为了编程界的事实标准。C语言提供了丰富的语法和库函数,方便开发人员进行底层编程,通过C语言可以直接访问硬件资源,进行底层控制和优化。C语言还具有较高的可移植性,可以在不同的平台上进行开发和调试。 CODESYS与C语言在某些方面有相似之处,如都可以用于嵌入式系统开发,可以编写控制算法、数据处理等。但CODESYS在工业自动化领域中更为广泛应用,提供了更加丰富的编程语言和工具,而C语言则具有更高的灵活性和可移植性。 总的来说,CODESYS和C语言都是非常有用的工具,在不同的领域中有不同的应用。CODESYS适用于工业自动化领域的控制系统开发,而C语言则适用于各种嵌入式系统和底层编程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值