반응형

안녕하세요.

 

코딩하는남자의 코딩연습생입니다

 

회사 생활을 하면서 여러가시 프로젝트를 경험하게 된다.

 

그중 제일 이해가 되지 않고 관리하기 힘든 부분이 바로 "프로그램"에 대한 관리 이다.

 

물론 개발자 입장에서 Source Code만 분석하면 어는정도 프로젝트에 대한 이해가 된다 하지만 회사에서 요구하는건

 

많은 것을 요구하게 된다

 

 

예를 들면 "Source Code는 너희만 아는거고....나는 모르니 내가 알수 있는 문서로 가져와" 머 이런 업무 지시들...

 

그래서 나름 문서화 해서 "프로그램 정의서", "인터페이스 정의서", "테이블 정의서", "ERD" 뭐 이런 산출물을 작성하면

 

이렇게 말한다 "이게 뭔데~! 초등학생이 봐도 알 수 있는 그런 자료를 가져와"

 

나는 생각한다 회사 바꿔야 하나??ㅋㅋㅋㅋ

 

그래서 여러 인터넷 검색과 경험을 토대로 프로젝트 산출물 과정을 잘 나열한 자료가 있어서 공유하고자 한다

 

 

▣ 개발 프로젝트 산출물 단계별 과정

 

1. 분석 단계

   ⊙ 요구사항 정의서 : 고객의 니즈를 담고 있는 문서, 고객의 니즈에 따라서 프로젝트의 스펙이 결정될 것이다

   ⊙ 기능 차트 : 니즈를 베이스로 큰 카테고리를 만들어서 프로젝트의 역할을 보여준다

   ⊙ 프로세스 정의서 : 기능차트를 기준으로 각각의 프로세스를 보여준다

   ⊙ 인터페이스 정의서 : 프로세스 정의서 기준으로 외부 S/W 및 장비와 연결정보를 정의한 문서

 

 

 

2. 설계 단계

    ⊙ 화면설계서 : 웹어플리케이션 혹은 기타 어플리케이션에서 고객이 사용하고자하는 샘플 화면 문서

    ⊙ ERD : 데이터베이스를 생성하고 테이블간의 관계를 나타내는 문서

    ⊙ 테이블 목록 : 한눈에 데이터베이스 구조를 볼 수 있는 목록

    ⊙ 테이블 정의서 : 각 테이블의 필드명 값, 바이트 등의 정보 표시

    ⊙ 개발 표준 정의서 : 변수명, 클래스명, 파일명의 규칙등 코딩에 관련된 규칙을 담은 문서

    ⊙ 단위테스트 시나리오 : 프로세스별 단위 테스트를 위한 테스트 문서

    ⊙ 통합테스트 시나리오 : 단위테스트를 근간으로 고객의 니즈를 보안할 수 있는 테스트 문서

 

3. 개발 단계

    ⊙ 소스코드 : 오류 수정까지 끝난 원시코드 자체

    ⊙ 프로그램 정의서 : 소스코드의 단계별(모듈) 동작표준을 정의한 문서 

    ⊙ 단위테스트 결과서 : 단위테스트 시나리오를 기준으로 한 테스트 결과

    ⊙ 결함/오류 보고서 : 단위테스트를 통해 발견된 에러/버그의 원인과 수정에 대한 내용

    ⊙ 오류코드 정의서 : 결함/오류 보고서의 내용을 베이스로 해당 시스템에서 발생 할 수 있는 오류를 코드화 하여 보여줌

    ⊙ 통합테스트 결과서 : 통합테스트 시나리오를 기준으로 한 결과로서 개발완료 여부의 기준이 되는 문서

    ⊙ 시스템 이행 계획서 : 유지보수와 관련하여 관리가 필요할 경우 해당 프로젝트의 관리 포인트를 누가 언제 이행할 것인지를 기록

 

 

