鍏变韩鍐呭瓨 - C#涓嶤oDeSys閫氳: SharedMemoryCommunication.package_鍏变韩鍐呭瓨 - C#涓嶤oDeSys閫氳 - 閰峰痉缃 - CoDeSys杞欢鏁欑▼涓嬭浇,CoDeSys宸ユ帶璧勮闂ㄦ埛

閰峰痉缃

HSC6490-cn涓浗鍒堕狅紝涓浗鑺瘇
鎼滅储闄勪欢  
閰峰痉缃 闄勪欢涓績 CODESYS璧勬簮涓嬭浇鍖 CODESYS鏁欑▼鏂囨。 鍏变韩鍐呭瓨 - C#涓嶤oDeSys閫氳: SharedMemoryCommunication.package

鍏变韩鍐呭瓨 - C#涓嶤oDeSys閫氳: SharedMemoryCommunication.package

 

鍏变韩鍐呭瓨 - C#涓嶤oDeSys閫氳:
娴嬭瘯鐜锛
1銆丆ODESYS 3.5.13.0锛堟柊寤篊odesys_ShareMemory椤圭洰锛
2銆丼haredMemoryCommunication.package锛圕odesysy鍏变韩鍐呭瓨搴擄級
閾炬帴锛https://pan.baidu.com/s/1JM0RXUR8h1L5UE2pVhY4BQ
鎻愬彇鐮侊細ql7w


3銆乂isual Studio2015锛堟柊寤篊#_ShareMemory椤圭洰锛
涓銆佸叡浜唴瀛樻蹇
1銆侀【鍚嶆濅箟锛屽叡浜唴瀛樺氨鏄缓绔嬩竴鍧椾緵鍗忎綔杩涚▼鍏变韩鐨勫唴瀛樺尯鍩燂紝澶氫釜杩涚▼鍙互閫忚繃姝ゅ叡浜尯鍩熻鍙栨垨鑰呭啓鍏ユ暟鎹潵浜ゆ崲淇℃伅锛
2銆侀氫俊绀烘剰鍥撅細
浜屻丆oDeSys绋嬪簭
1銆佹坊鍔犲簱鏂囦欢
路 SysShm,3.5.8.0 (System)
路 SysTypes2 Interfaces,3.5.4.0 (System)
1锛夋墦寮搴撶鐞嗗櫒锛圠ibrary Manager锛,閫夋嫨鈥滄坊鍔犲簱锛圓dd Library锛夆,鐐光滈珮绾э紙Advanced...锛夆;
2锛夊湪鎼滅储妗嗭紙String for a fulltext search...锛変腑鍒嗗埆杈撳叆SysShm鍜孲ysTypes鎼滅储娣诲姞SysShm,3.5.8.0 鍜孲ysTypes2 Interfaces,3.5.4.0 ,
閫変腑鎼滅储鍒扮殑搴擄紝鐐光淥K鈥濈‘璁ゆ坊鍔狅紝
娣诲姞瀹屾垚鍗冲彲鍦ㄥ簱绠$悊鍣紙Library Manager锛変腑鏌ョ湅鍒般
搴撴枃浠朵粙缁嶏細

2銆佸垱寤烘暟鎹粨鏋
鍏变韩鍐呭瓨杩涜鏁版嵁鍏变韩浜や簰闇瑕侀氳繃鏁版嵁缁撴瀯鏉ヨ繘琛屻
閫変腑搴旂敤锛圓pplication锛夊彸閿坊鍔犲璞★紙Add Object锛,閫夋嫨鈥淒UT鈥濓紝
鍒涘缓鏁版嵁缁撴瀯锛岃緭鍏ユ暟鎹粨鏋勫悕绉帮紝閫夋嫨绫诲瀷锛圱ype锛夛紝鐐光淎dd鈥
鏈緥鍒嗗埆鍒涘缓涓や釜鏁版嵁缁撴瀯锛孲tr_ParaFromHMI鍜孲tr_ParaToHMI
3銆佸垱寤篠hareMemory
鏂板缓ST锛堢粨鏋勬枃鏈級绋嬪簭锛屽垱寤哄叡浜唴瀛樸
绋嬪簭椤甸潰姒傝锛
1锛夊0鏄庡彉閲忋佸叡浜唴瀛樺悕鍜屽姛鑳藉嚱鏁扮瓑


  • [C] 绾枃鏈煡鐪 澶嶅埗浠g爜
    PROGRAM ShareMemory
    VAR
            
            bStart: BOOL:= FALSE;
            ReadHandle: RTS_IEC_HANDLE:= RTS_INVALID_HANDLE;
            WriteHandle: RTS_IEC_HANDLE:= RTS_INVALID_HANDLE;
            szNameRead: STRING:= 'CODESYS_MEMORY_READ';                //澹版槑鍏变韩鍐呭瓨鐨勮鍙栧唴瀛樺悕绉
            szNameWrite: STRING:= 'CODESYS_MEMORY_WRITE';        //澹版槑鍏变韩鍐呭瓨鐨勫啓鍏ュ唴瀛樺悕绉
            ulPhysicalAddressRead: __UXINT:= 0;
            ulPhysicalAddressWrite: __UXINT:= 0;
            ulSizeRead: __UXINT:= 1024;
            ulSizeWrite: __UXINT:= 1024;
            ResultRead: ARRAY[0..2] OF RTS_IEC_RESULT;                //杩斿洖杩愯閿欒鐮
            ResultWrite: ARRAY[0..2] OF RTS_IEC_RESULT;
            
            SMRead: __UXINT;
            SMWrite: __UXINT;
            ulOffsetRead: __UXINT:= 0;
            ulOffsetWrite: __UXINT:= 0;
            
    END_VAR




