- JsonManager.cs ( v )
- DeviceInfo.cs ( v )
- CommManager.cs ( )
- GpibManager.cs ( )
- ControlManager.cs ( )
- Form1.cs ( )
지난번까지 DeviceInfo 클래스까지 작성을 하였습니다.
이제 통신에 관한 클래스를 만들어 보겠습니다.
통신부는 VISA를 이용해서 작성을 하면 됩니다.
검색하시면 관련 자료 많이 찾으실 수 있을꺼예요.
다만 라이브러리에 맞는 예제를 찾으셔야 시간 낭비를 줄일 수 있습니다.
제조사 라이브러리가 주는 장점도 있는데 특정기능을 VISA로 구현하려면 어려운 경우가 있는데 이것을 쉽게 할 수 있는 메서드가 있습니다.
그리고 계측기 장비들의 데이타 프로토콜이 있는데 SCPI라고 합니다.
Standard Commands for Programmable Instruments의 약자로 skippy라고 불러집니다.
참고하실 만한 링크를 드리겠습니다.
- 위키 참고
https://en.wikipedia.org/wiki/Standard_Commands_for_Programmable_Instruments
- 로데 슈바르츠 제조사 참고
https://www.rohde-schwarz.com/kr/driver-pages/remote-control/drivers-remote-control_110753.html
위의 링크 보시면 많이 이해가 될 것입니다.
각 SCPI 명령에는 기본적인 명령어가 있고 나머지는 장비마다 형식만 같고 기능에 따라 명령어가 다르기에 제어하시려는 장비에 대한 Programming Guide 문서를 참고하셔야 합니다.
그 문서 보시면서 내가 이 계측기의 어떤 부분을 제어해야 하는지 확인하시면서 해당 기능의 명령어를 입력해야 합니다.
계측기 제어 프로그램은 프로그램 작성도 할게 많은데 테스트 방식도 공부해야 하고 테스트 방식에 맞는 SCPI 명령어 스크립트도 확인해야 해서 작업량이 많은 편입니다. ㅜㅜ
그리고 장비만 제어하는것이 아닌 테스트 대상도 통신으로 같이 제어하는 편이라서 테스트 대상에 대한 통신 방식, 프로토콜도 이해해야 하는 경우가 많네요.
특히나 프로그램만 하시고 계측 제어에 관한 생각이 없으신분은 흥미를 가지시기 힘들 수 있습니다.
보통 프로그램에 관심이 없고 하드웨어 제작하고 테스트하는 개발 엔지니어들은 프로그램까지 하면 많이 힘들어서 랩뷰라고 GUI로 로 시퀀스만드는 프로그램도 많이 사용합니다.
근래 들어서는 파이썬이 쉽게 접근이 가능하니 개발 엔지니어들도 많이 배워서 그런지 계측기 제조사에서 파이썬 관련 자료도 제공을 하네요.
통신이나 제어쪽에 관심이 있으신분은 GPIB 통신도 한번 배워보자하는 마음으로 공부해두면 좋지않을까 싶네요.
자~ 이제 통신부 작성을 시작하겠습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Ivi.Visa;
namespace GPIB_Demo
{
public class CommManager
{
//================================================================
// 장비 리소스 확인
//================================================================
public IEnumerable<String> FindGpibRsc()
{
return GlobalResourceManager.Find("GPIB?*INSTR");
}
//================================================================
// 장비 연결
//================================================================
public IMessageBasedSession Connect(string addr)
{
return (IMessageBasedSession)GlobalResourceManager.Open(addr);
}
//================================================================
// SCPI 명령어 전송
//================================================================ㅊ
public void SendMsg(string msg, IMessageBasedSession session)
{
session.FormattedIO.WriteLine(msg);
}
//================================================================
// SCPI 명령어 전송 및 수신
//================================================================
public string QueryMsg(string msg, IMessageBasedSession session)
{
session.FormattedIO.WriteLine(msg);
return session.FormattedIO.ReadLine();
}
}
}
CommManager는 위와 같이 작성하였습니다.
- 장비 연결가능 리소스 확인 메서드
- 연결 가능 주소값을 통해 세션을 얻는 메서드
- 세션을 통해 명령어 전송하는 메서드
- 세션을 통해 쿼리를 수행하는 메서드
위의 클래스를 통해서 통신 및 제어는 가능할 것입니다.
추가적인 기능이 있는데 현재에서는 위의 기능만 필요하여 해당 클래스를 위와 같이 작성하였습니다
이제 다음 포스팅에서는 CommManager를 호출하는 상위 클래스인 GpibManager 작성을 해보겠습니다.
여기까지 읽어주셔서 감사합니다~
'개발' 카테고리의 다른 글
C#으로 하는 GPIB 통신 -9- (85) | 2024.11.16 |
---|---|
C#으로 하는 GPIB 통신 -8- (6) | 2024.11.16 |
C#으로 하는 GPIB 통신 -6- (13) | 2024.11.15 |
C# Dictionary를 JSON으로 저장하기 (3) | 2024.11.15 |
C#으로 하는 GPIB 통신 - 5 - (5) | 2024.11.14 |