4. 구현 단계

    ⊙ 시스템 이행 결과서 : 시스템 이행 계획서를 통해 이행된 결과를 확인받는 문서

    ⊙ 사용자 매뉴얼 : 사용자 화면이 존재할 경우, 일반적인 조작법과 화면등의 예시를 들어 산출되는 문서

    ⊙ 운영자 매뉴얼 : 개발된 프로젝트 시스템 전방에 대한 내용을 담는 문서

    ⊙ 교육(인수) 명세서 : 사용자 매뉴얼, 운영자 매뉴얼을 중심으로 담당자에게 세부사항을 교육/인수한 후 받는 문서

    ⊙ 개발 산출물별 검사 리스트 : 산출물들의 이상여부, 인수여부 체크후 받는 문서

    ⊙ 프로젝트 완료보고서 : 최종적으로 개발된 내용, 인도물, H/W, 고객사 대표, 개발자 대표의 확인이 들어간 문서

 

 

 

인터넷에 있는 단계별 수행 산출물 중에 현재 제 개인적인 생각으로 필수 사용하고 있는 항목을 별도로 표시 해봤습니다

 

개발 업무도 힘에 겨운데 이런 산출물까지 만들어야 하는 우리 현실이......

 

대한민국의 모든 개발자분들이 활짝 웃는 그날까지 열심히 할께요~

 

감사합니다

 

 

반응형

'코딩정보 > IT' 카테고리의 다른 글

[CMD] 배치파일 한글 깨짐 현상 해결 방법  (0) 2024.07.03
[네트워크] ARP 사용방법  (0) 2019.06.12
반응형

안녕하세요

 

코딩하는남자의 코딩연습생입니다

 

이번 블러그에서는 C#에서 MX Component V4의 API를 이용하여 PLC와 통신할 수 있는

 

설정 방법을 다뤄보겠습니다

 

 

1. MX Conmpnent의 Communication Setup Utility를 이용해서 기본 셋팅 한다

    필자가 작성한 게시글중 MX Componnent v4 설정 방법의 게시글을 참고

 

 

2. GX Works2를 실행 및 새 프로젝트 생성해서 간단한 Ladder 코드를 작성하고 GX Simulator를 실행한다

    Ladder코드는 검색을 통해 작성하시기 바란다.

 

 

3. 비쥬얼스튜디오 2017를 실행해서 프조게트를 생성한다

   C#이든 WPF든 생성한다

   

 

 

4, 비쥬얼 스튜디오에 MX Component의 설치 경로에 있는 DLL 파일을 참조 추가 한다

ActEther.dll 은 이더넷 카드를 통해서 LAN선으로 연결하고자 할 사용 가능하다. 다만 설정할 것들이 좀 있다

ActPcUsb.dll은 CPU의 USB Port를 통해서 PLC에 접근하고자 할 때 사용할 수 있다

ActUtlType.dll은 Step1에서 설정한 내용을 기준으로 PLC에 접근이 가능하도록 해준다

 

 

 

5. 비쥬얼 스튜디오 디자인을 다음과 같이 간단하게 한다

 

6. 비쥬얼 스튜디오에서 소스를 입력한다

 

 

소스코드까지 입력하고 난뒤에 프로젝트를 실행한뒤 Logical station number 부분에 MX Component V4에서 설정한

 

station number를 입력한뒤 connect 버튼을 클릭하게 되면 우측 상단의 Connected : 부분에 현재의 PLC의 상태 값이

 

표시된다

 

정상적으로 표시가 된다면 연결에 성공하신것이다

반응형
반응형

안녕하세요

 

코딩하는남자의 코딩 연습생입니다

 

미쯔비시 PLC와 통신하기 위한 MX Componnent v4 설정방법에 대한 글을 게시햇었는데

 

GX Works2 시뮬레이션 환경 설정 방법에 대한 글이 없어 작성하게 되엇습니다

 

해당 글은 실제 미쯔비시 PLC가 없더라도 GX Works2의 시뮬레이션 환경을 통해

 

PLC의 환경을 구성해 줍니다

 