2锛夌▼搴忓叿浣撳疄鐜


  • [C] 绾枃鏈煡鐪 澶嶅埗浠g爜
    //Init Memory
    IF NOT bStart THEN
            ReadHandle:= SysSharedMemoryCreate(pszName:= szNameRead, ulPhysicalAddress:= ulPhysicalAddressRead, pulSize:= ADR(ulSizeRead), pResult:= ADR(ResultRead[0]));
            WriteHandle:= SysSharedMemoryCreate(pszName:= szNameWrite, ulPhysicalAddress:= ulPhysicalAddressWrite, pulSize:= ADR(ulSizeWrite), pResult:= ADR(ResultWrite[0]));
            IF RTS_INVALID_HANDLE <> ReadHandle AND RTS_INVALID_HANDLE <> WriteHandle THEN
                    bStart:= TRUE;
            END_IF
    END_IF

    //璇诲彇鏁版嵁
    IF RTS_INVALID_HANDLE <> ReadHandle THEN
            SMRead:= SysSharedMemoryRead(
            hShm:= ReadHandle,                                         //璇诲彇鍐呭瓨鐨勮澶囧彞鏌
            ulOffset:= ulOffsetRead,                        //璇诲彇鏁版嵁鐨勫亸绉诲湴鍧
            pbyData:= ADR(GVL.GetPara),                 //鎸囧悜璇诲彇鏁版嵁鐨勭紦鍐插尯
            ulSize:= SIZEOF(Str_ParaFromHMI),         //璇诲彇鏁版嵁鐨勫瓧鑺傚ぇ灏        
            pResult:= ADR(ResultRead[1]));                //杩斿洖鎵ц鐨勯敊璇爜
    END_IF

    //鍐欏叆鏁版嵁
    IF RTS_INVALID_HANDLE <> WriteHandle THEN
            SMWrite:= SysSharedMemoryWrite(
            hShm:= WriteHandle,                                 //鍐欏叆鍐呭瓨鐨勮澶囧彞鏌
            ulOffset:= ulOffsetWrite,                         //鍐欏叆鏁版嵁鐨勫亸绉诲湴鍧
            pbyData:= ADR(GVL.SetPara),                 //鎸囧悜鍐欏叆鏁版嵁鐨勭紦鍐插尯
            ulSize:= SIZEOF(Str_ParaToHMI),         //鍐欏叆鏁版嵁鐨勫瓧鑺傚ぇ灏
            pResult:= ADR(ResultWrite[2]));                //杩斿洖鎵ц鐨勯敊璇爜
    END_IF





涓夈丆#绋嬪簭
1銆佸紩鐢ㄥ懡鍚嶇┖闂
  • [C] 绾枃鏈煡鐪 澶嶅埗浠g爜

    using System.IO.MemoryMappedFiles;      //寮曠敤鍏变韩鍐呭瓨鍛藉悕绌洪棿
    using System.Threading;                 
    using System.Runtime.InteropServices;





2銆佸畾涔夋暟鎹粨鏋
鏁版嵁缁撴瀯涓殑鍙橀噺鍚嶄笉涓瀹氶潪瑕佷笌Codesys鐨勬暟鎹粨鏋勫彉閲忓悕淇濇寔鐩稿悓锛堝缓璁畾涔変竴鑷达紝渚夸簬鏌ョ湅鍜岀鐞嗭級锛屼絾鏁版嵁缁撴瀯鍐呯殑鏁版嵁绫诲瀷鍜屾暟鎹绘暟蹇呴』淇濇寔涓鑷淬

  • [C] 绾枃鏈煡鐪 澶嶅埗浠g爜

        struct StrFromCodesys
        {
            internal bool bOut;
            internal int iOut;
            internal double fOut;
        }
        struct StrToCodesys
        {
            internal bool bIn;
            internal int iIn;
            internal double fIn;
        }




