반응형

1. PLC 구성장치

  1. PLC 하드웨어 구성
    1.  제어연산부
      1. CPU (Central Processing Unit, 중앙처리장치)
        1. 명령을 해독
        2. 산술논리연산이나 데이터 처리를 실행하는 장치
      2. ALU (Arithmetic Logic Unit)
        1. 컴퓨터 명령어 내에 있는 연산과 논리 동작 담당
      3. RAM (Random Access Memory)
        1. 주기억장치
        2. PLC의 데이터 영역
        3. 사용자 프로그램을 저장하는 위치
      4. ROM (Read Only Memory)
        1. 읽기만 가능하고 쓸 수 없는 메모리
        2. EPROM은 수정이 가능한 ROM
      5. 프로그램 로더 (Program Loader)
        1. 프로그램 입력, 모니터링, 편집의 역할
        2. 프로그램을 주기억장치에 기억시키는 것을 로딩이라 함
    2. 입력부 (입력장치)
      1. 각종 스위치
      2. 검출 스위치
    3. 출력부 (출력장치)
      1. 제어결과를 실행하는 부분
    4. 입출력부의 요구 조건
      1. 외부기기와 전기적 규격이 일치해야 함
      2. 노이즈가 CPU로 전달되지 않도록 주의



  2. PLC 메모리의 종류
    1. 사용자 프로그램 메모리
      1. 작성한 프로그램이 저장되는 영역
      2. RAM에 저장
    2. 데이터 메모리
      1. 입출력 릴레이, 보조 릴레이, 타이머와 카운터의 접점 상태 및 설정값, 현재값 등의 정보 저장
      2. RAM에 저장
    3. 시스템 메모리
      1. PLC 제작사가 사용하는 메모리
    4. 레지스터 메모리
      1. 짧은 기억을 위해 사용하는 메모리
      2. 현재 계산을 수행 중인 값을 저장하는데 사용
    5. 명령 주소 레지스터 (프로그램 카운터, PC)
      1. 다음에 실행될 주소를 가지고 있는 레지스터
      2. 프로그램의 실행을 계수 
      3. 소프트웨어의 명령에 의해 카운터가 불연속적일 수 있음
    6. PLC에 의한 제어 시스템의 분류
      1. 단독 시스템
        1. PLC 1대  :  기계 1대
      2. 집중 시스템
        1. PLC 1대  :  기계 다수
        2. 서로 연계되는 작업에 사용
        3. 1대의 PLC가 정지되면 모든 기계가 정지되는 단점
      3. 분산 시스템
        1. (PLC 1대  :  기계 1대) * 여러 세트
        2. 상호 연계 동작에 필요한 경우에 사용
        3. 집중 시스템과 달리 특정 PLC가 정지하여도 전체 시스템이 다운되지는 않음
      4. 계층 시스템
        1. PLC를 다층으로 연결하여 상위, 하위를 나눈 시스템
  3.  
반응형

 

반응형
반응형

# Point

  • PLC 제어의 정의 및 특징
  • PLC와 릴레이 제어와의 비교

 

반응형

 

 

1. PLC 제어

  1.  정의
    • 프로그램을 통한 제어 시스템
    • 무접점 회로의 대표적인 예
  2. 릴레이 제어
    • 릴레이를 이용한 제어
    • 유접접 회로의 대표적인 예
    • 하드웨어만으로 회로를 구성
  3. PLC의 장점 (릴레이 제어와 비교)
    • 시스템 확장 및 유지 보수가 용이
    • 산술, 논리 연산 가능
    • 외부 장비와의 통신 가능
    • 회로 배선의 간소화
    • 신뢰성 향상
    • 보수가 용이
      • 하드웨어가 적기에 문제 발생 확률이 낮음
      • PLC에 문제 발생시 PLC 교체 후 프로그램 다운로드
    • 비밀 유지가 용이 (프로그램 Lock이 가능)
  4. 프로그래밍 방식
    • 래더 다이어그램
    • 명령어 형식
    • 논리기호 방식
    • 불 대수 방식 (Boolean Algebra)
  •  
반응형
반응형

1. Point

  • 서보 기구의 정의
  • 제어 방식
  • 서보 기구의 종류
  • ex. 공작 기계의 서보 기구

 

반응형

 

 