설정 방법은 아래를 참고해 주세요~

 

 

1. GX WORKS2를 설치 한다

   다운 받아서 다음 버튼을 통해 설치하면 되므로 설명은 생략

 

 

2. GX WORKS2를 실행하고 New Project를 실행해서 기본 정보를 입력해서 OK 버튼을 누른다

간단한 Ladder 코드를 자것ㅇ하고 M0가 접점이 이고, D0가 랜덤하고 값을 입력하는 코드

 

 

3. Ladder를 작성 한뒤 Debus > Start/Stop Simulation 클릭

4. 시뮬레이션 가동 상태

    처음 실행시 ERR 발생시 RESET 후 RUN 해야 함

 

 

5. 시뮬레이션 정상 가동인 상태

 

 

 

반응형
반응형

안녕하세요

 

코딩하는 남자의 코딩연습생입니다

 

MSSQL에서 Split 제공 함수가 없습니다

 

그래서 사용자 Function으로 만들어 두시면 프로시져 내부에서 사용하시가 편합니다

 

CREATE FUNCTION arr_split(
    @sText VARCHAR(500), -- 대상 문자열
    @str CHAR(1) = '|', -- 구분기호(Default '|')
    @idx INT -- 배열 인덱스

 )

 

RETURNS VARCHAR(20)
AS
BEGIN
     DECLARE @word CHAR(20), -- 반환할 문자
     @sTextData VARCHAR(600), 
     @num SMALLINT;

      SET @num = 1;
      SET @str = LTRIM(RTRIM(@str));
      SET @sTextData = LTRIM(RTRIM(@sText)) + @str; 

      WHILE @idx >= @num
      BEGIN

             IF CHARINDEX(@str, @sTextData) > 0
             BEGIN
                   -- 문자열의 인덱스 위치의 요소를 반환
                   SET @word = SUBSTRING(@sTextData, 1, CHARINDEX(@str, @sTextData) - 1);
                   SET @word = LTRIM(RTRIM(@word));

                   -- 반환된 문자는 버린후 좌우공백 제거 
                   SET @sTextData = LTRIM(RTRIM(RIGHT(@sTextData, LEN(@sTextData) - (LEN(@word) + 1))))
             END

             ELSE

             BEGIN
                   SET @word = NULL;
             END
             SET @num = @num + 1
      END
   RETURN(@word);
END
반응형
반응형

 

using System;
using System.Data;
using System.Data.OleDb;
class TableAnalysis
{
     static void Main(string[] args)
     {

        string sql = "Provider=MSDAORA.1;Password=tiger;User ID=scott;Data Source=noaa;Persist Security

                        Info=True"; //oracle 서버 연결

        OleDbConnection conn = new OleDbConnection(sql);
        //conn.ConnectionString = sql;

        try
        {
             conn.Open(); //데이터베이스 연결
             OleDbCommand cmd = new OleDbCommand();
             cmd.CommandText = "select * from member"; //member 테이블
             cmd.CommandType = CommandType.Text; //검색명령을 쿼리 형태로
             cmd.Connection = conn;

             OleDbDataReader read = cmd.ExecuteReader(); //select * from member 결과

             Console.WriteLine("***** 테이블 분석 결과 *****");

            

             for (int i = 0; i < read.FieldCount; i++)
             {
                  Console.WriteLine("필드이름 : {0} \n", read.GetName(i));
              }
              Console.WriteLine("총필드 개수는" + read.FieldCount);
              read.Close();
           }

          catch (Exception ex)
           {
               Console.WriteLine("에러발생{0}", ex.Message);
           }
           finally
           {
                if (conn != null)
                {
                      conn.Close(); //데이터베이스 연결 해제
                      Console.WriteLine("데이터베이스 연결 해제..");
                 }
           }
      }
}
반응형
반응형
///<summary>
/// 데이타 테이블을 엑셀로 받아온다.
///</summary>