3銆佸垱寤篠hareMemory
1锛夊0鏄庡畾涔夊叡浜唴瀛樹娇鐢ㄧ殑API
2锛夊叡浜唴瀛樺垵濮嬪寲锛屾敞鎰忔鏌appedFile鐨勫唴瀛樺悕涓嶤odesys鍐呭瓨鍚嶄竴鑷达紝杩欐牱鎵嶈兘纭繚璁块棶鍚屼竴鍧楀唴瀛樺湴鍧
  • [C] 绾枃鏈煡鐪 澶嶅埗浠g爜

    private void InitMemory()
            {
                try
                {
                    MMF_Write = MemoryMappedFile.CreateOrOpen("CODESYS_MEMORY_READ", 1024);        //鎵撳紑Codesys_Read鍐呭瓨鍖哄煙锛屾剰鎬濆氨鏄Codesys鐨勮鍙栧尯鍩熸槸C#鐨勫啓鍏ュ尯鍩
                    AccessorWrite = MMF_Write.CreateViewAccessor(0, Marshal.SizeOf(typeof(StrToCodesys)), MemoryMappedFileAccess.Write);

                    MMF_Read = MemoryMappedFile.CreateOrOpen("CODESYS_MEMORY_WRITE", 1024);        //鎵撳紑Codesys_Write鍐呭瓨鍖哄煙锛屾剰鎬濆氨鏄Codesys鐨勫啓鍏ュ尯鍩熸槸C#鐨勮鍙栧尯鍩
                    AccessorRead = MMF_Read.CreateViewAccessor(0, Marshal.SizeOf(typeof(StrFromCodesys)), MemoryMappedFileAccess.Read);

                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }



3锛夎鍙栨暟鎹
  • [C] 绾枃鏈煡鐪 澶嶅埗浠g爜

            private void ReadData()
            {
                while(true)
                {
                    try
                    {
                        Thread.Sleep(5);
                        AccessorRead.Read(0, out ParaFromCodesys);      //璇诲彇Codesys鐨勬暟鎹
                        Thread.Sleep(5);
                        if(ParaFromCodesys.bOut == true)
                            picbox_bRead.BackColor = Color.Red;
                        else
                            picbox_bRead.BackColor = Color.Gray;

                        textbox_iRead.Text = ParaFromCodesys.iOut.ToString("0");
                        textbox_fRead.Text = ParaFromCodesys.fOut.ToString("0.000");

                    }
                    catch(Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }




4锛夊啓鍏ユ暟鎹




  • [C] 绾枃鏈煡鐪 澶嶅埗浠g爜
            private void btnWriteB(object sender, EventArgs e)
            {
                ParaToCodesys.bIn = !ParaToCodesys.bIn;
                AccessorWrite.Write(0, ref ParaToCodesys);
                if(ParaToCodesys.bIn == true)
                {
                    picbox_bWrite.BackColor = Color.Red;
                }
                else
                {
                    picbox_bWrite.BackColor = Color.Gray;
                }
            }



鍥涖侀氫俊娴嬭瘯
杩愯CoDeSys鍜孋#绋嬪簭锛岄氳繃璇诲彇鍜屽啓鍏ユ暟鎹祴璇曢氫俊缁撴灉
1锛夐氫俊娴嬭瘯鍥剧墖
2锛夐氫俊娴嬭瘯鍔ㄥ浘

璇烽棶缃戠洏閾炬帴澶辨晥浜嗭紝鍙互鍐嶅垎浜竴涓嬪悧

璇烽棶缃戠洏閾炬帴澶辨晥浜嗭紝鍙互鍐嶅垎浜竴涓嬪悧
鎴戝彧鎯抽棶锛岃繖涓繀椤昏姹俢odesys杩愯鍦╟#鎵鍦ㄧ殑涓绘満涓婂悧锛熷鏋滄槸缃戠嚎杩炴帴鐨刾lc鍙笉鍙互
椤堕儴qrcode搴曢儴
鍏虫敞閰峰痉缃戣闃呭彿锛岃幏鍙栨洿澶氳祫璁紒

QQ|灏忛粦灞|鎵嬫満鐗|Archiver|閰峰痉璁哄潧 ( 鑻廔CP澶16065247鍙-1 )|缃戠珯鍦板浘

GMT+8, 2024-5-21 18:40 , Processed in 0.264476 second(s), 21 queries .

閰峰痉缃

© 2001-2013 Hicodesys. 鎶鏈敮鎸 by 閰峰痉缃

杩斿洖椤堕儴