Simulink 는 많은 경우 MATLAB script 를 사용하여 자동화를 할 수가 있습니다. 


당연히 MATLAB 코딩을 잘해야 Simulink를 자유자재로 다룰 수 있을 겁니다.


물론 그냥 노가다로 Simulink를 구현 할 수도 있지만 이렇게 하면 무수한 클릭질에 Simulink 설계가 정말 싫어 질 겁니다.


암튼 오늘은 Simulink 블록의 존재 유무를 MATLAB Command Window 에서 확인 하는 방법에 대해 소개 하려 합니다. 


Simulink 블록의 존재 유무를 확인하기 위해서는  getSimulinkBlockHandle() 함수를 사용하면 됩니다.


함수의 이름을 보면 알겠지만 Simulink 블록의 handle 을 구하는 함수 입니다.


getSimulinkBlockHandle() 함수에 대한 메뉴얼은 아래 주소에서 확인 할 수 있고~ 


https://kr.mathworks.com/help/simulink/slref/getsimulinkblockhandle.html


getSimulinkBlockHandle()을 사용하는 경우 블록이 존재하면 블록의 handle 을 return 하고, 존재하지 않으면 -1 을 return 합니다. 


따라서 아래와 같이 사용 할 수 있을 겁니다.


if (getSimulinkBlockHandle('modelname/sysname') == -1)

 % block does not exist

else

 % block exists

end


블록의 path 를 확인하는 방법은 블록을 클릭하고 MATLAB command window 에 gcb 라고 타이핑 하면 됩니다. 


아래와 같은 모델(NewModel.slx)에서 Scope 를 선택한 후에 MATLAB command window 에 gcb 라고 타이핑 하면~ 다음과 같이 path 가 나옵니다.

NewModel/Scope 

위 path 에 대해 getSimulinkBlockHandle() 함수를 사용해 보면~ 아래와 같이 handle 값이 나오는 것을 확인 할 수 있습니다.

>> getSimulinkBlockHandle('NewModel/Scope')

ans =

   1.6290e+03

  

그럼 위 모델에 없는 블록 이름을 하나 테스트 해 보죠~ 아래 결과를 보면 위 설명대로 -1 이 나오는 것을 확인 할 수 있습니다.

>> getSimulinkBlockHandle('NewModel/Scope 1')

ans =

    -1



Windows 에서 폴더 및 파일 관리시 비어 있는 폴더를 삭제 하고 싶은 경우가 있습니다.

 

그래서 저는 간단하게 빈폴더를 삭제하는 Powershell script 를 만들어서 사용하곤 합니다.

 

아래 소개한 powershell profile 에 작성해서 사용하면 조금더 편리하게 사용 할 수 있습니다.

 

http://iamaman.tistory.com/1017

 

스크립트는 아래와 같습니다. 그냥 하위 폴더는 그냥 두고 현재 폴더만 확인하고 싶은 경우와 빈 폴더만 확인하고 싶은 경우를 위해 recurse 와 Delete 를 옵션으로 줬습니다.

 

function emptyFolderFind

{

    param

    (

        $folder,

        [Switch]$Recurse,

        [Switch]$Delete

    )

 

    if($Recurse)

    {

        $a = Get-ChildItem $folder -Recurse | Where-Object {$_.PSIsContainer -eq $True}    

    }

    else

    {

        $a = Get-ChildItem $folder | Where-Object {$_.PSIsContainer -eq $True}

    }

    

    $b = $a | Where-Object {($_.GetFiles().Count -eq 0) -and ($_.GetDirectories().Count -eq 0)}

    $b | Select-Object FullName    

      

        

    if ($Delete -and $b)

    {

        $b | Remove-Item -Force

        Write-Host "Empty folder Deleted!!"

    }    

}

 

E:\workspace 하위의 폴더 중 빈폴더를 삭제 하기 위해서는 아래와 같은 명령어를 사용합니다. 

emptyFolderFind "E:\workspace" -Delete

 

하위 폴더도 검색하기 위해서는 Recurse 옵션을 주고 아래와 같이 Recurse 하게 검색 및 삭제 할 수 있습니다. 

emptyFolderFind "E:\workspace" -Delete -Recurse


Autohotkey 가 설치된 컴퓨터에서는 그냥 Autohotkey 스크립트를 그대로 사용해도 되지만~

 

아래 포스팅에서 소개한 것과 같이 파일을 파라미터로 받는 경우에는 exe 파일로 만들어서 사용하는 게 편리 할 때가 있습니다.

 

그래서 오늘은 다수의 autohotkey 스크립트를 한번에 exe 파일로 만드는 방법에 대해 소개하려 합니다.

 

Autohotkey 를 사용하여 ahk 확장자인 Autohotkey 파일을 실행파일(exe) 파일로 변경하는 방법은 아래 주소에 나와 있듯이 3가지의 방법이 있습니다.

 

http://ahkscript.org/docs/Scripts.htm#ahk2exe

 

첫 번째로는 Convert .ahk to .exe 를 실행해서 다음 그림과 같은 GUI 환경으로 만드는 방법입니다. 이 방법은 한번에 한 개의 Autohotkey 파일만 exe 로 만들 수 있습니다.

 

 

두 번째로는 아래 그림과 같이 Autohotkey 스크립트를 오른쪽 클릭해서 compile 하는 방법입니다. 이 방법으로는 같은 폴더 안에 있는 Autohotkey 스크립트를 다~ 선택한 후에 compile script 를 클릭하면 폴더내의 모든 Autohotkey 스크립트를 exe 로 만들 수 있습니다. 하지만 현재 폴더를 포함하여 하위폴더의 모든 스크립트들을 exe 파일로 만들고 싶을 때는 일일이 하위 폴더에 들어가서 똑 같은 작업을 해줘야 합니다.

 

 

세 번째로는 Ahk2Exe.exe 파일을 사용하여 command line 에서 처리 하는 방법 입니다. Ahk2Exe.exe 파일을 사용하면 현재 폴더 및 하위 폴더의 모든 Autohotkey 스크립트에 대해 exe 파일로 만들 수 있습니다. 이를 위한 Autohotkey 코드는 다음과 같습니다.

 

아래 코드는 C:\Users\Administrator\Downloads\temp 하위의 모든 Autohotkey 스크립트를 compile 하는 Autohotkey 코드 입니다.

 

SetWorkingDir, C:\Program Files\AutoHotkey\Compiler

 

Loop Files, C:\Users\Administrator\Downloads\temp\*.ahk,R

{

    Run %comspec% /c Ahk2Exe.exe /in "%A_LoopFileFullPath%"

}

 

Ahk2Exe.exe 파일은 제 컴퓨터의 경우 C:\Program Files\AutoHotkey\Compiler 에 들어 있습니다. C:\Program Files\AutoHotkey\Compiler 폴더를 path 환경 변수에 설정해도 되겠지만 번거로우니 working directory 를 C:\Program Files\AutoHotkey\Compiler로 했습니다.



PowerShell script 를 작성하다가 현재 실행되는 스크립트의 폴더를 확인 하는 코드 입니다.

 


코드는 굉장히 간단한데요~

 


다음과 같습니다.

 




 

$fullPathIncFileName = $MyInvocation.MyCommand.Definition # Script 파일의 full path

$currentScriptName = $MyInvocation.MyCommand.Name # Script 파일 이름

$currentExecutingPath = $fullPathIncFileName.Replace($currentScriptName, "") # Script 폴더

 

Write-Host $currentExecutingPath # Script 파일의 폴더 확인



주석을 붙였으니 설명은 딱히 필요 없을것 같군요. 

+ Recent posts