『7x24小时有问必答』
前言
       今天继续来分享Codesys下的一个常规交互方式 -  共享内存。我大概说一下,现在的Codesys的运动控制器大部分跑的是Ubuntu + RT的方式,那么既然是操作系统,那就一定有内存加载这个东西。我们的控制程序其实就是一个App,那么其他的App只要可以访问到内存中共享出来的句柄即可,在传统的通信效率上节省很多。
正文
开始干货分享。
1.加载SysShm  Implementation
2. Code Show
2.1 Write  
PROGRAM Pro_WriteVAR      UiSize          : __UXINT :=  200;      CreateResult : SysShm_Implementation.RTS_IEC_RESULT;      SMHandler      : SysShm_Implementation.RTS_IEC_HANDLE;      WriteResult   : SysShm_Implementation.RTS_IEC_RESULT;      ReadResult    : SysShm_Implementation.RTS_IEC_RESULT;      CloseResult   : SysShm_Implementation.RTS_IEC_RESULT;      StrVal          : STRING;      StrData         : STRING;      bWrite          : BOOL;      bRead            : BOOL;END_VARIF bWrite THEN      //创建      SMHandler :=  SysSharedMemoryCreate(pszName:=  'AppShareMemory', ulPhysicalAddress:=  0, pulSize:=  ADR(UiSize), pResult:=  ADR(CreateResult));      //写入      SysSharedMemoryWrite(            hShm       := SMHandler,              ulOffset :=  0,              pbyData   :=  ADR(StrVal) ,              ulSize    :=  SIZEOF(StrVal),              pResult   :=  ADR(WriteResult) );      //关闭            CloseResult :=  SysSharedMemoryClose(hShm:= SMHandler);         bWrite         := FALSE ;END_IF ;
2.2 Read
PROGRAM Pro_ReadVAR      UiSize          : __UXINT :=  200;      CreateResult : SysShm_Implementation.RTS_IEC_RESULT;      SMHandler      : SysShm_Implementation.RTS_IEC_HANDLE;      WriteResult   : SysShm_Implementation.RTS_IEC_RESULT;      ReadResult    : SysShm_Implementation.RTS_IEC_RESULT;      CloseResult   : SysShm_Implementation.RTS_IEC_RESULT;      StrVal          : STRING;      StrData         : STRING;      bWrite          : BOOL;      bRead            : BOOL;END_VARIF bRead THEN      //创建      SMHandler :=  SysSharedMemoryCreate(pszName:=  'AppShareMemory', ulPhysicalAddress:=  0, pulSize:=  ADR(UiSize), pResult:=  ADR(CreateResult));      //打开      SMHandler :=  SysSharedMemoryOpen2(pszName:=  'AppShareMemory', ulPhysicalAddress:=  0, pulSize:=  ADR(UiSize), pResult:=  ADR(CreateResult));      //读取      SysSharedMemoryRead(            hShm       := SMHandler,              ulOffset :=  0,              pbyData   :=  ADR(StrData),              ulSize    :=  SIZEOF(StrData) ,              pResult   :=  ADR(ReadResult));           //关闭            CloseResult :=  SysSharedMemoryClose(hShm:= SMHandler);         bRead          := FALSE ;END_IF ;
3. App Run
因为今天已经是春节假期的开始,家里只剩下东莞摩昇的控制器。原本是想用之前山东易码科技的那个一体机的(因为他的硬件采用的是昆仑通态的触摸屏,然后在软件上做了适配,可以用QT进行界面的二次开发。用QT下的C++来实现共享内存的交互,界面效果可以做的很好看。)回头我找时间再做进一步的这方面的分享。
其实通过上图可以看到,现在的控制器上是可以跑多个App的程序的。然而实际硬件的内存其实只有一个。通过这种方式的交互,在视觉的项目中,其实可以很高效的实现Pass和NG的信号传输。
*不过,需要注意的是,不可同一时间对同一个内存句柄进行写入。
结尾
      更多功能块的使用,有需要可多交流。(春节假期,不要浪费大家陪家人的时光,文献会适当的简短。)点个关注,不迷路~

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码