/// <param name="dt">원본 데이타 테이블.</param>
/// <param name="columns"> 원본 데이타 테이블의 컬럼들.</param>
/// <param name="newcolumns">보여질 테이블의 컬럼들.</param>


private static void DownExcel(System.Data.DataTable dt, string[] columns, string[] newcolumns)
{
      DataGrid grid = new DataGrid();
      System.Data.DataTable targetdt = new System.Data.DataTable();

      for (int i = 0; i < columns.Length; i++)
      {
          System.Data.DataColumn column = new System.Data.DataColumn(newcolumns[i]);
          targetdt.Columns.Add(column);
       }


       for (int i = 0; i < dt.Rows.Count; i++)
       {
           object[] obj = new object[columns.Count()];

           for (int j = 0; j < columns.Length; j++)
                 obj[j] = dt.Rows[i][columns[j]];
                 targetdt.Rows.Add(obj);
       }

       grid.DataSource = targetdt;
       grid.DataBind();

       System.Web.HttpResponse objResponse = System.Web.HttpContext.Current.Response;
       objResponse.ClearContent();
       objResponse.ClearHeaders();
       System.IO.StringWriter stringWrite = new System.IO.StringWriter();
       HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
       grid.RenderControl(htmlWrite);

       objResponse.ContentType = "application/vnd.msexcel";
       objResponse.AddHeader("content", "text/html; charset=utf-8");
       objResponse.AddHeader("content-disposition", "attachment; filename=SearchResults.xls");
       objResponse.Write("");
       objResponse.Write(stringWrite.ToString());
       objResponse.Flush();
       objResponse.Close();
       objResponse.End();
}

 

// 사용법

void btn_ok_Click(object sender, EventArgs e)
{
     string[] columns = { "title", "filename", "view_count", "blogurl" }; // 기존의 컬럼명
     string[] newcolumns = { "제목", "파일명", "조회수", "블로그주소"}; // 새로운 컬럼명
     System.Data.DataTable dt = ds.Tables[1]; // 데이타 테이블
     DownExcel(dt, columns, newcolumns);
}

 

 

반응형
반응형
--서버등록

exec sp_addlinkedserver

@server='', --링크서버이름

@srvproduct='', --OLEDB 데이터 원본 제품이름

@provider='SQLOLEDB', --공급자고유식별자

@datasrc='', --가져올 DB서버 주소

@provstr='', --OLEDB공급자연결문자열

@catalog='' --가져올 db서버 데이터베이스명

go

 

 

--서버등록확인

select * from master.dbo.sysservers

 

 

--연결계정등록

exec sp_addlinkedsrvlogin

@rmtsrvname='' --서버이름

@useself='false' --로그인이름사용유무

@locallogin=NULL, --로컬서버로그인여부

@rmtuser='SA', --사용자이름

@rmtpassword='12345' --사용자암호

 

--원하는 테이블 확인

select * from ssuyastory.KBbank.dbo.employee

 

--연결계정삭제

exec sp_droplinkedsrvlogin

@rmtsrvname = 'ssuyastory',

@locallogin = NULL

 

--연결서버삭제

exec sp_dropserver

@server='ssuyastory'

반응형
반응형

1) alter table A alter column name char(10) not null

    -- char(10) 은 기존 컬럼의 크기 그대로 설정

 

 

 

 

2) alter table A alter column price money not null

    =====================

    보라색 부분들은 필수 구문이고요

    초록색 부분은 해당 테이블, 컬럼 명 넣는 부분

    파랑색부분은 타입 및 , null 설정 부분입니다.

 

>>> ALTER 명령어 정리 <<<<<

alter table 테이블명 add 컬럼명 타입 null설정

>> 해당 컬럼을 해당 타입과 해당 null 설정으로 추가

 

 

alter table 테이블명 drop column 컬럼명

>> 해당 컬럼 삭제

 

 

 

alter table 테이블명 alter column 컬럼명 타입 null설정

>> 해당 컬럼을 해당 타입과 NULL 설정으로 변화

 

반응형

+ Recent posts