2. 서보 기구란? (Servo System)

  • 정의
    • 물체의 기계적 변위를 제어량으로 읽어 제어하는 시스템
      • 기계적 변위 : 위치, 각도, 방위, 위치 등
    • 목표값(입력값)과 출력값(현재값)을 비교하여 피드백 제어(Feedback)를 하는 시스템
  • 제어 방식
    • 개방회로 방식
      • 피드백 제어가 없는 제어
    • 반폐쇄회로 제어방식
      • 중간에서 값을 검출하여 제어
      • 리드 스크류의 회전각 등을 측정하여 제어 
      • 최종 출력값(실제 이동량 등)을 제어하는 폐쇄 회로와는 다름
    • 폐쇄회로 제어방식
      • 최종 출력값을 검출하여 피드백 제어
      • ex. 공작 기계 베드의 실제 이동량을 검출하여 피드백 제어
  • 서보 기구의 종류
    • 전기식 서보기구
      • 동력원으로 모터를 사용
      • 전기를 이용하기에 신호로의 활용이 용이하며 증폭/감쇠 등에 유리
      • 유압식에 비해 작동 속도와 반응 속도가 좋음
      • 유압식에 비해 경제성 취급이 용이
      • 높은 신뢰성
      • 검출기 사용
        • 싱크로 (변압, 변압기)
        • 리졸버
        • 포텐셔미터
        • LVDT
        • 엔코더
      • 직류식 VS 교류식
        • 직류식
          • 전류 통제의 용이성이 높음
          • 속도 제어 범위가 넓음
          • 구조가 복잡하고 기동 토크가 큼
        • 교류식
          • 브러시가 없어 유지비가 들지 않음
          • 보수가 용이
    • 유압식 서보기구
      • 고출력 고성능에 적합
      • 안내밸브식, 분사관식, 전기 혼합 서보 밸브식 등
    • 공압식 서보기구 
      •  공압을 이용
      • 유압식에 비해 비용이 저렴
      • 저출력 시그널에 사용

 

Example. 공작 기계의 서보 기구

  • 반폐쇄회로 제어 방식
    • 리졸버(resolver)와 엔코더를 이용하여 회전수, 각도를 검출하여 피드백 계산에 사용
  • 서보 모터
    • 기계의 동작에 사용되는 모터, 급가속, 급정지에 적합
    • 피드백을 이용하여 제어
  • 리졸버
    • 회전각 검출 도구
  • 인코더
    • 회전축에 고정하여 회전각, 방향, 속도를 측정

 

다음글 : 

[생산자동화산업기사] PLC이란 무엇인가 (PLC 정의 및 특징)

반응형
반응형

1. 문제

- [백준 C#] 1316번 그룹 단어 체커 (C#)  (https://www.acmicpc.net/problem/1316)

 

 

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.

단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 문자열 입력 받기
  • 각 문자열의 첫글자부터 반복여부 확인하기
  • 전체 a~b까지 반복 여부를 확인 할 필요 없이 단어에 있는 알파벳만 확인

 

 

반응형

 

 

3. 전체 코드

using System;
using System.Linq;

namespace S5_01316번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int cnt = int.Parse(Console.ReadLine());

            int result = 0;

            // 개수 카운팅을 위한 flag
            bool flag = false;


            for (int i = 0; i < cnt; i++)
            {
                string word = Console.ReadLine();
                string word2 = word;

                if (word.Length == 1)
                {
                    flag = true;
                }
                else {
                    foreach (var a in word)
                    {
                        // 문자열 포함 여부를 확인하여 검증하기 위해 첫글자를 지우고 해당 문자가 뒤에 다른 그룹을 형성하는지 확인
                        word2 = word2.Remove(0, 1);

                        flag = true;

                        if (word2.Length == 0)
                        {
                            break;
                        }
                        else
                        {
                            // 맨 앞글자가 같은 문자인 경우는 검증 건너뜀
                            // ex. aabcd는 a를 지웠지만 다음 글자가 a기에 아래 검증이 의미가 없음
                            if (word2[0] != a)
                            {
                                // 맨 앞글자를 제외한 다른 곳에서 값이 발견되면 그룹 문자 조건에 위배
                                if (word2.Contains(a))
                                {
                                    // 떨어져 있는 그룹에 해당 문자가 있는 경우
                                    // 카운팅이 되지 않고 로직 종료
                                    flag = false;
                                    break;
                                }
                            }
                        }
                    }
                }


                if (flag)
                {
                    result++;
                }

                // flag 초기화
                flag = false;
            }


            Console.WriteLine(result);
        }
    }
}

// 1316번 그룹 단어 체커
// https://www.acmicpc.net/problem/1316
반응형
반응형

1. 문제

