본문 바로가기

전체 글317

Smart PC Series 간단한 산업용장비의 제어나 카메라를 이용한 솔루션이 필요 할때 사용하기 위한 하드웨어 입니다. 이 제품들은 PC성능이 그리 중요하지 않고 1. 네트워크 기반의 제어기로 장비제어가 필요 할때 2. MES 구측을 위한 중간 콘솔이 필요 할때 3. PLC기반의 프로젝트에서 카메라의 장착이 필요 할 때 4. 협소한 공간에서 제어 PC의 공간 확보가 힘들어 질때 5.기존의 프로젝트에서 추가 되는 카메라 솔루션이 필요 할때 사용 하기위해 만든 제품 들 입니다. 앞으로 개발계획을 갖고 있는 "i"Series Smart PC도 포함이 되어 있습니다. 2013. 11. 7.
워크샵 다녀왔습니다. (가평 피시클럽) 아이씨티에서 오랜만에 워크샵을 다녀왔습니다. 일정 : 2013.9.5 (목) ~ 9.6 (금) 장소 : 가평 피시클럽 원래는 수상스포츠를 함께 즐겨보려고 수상 스포츠 전문 시설이 있는 장소로 정했는데..9월초 날씨가 예상외로 너무 서늘해서 수상 스포츠는 포기하고 산악 ATV 체험으로 급히 변경하였습니다.산악 ATV는 재미는 있었으나 재미는 있었으나 체험 시간이 좀 짧아서 아쉬움을 남겼고요.다음에 기회가 되면 장거리 ATV체험을 알아보지 않을까합니다. 숙소로 돌아와서 족구와 미니축구를 한것이 가장 재미있었던것 같습니다. 아이씨티 직원들이 대부분 컴퓨터 만 하느라 운동 부족 상태인 사람이 많았는데.. 이번에 몇년만에 가장 운동을 많이 한것 같습니다. 모두들 땀을 뻘뻘 흘리면서 열심히 뛰었고요. 열심히 한 만.. 2013. 9. 9.
"형평성"에 대해서 "형평성" 이란 말은 실현하기가 가장 어려운 단어 중에 하나인것 같다. 회사에서 만드는 제도는 두가지 부류가 있다. 하나는 어떤 행동을 제한하기 위한 것이고 , 다른 하나는 성과(업무)에 대한 보상의 개념이다. 행위를 제한하는 제도의 예를 들면 "무단 결근 5일 이면 퇴사 처리함" 등과 같이 조건 자체가 명료하다. 기준이 명확하기 때문에 형평성 문제도 일어날 가능성이 비교적 적다.하지만 보상을 위한 제도는 보상을 위한 기준과 조건이 너무나 다양한데다가 주관적이 될 수도 있기 때문에 모든 직원을 100% 만족시키는 것은 사실상 불가능하다. 예를들어 밤 10시까지 근무한 사람에게 보상을 위해서 야근 수당을 지급한는 제도를 만들었다면 , 10시 1분까지 근무하고 퇴근 한 사람은 만족할테고, 12시까지 더 열심.. 2013. 7. 28.
SMT 스크린 프린터 제어 SW 개발 스크린 프린터 SW 개발 제어 :모터 12축 제어 비전 : Mark AlignArray Inspection2D Inspection 하기 동영상은 스크린 프린터의 동작 참고용 입니다. 2013. 6. 4.
장비 제어 소프트웨어 개발에 관한 몇 가지 조언 ●●● 장비 제어 개발 및 코딩에 대한 조언 몇가지 ●●● 장비 제어 SW 개발과 관련된 특수한 환경이 있기 때문에 , 일반적인 소프트웨어 개발과는 다른 점이 있을 수 있습니다. ◆ 디버거의 사용은 최소화 하고 로그를 적극 활용하라 . 장비가 동작중일때는 디버거를 사용할 수 없고 문제 생길때마다 디버거에 의존하다 보면 소스 코드 분석 능력이 떨어지게 된다. ◆ 구조를 잡거나 조건을 생각할때는 나무를 보지 말고 숲을 보라. 코딩을 할때는 숲을 보지 말고 나무를 보라. ◆ 고객사 담당자가 원하는것을 얘기하면 원하는대로 해주려고 하지 말고, 그 기능을 원하는 진짜 이유를 먼저 생각해 보고 근본적인 원인을 찾으려고 노력하라 ◆ 고객사 담당자가 원하는 조건을 얘기하면 그 조건만 생각하지 말고 기존의 조건과 그것을.. 2013. 5. 29.
회사 사무실 지도 (성수동 풍림테크원) 서울시 성동구 성수동2가 273-10번지 풍림테크원 405호 2호선 지하철 3번 출구로 나와서 지도의 화살표를 따라 오시면됩니다. 총거리 650M 정도 됩니다. 2013. 5. 3.
(주) 아이씨티 사무실 이전 (주)아이씨티 사무실을 이전 하였습니다. 새주소 : 서울시 성동구 성수동2가 273-10번지 풍림테크원 405호 2013. 5. 3.
함수이름 SetDeviceData에 대해서 bool SetDeviceData( bool get, int iPkIdx) { if( iPkIdx > NUM_OF_PICKER ) { LOG_PRINTFW("INSP",L"Set Device Index[%d] Over Check", iPkIdx ); return false; } //--------------------------------------------------------------------------- // ���� ���� if( get ) // ������ ��� { XEdit *apE[]= { F_SS->E_Dv1, F_SS->E_Dv2, F_SS->E_Dv3, F_SS->E_Dv4, F_SS->E_Dv5, F_SS->E_Dv6, F_SS->E_Dv7, F_SS->E_Dv8, F_SS-.. 2012. 10. 11.
On / Off 상태 표시 UI에 대한 단상 어떤 옵션의 체크 상태나 현재 상태를 표시할때 2가지 종류를 어떤 색깔로 하는것이 좋을까? 옵션이 켜졌을때를 Lime(밝은녹색)으로 하고 꺼져 있을때 Red(적색)으로 하는것을 생각해 볼수 있는데 이 경우에는 적색이 표시될때 옵션이나 상태가 켜져 있다고 생각하는 사용자도 있을 수 있다. 일반적인 예로 Motor Alarm 표시의 경우 적색이 켜지면 Alarm이 발생한 상태이기 때문이다. 그렇다면 적색이 Alarm ON상태이고 off 상태는 Gray(회색)으로 하는것은 어떨까?이런 방식이면 모든 옵션의 표시할때 다음과 같은 규칙으로 일관성을 유지할 수 있다.상태가 ON이면 Lime(밝은녹색)또는 Red(적색) 으로 표시를 하고 상태가 OFF 이면 Gray(회색)으로 표시를 하는것이다. 하지만 이 경우에도 .. 2012. 10. 2.
아진 로봇제어기 ARC-II 사양 및 사용시 고려할점 아진 로봇제어기 ARC-II 하드웨어 구성 ( 본체 + 티칭펜던트 ) 하드웨어 사양 (PC사양과 티칭 펜던트 사양) 기본 제공되는 IO 접점 ( IN/OUT 각각 48점 제공 ) ARC-II의 개발툴인 Motion Host의 특징 ("아진에서 제공하는 매뉴얼 내용 그대로임 " ) - 베이직 방식의 로봇언어 - 4개의 멀티 태스킹 - RS232C, TCP/IP 통신기능 및 전용 통신명령 - Break Point를 지원하는 디버깅 - 컴파일 시 600여 개의 에러를 감지하는 문법 검사 - 실시간 변수 모니터링 - 다양한 응용이 가능한 사용자 함수정의 - 범용 통신 포맷을 위한 다양한 문자열 조작 함수 - 고속입력 접점 지원 - Timer/IO/Position 등 이벤트 기반 함수 - 즉시 대응할 수 있는 F.. 2012. 6. 13.
VCL에서 Control의 위치 및 크기 조정하기 VCL에서 Control의 위치 및 크기 조정하기 Parent-Window의 크기에 가변적으로 Child-Control 의 크기및 위치를 조정하고자 하는 경우에... Form의 Resize이벤트 등에 Control의 위치 및 Size를 조정해주곤 한다. Control->Left = Control->Parent->ClientWidth / 2 ; Control->Top = Control->Parent->ClientHeight / 2 ; Control->Width= Control->Parent->ClientWidth / 4 ; Control->Height= Control->Parent->ClientHeight / 4 ; 그런데 위와같이 코딩을 여러개의 Control에 적용하면 문제점이 발생할수 있다. 그 이유.. 2012. 5. 31.
보조 모니터 좌상단 좌표는 보조 모니터 좌상단 좌표는? 보조 모니터의 좌측상단 좌표는 다음과 같이 Display설정에 따라 다르게 나타난다.주 모니터만 Left/Top이 항상 (0,0) 이구, 보조모니터는 주모니터에 상대 위치값이 된다.만약 현재 모니터(주 또는 보조 모니터)의 좌측상단에 어플을 위치하게 하려면 어떻게 하면 될까?VCL에서는 Form클래스 내에서 다음과 같이 하면 된다.this->Left = this->Monitor->Left; this->Top = this->Monitor->Top; 보조 보니터에서 그냥 Top=0 로 설정한경우에위 4가지 설정중 2번 4번의 경우엔 실제로 화면 상단에 위치하지 않게된다. 그럼.. 2012. 5. 3.
Application->MessageBox() 사용하기 유저 의견 확인용 메시지 다이얼로그 String sMsg; sMsg.sprintf(L"%d개의 이슈를 삭제할까요?", DBG_Issue->SelectedRows->Count); if (Application->MessageBox(sMsg.c_str(), L"삭제 확인", MB_YESNO + MB_ICONWARNING) == IDNO) { return ; } 2012. 4. 25.
DBGrid Multiselect 했을때 각각의 Row 처리 void __fastcall TForm1::Button1Click(TObject *Sender) { if (DBGrid1->SelectedRows->Count > 0) { AnsiString s = ""; TDataSet *pDS = DBGrid1->DataSource->DataSet; for (int i=0; i SelectedRows->Count; i++) { pDS->GotoBookmark((void *)DBGrid1->SelectedRows->Items[i].c_str()); for (int j = 0; j FieldCount; j++) { if (j>0) s = s+", "; s = s + pDS->Fields->Fields[j]->AsString; } ListBox1->Items->Add(s).. 2012. 4. 24.
TComboBox Enter 키로 DropDown 제어하기 DroppedDown을 true 해주면 리스트가 열리지만[ENTER]키 때문에 바로 닫혀버린다. [ENTER] 키로 DropDown을 처리해 주려면 아래와 같이 코딩해야 한다. //--------------------------------------------------------------------------- void __fastcall TF_IssueEditDlg::CB_PrjNameKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if( Key != '\r' ) return ; Key = 0; if( CB_PrjName->DroppedDown ) { CB_PrjName->DroppedDown = false; return; } CB_PrjName.. 2012. 4. 24.