본문 바로가기
반응형

프로그래밍/C Sharp28

[ C# ] LS 산전 PLC 이더넷 통신하기-응답 데이터 분석 PLC로부터 명령을 전송한 후 공통점을 비교하여 통신의 속도 향상을 위해 비동기적으로 처리하려고 하거나 코드의 량을 줄이기 위해 데이터 분석을 통해 데이터 처리 효율을 높일 수 있습니다. 아래 가장 많이 쓰는 읽기/ 쓰기 명령들을 비교를 먼저 해보고자 명령 내용들을 캡처해보았습니다. 직접 변수 연속 읽기 응답 직접 변수 개별 쓰기 응답 직접 변수 연속 쓰기 응답 정상 응답일 때 공통점 헤더 명령어(0x55 연속 읽기, 0x59 쓰기) 0x55/59로 읽은 것인지 쓴 것인지를 판단 데이터 타입(0x14블록 타입) 예약 영역(0x00 고정) 에러 상태 없으므로 0x00 블록수 명령 상의 블록 보통 1개 사용 읽은 데이터 개수(읽기 전송) 읽은 데이터(읽기 전용) 에러 응답일 때 공통점 헤더 명령어(0x55 .. 2021. 12. 7.
[ C# ] LS 산전 PLC 이더넷 통신 - 개별 쓰기 데이터 쓰기 명령에는 두 가지의 방법이 있으며 데이를 읽을 목적에 따라 개별과 연속으로 사용할 수 있습니다 개별 쓰기 : 여러 타입의 변수형을 쓸 수 있으며 16개의 블록(번지)을 쓸 수 있음 일반적으로 쓰기 명령에 사용 연속 : 바이트 형(최대 14000개)의 변수를 블록 단위로 쓸 수 있음 데이터 초기화를 할 경우에 유용함 통신 구성 데이터 읽기와 비슷한 형태이며, 보통 1개의 데이터를 쓰기를 하므로 1개의 영역을 읽는 다고 가정했을 때 고정되는 부분을 적색으로 표시하겠습니다. 명령어(2) : 0x0058 데이터 타입 : 0x00 비트(% MX0) , 0x01 바이트($MB0) 0x02 워드(% MW0), 0x03 더블 워드(% MD0) , 0x04 롱 워드(% ML0) 예약 영역 : 0x00 변수 .. 2021. 12. 7.
[ C# ] LS 산전 PLC 이더넷 통신하기 - 연속 읽기 앞서 만든 헤드 프레임 뒤에 전송 명령용 프레임 명령을 만들어야 합니다. 읽기 명령은 두 가지 방법이 있는데 개별과 연속의 차이는 개별은 여려 변수를 변경하면서 읽을 수 있고 읽을 데이터의 분포가 크고 데이터의 주소가 다른 경우에 유용 연속은 시작 번지를 지정하고 읽을 개수를 입력하면 연속으로 읽어 올 수 있습니다. 읽을 데이터의 량이 많고 번지가 고정인 경우 유용 일반적으로 한 개씩 읽는 개별 방식을 선호 하지만 데이터의 개수가 많았지만 통신도 많이 해야 되어 속도가 느려지는 단점이 있어 연속으로 바이트 형을 읽은 후 버퍼에 저장해두었다고 비트/워드/더블 워드로 형 변환해서 사용하게 되면 한 번의 통신으로 여러 정보를 한 번에 확인할 수 있습니다. 연속 읽기 명령 확인 고정되는 부분만 적색으로 표시하고.. 2021. 12. 7.
[ C# ] LS 산전 PLC 이더넷 통신-헤더 프레임 만들기 LS PLC의 데이터의 전송은 헤더 + 프레임(읽기/쓰기 명령)을 합쳐서 데이터를 전송하는 방식으로 데이터의 구조를 알아야 정상적으로 통신이 가능합니다, 읽기와 쓰기 명령에 공통적으로 들어가야 할 헤더를 만드는 법을 먼저 확인하고 읽기/쓰기 명령을 만들어 보도록 하겠습니다. 헤더 구조 데이터 헤더는 아래와 같으며 고정은 적색으로 표시하겠습니다. Compay ID(8): 고정값으로 "LSIS-XGT"를 입력합니다. Reserved(2) : 예약 영역으로 0x00 고정입니다 PLC Info(2) : 클라이언트로 접속할 것이므로 0x0000 고정입니다. CPU Info(1) : PLC 모델에 따라 다르나 XGK와 XGB는 0xA0를 쓰면 됩니다. Source of Frame(1) : 클라이언트 이므로 0x33.. 2021. 12. 7.
[ C# ] 미쯔비시 QnA 시리즈 PLC와 PC 이더넷 통신하기 통신 설정 통신 설정을 위해서 [ PLC 파라미터 ] 설정 메뉴를 눌러 파라미터 창을 띄웁니다. IP 설정 : [ 디바이스 설정 ]에서 IP 및 서블릿 기본 라우터 IP를 입력합니다. 통신 모드: 바이너리로 체크하고 RUN 중 쓰기를 허가합니다. 통신방식 및 포트 : [ 오픈 설정 ]에서 통신 방식 TCP , 오픈 방식 MC 프로토콜 , 포트번호를 지정합니다. 프로토콜 형식 프로토콜 형식은 시리얼 방식 C 타입과 이더넷 방식 E 타입으로 나뉩니다. 4C 최댓값으로 외부 장치에서 액세스 가능 접근 범위. MELSEC-QnA 시리즈 시리얼 전용 프로토콜 통신 모듈(QnA 확장 프레임) 3C 메시지 형식은 4C 프레임에 비해 단순합니다. MELSEC-QnA 시리즈 프로그래밍 가능한 컨트롤러용 데이터 통신 소프.. 2021. 11. 23.
[ C# ] 비트연산 처리 모음 프로그램을 하다 보면 통신이나 외부 장치와의 연결 과정에서 비트 연산을 하여 처리해야 할 경우들이 많이 발생합니다. 인터넷을 돌아다니며 하나하나 찾기에는 시간이 많이 부족하여 지금까지 모아 온 자료들을 공유드립니다. 소스코드 데이터 반전 만약 [ 0xFF, 0x00 ]이 입력되면 [ 0x00 ,0xFF ]로 앞뒤 자리를 바꿔주는 역할입니다. public static void Swap(ref T _i, ref T _j) where T : struct { T temp; temp = _i; _i = _j; _j = temp; } 비트 체크 data 안에 몇 번째 비트가 On 되어 있는지 확인하는 함수입니다. public static bool Check_Bit(double _data, int loc) { int.. 2021. 11. 19.
[ C# ] 키보드 기능키 ( Num Lock, Caps Lock , Scroll Lock ) 확인하기 가끔 문서 편집기를 열면 아래에 Num , Cap, Scroll 키 즉 고정으로 사용되는 키의 값을 표시하는 경우가 있습니다. 문서 편집 프로그램 제작 시 화면에 표시하면 사용자가 자신의 키보드의 상태를 알게 되어 오입력을 막을 수 있습니다. 화면 구성 아래 상태에 ToolStripStatusLable인 NUM , CAP , SCR을 추가하였습니다. 소스코드 폼 로딩 시 Application.Idle 이벤트의 변화가 있을 때 키보드의 입력 상태를 체크하면 추가 코딩이 필요 없습니다. Idle 상태는 프로그램이 유휴 상태. 즉, 응용프로그램이 처리를 끝내고 쉬는 시간에 체크를 하는 것으로 이때 상태를 체크하면 오동작이 줄어든다고 보시면 됩니다. protected override void OnLoad(Eve.. 2021. 11. 16.
[ C# ] 키보드 보조키 (Ctrl , Shift , Alt)키 상태 확인하기 보조키를 이용하여 단축키를 프로그램으로 구현할 경우가 있습니다. 보조키의 상태와 다른 키의 상태를 조합하여 프로그램을 구현하면 사용하기 편한 프로그램이 되며, 여러 가지 기능을 만들어 낼 수 있습니다. 여기에서는 조합키로 많이 사용되는 Control , Shift , Alt 키를 이용하여 메시지를 띄우는 프로그램을 구현하고자 합니다. 화면 구성 보조키를 누른 상태에서 버튼 클릭 시 메시지가 나타나도록 할 예정이므로 button 한 개만 추가하였습니다. 소스코드 보조키를 누른 상태에서 버튼을 누를 경우 메시지 박스를 띄웁니다. private void button1_Click(object sender, EventArgs e) { if ((Control.ModifierKeys & Keys.Shift) == K.. 2021. 11. 16.
[ C# ] 듀얼 모니터에서 다른 모니터에 화면 띄우기 최근에는 여러 대의 모니터를 한대의 컴퓨터에 연결해서 양쪽에 다른 프로그램을 띄워야 할 경우가 있습니다. 모니터의 거리가 멀 경우 프로그램을 확인하기 위해 움직일 수 없는 상황이 발생하면 멀리 있는 프로그램을 현재 화면으로 불러오도록 하기 위한 프로그램을 구현해 보았습니다. 이동하지 않고 다른 모니터의 프로그램을 수정할 수 있어 작업의 피로도를 줄일 수 있습니다. 화면 구성 빈 폼에 라벨만 한 개 추가하였습니다. 소스코드 Screen 클래스를 이용하여 모니터의 수량을 확인하고, 현재 프로그램의 위치가 어느 모니터 인지 확인한 후 다른 모니터로 이동시키는 코드를 작성하였습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 protected.. 2021. 11. 16.
[ C# ] 프로그램간 통신 ( IPC 이용 ) IPC는 Inter Process Communication의 약자로 커널 영역에서 제공하는 내부 프로세스 간 통신을 이용해서 그 기능을 구현할 수 있으며, 이를 이용하여 애플리케이션 간에 통신을 구현할 수 있습니다. IPC의 종류에는 PIPE, Named PIPE, Message Queue, Shared Memory, Memory Map, socket 등이 있지만 여기서 다루는 Shared Memory 방식은 동일한 클래스를 참조함으로써 별도의 통신 구성 명령을 만들 필요 없이 변수 간의 데이터 교류가 이루어져 더욱 편리한 코드 작성이 가능하게 해 줍니다. 공용 DLL 생성 일반적인 샘플에서는 서버 생성 및 연결코드를 각각의 프로그램에 넣어서 사용하나 소스 관리의 편의를 위하여 dll파일 안에 초기 연결.. 2021. 11. 10.
반응형