- [백준 C#] 2941번 크로아티아 알파벳 (C#)  (https://www.acmicpc.net/problem/2941)

 

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.

크로아티아 알파벳변경

č c=
ć c-
dz=
đ d-
lj lj
nj nj
š s=
ž z=

예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.

 

 

2. 문제 포인트

  • 단어 입력 받기
  • 크로아티아 알파벳에 해당하는 문자열을 '1'로 바꾸기
    이유 : 다른 알파벳 a나 b등으로 바꾸면 또 다른 크로아티아 알파벳 조합이 만들어 질 수 있으므로 전혀 관계없는 1로 변환
  • 변환이 완료된 문자의 문자열 개수 출력

 

 

반응형

 

 

3. 전체 코드

using System;
using System.Linq;

namespace S5_02941번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string word = Console.ReadLine();

            word = word.Replace("c=", "1");
            word = word.Replace("c-", "1");
            word = word.Replace("dz=", "1");
            word = word.Replace("d-", "1");
            word = word.Replace("lj", "1");
            word = word.Replace("nj", "1");
            word = word.Replace("s=", "1");
            word = word.Replace("z=", "1");

            Console.WriteLine(word.Count());
        }
    }
}

// 2941번 크로아티아 알파벳
// https://www.acmicpc.net/problem/2941
반응형
반응형

1. 문제

- [백준 C#] 1157번 단어 공부 (C#)  (https://www.acmicpc.net/problem/1157)

 

 

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

 

 

2. 문제 포인트

  • 단어 입력 받기
  • 가장 많이 사용된 알파벳 출력
  • 최다 사용 알바벳이 두개인 경우 물음표 출력

 

 

반응형

 

 

3. 전체 코드

using System;
using System.Collections.Generic;
using System.Linq;

namespace B1_01157번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string word = Console.ReadLine();

            List<int> cnt = new List<int>( Enumerable.Repeat<int>(0, 26).ToArray() );

            word = word.ToUpper();
            
            foreach (var a in word)
            {
                cnt[Convert.ToInt32(a)-65] += 1;
            }

            // LINQ 쿼리문을 이용해 최대값을 가진 요소의 개수를 구하기
            int linq_query = cnt.Where(n => n == cnt.Max()).Count() ;

            // 최댓값이 2개인 경우 필터
            if (linq_query>1)
            {
                Console.WriteLine("?");
            }
            else
            {
                // 아스키 코드를 이용해 해당 인덱스의 값 출력
                int co = 65 + cnt.IndexOf(cnt.Max());
                byte[] a = new byte[] { byte.Parse(co.ToString()) };
                Console.WriteLine(System.Text.Encoding.ASCII.GetString(a) );
            }
        }
    }
}

// 1157번 단어 공부
// https://www.acmicpc.net/problem/1157
반응형
반응형

1. 문제

- [백준 C#] 2908번 상수 (C#)  (https://www.acmicpc.net/problem/2908)

 

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.

상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.

두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 두 숫자를 입력 받는다
  • 숫자 두개를 거꾸로 뒤집는다
  • 뒤집힌 숫자 두개중 큰 수를 출력한다

 

 

반응형

 

 

3. 전체 코드

using System;
using System.Linq;

namespace B2_02908번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string[] num = Console.ReadLine().Split();
            
            // 뒤집은 숫자를 저장할 변수
            string[] reverse_num = new string[] { "", ""};

            // 숫자 뒤집기
            for (int i = 0; i < 3; i++)
            {
                reverse_num[0] += num[0][2 - i];
                reverse_num[1] += num[1][2 - i];
            }

            // 두 숫자중 큰 수를 출력
            Console.WriteLine(reverse_num.Max());
        }
    }
}

// 2908번 상수
// https://www.acmicpc.net/problem/2908
반응형
반응형

1. 문제

- [백준 C#] 5622번 다이얼 (C#)  (https://www.acmicpc.net/problem/5622)

 

 

상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다.



전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다.

숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.

상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다. 즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다. 예를 들어, UNUCIC는 868242와 같다.

할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 최소 시간을 구하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 각 숫자에 대응되는 알파벳 리스트 만들기
  • 각 문자가 리스트의 어느 인덱스에 해당하는지 구하기
  • 인덱스 값을 합하여 출력

 

 

반응형

 

 

3. 전체 코드

using System;

namespace B2_05622번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string word = Console.ReadLine();

            // 다이얼에 있는 번호와 알파벳 리스트
            string[] aa = new string[] { "2ABC", "3DEF", "4GHI", "5JKL", "6MNO", "7PQRS", "8TUV", "9WXYZ" };

            // 총 소요시간
            int result = 0;


            // 알파벳 리스트를 이용하여 각 문자열이 어디에 해당하는지 탐색
            foreach (var w in word)
            {
                foreach (string a in aa)
                {
                    // w는 char이므로 string으로 변환
                    // Contain()을 이용하여 해당 알파벳이 어느 리스트에 있는지 확인
                    // 포함되어 있으면 true를 반환
                    if (a.Contains(w.ToString()))
                    {
                        result += int.Parse(a[0].ToString()) + 1;
                    }
                }

            }
            Console.WriteLine(result);
        }
    }
}

// 5622번 다이얼
// https://www.acmicpc.net/problem/5622
반응형

+ Recent posts