initial commit
This commit is contained in:
14
Handler/.claude/settings.local.json
Normal file
14
Handler/.claude/settings.local.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"Bash(git add:*)",
|
||||
"Bash(git checkout:*)",
|
||||
"Bash(build.bat)",
|
||||
"Bash(cmd /c:*)",
|
||||
"Bash(git commit:*)",
|
||||
"Bash(msbuild:*)",
|
||||
"Bash(dotnet build:*)"
|
||||
],
|
||||
"deny": []
|
||||
}
|
||||
}
|
||||
9
Handler/.gitignore
vendored
Normal file
9
Handler/.gitignore
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
*.suo
|
||||
*.user
|
||||
*.pdb
|
||||
bin
|
||||
obj
|
||||
desktop.ini
|
||||
.vs
|
||||
packages
|
||||
*.zip
|
||||
99
Handler/CLAUDE.md
Normal file
99
Handler/CLAUDE.md
Normal file
@@ -0,0 +1,99 @@
|
||||
# CLAUDE.md
|
||||
|
||||
이 파일은 Claude Code (claude.ai/code)가 이 저장소에서 코드 작업을 할 때 지침을 제공합니다.
|
||||
|
||||
## 프로젝트 개요
|
||||
|
||||
이것은 ATV (Automatic Test Vehicle) 릴 라벨 부착, 수정 및 전송 작업을 위한 산업 자동화 시스템입니다. 시스템은 Windows Forms를 사용하여 C# (.NET Framework 4.8)로 구축되었으며, 모션 컨트롤러, 바코드 리더, 프린터 및 PLC를 포함한 다양한 하드웨어 구성 요소와 통합됩니다.
|
||||
|
||||
## 빌드 명령어
|
||||
|
||||
- **윈도우 환경 cmd 로 실행필요
|
||||
"C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\msbuild.exe" "C:\Data\Source\(5815) ATV Reel Label Attach Modify & Transfer (WMS)\Source\Handler\Project\STDLabelAttach(ATV).csproj" /v:quiet
|
||||
|
||||
|
||||
## 아키텍처 개요
|
||||
|
||||
### 핵심 구성 요소
|
||||
|
||||
- **Project/**: UI 및 비즈니스 로직이 포함된 메인 애플리케이션
|
||||
- 기본 Windows Forms 애플리케이션 포함 (`fMain.cs`)
|
||||
- `RunCode/StateMachine/` 및 `RunCode/Step/`에서 상태 머신 로직 구현
|
||||
- `Device/` 폴더의 디바이스 인터페이스 (KeyenceBarcode, SATOPrinter, TowerLamp 등)
|
||||
- 사용자 상호작용을 위한 다이얼로그 폼
|
||||
|
||||
- **Project_form2/**: 데이터 처리를 위한 보조 수신기 애플리케이션
|
||||
- SID (Serial ID) 변환 및 처리 담당
|
||||
- 고객 정보 관리
|
||||
- 가져오기/내보내기 기능
|
||||
|
||||
- **Sub/**: 공유 라이브러리 및 유틸리티
|
||||
- `arCtl/`: 사용자 정의 UI 컨트롤 및 구성 요소
|
||||
- `arAzinAxt/`: 모션 컨트롤러 인터페이스 (AzinAxt 하드웨어)
|
||||
- `arRS232/`: 시리얼 통신 라이브러리
|
||||
- `AmkorRestfulService/`: 외부 통합을 위한 RESTful API 서비스
|
||||
- `CommSM/`: 상태 머신 통신 라이브러리
|
||||
- `CommUtil/`: 공통 유틸리티 및 다이얼로그
|
||||
|
||||
### 주요 기술
|
||||
|
||||
- **하드웨어 통합**: 모션 컨트롤러 (AzinAxt), 바코드 리더 (Keyence), SATO 프린터
|
||||
- **데이터베이스**: SQL Server를 사용한 Entity Framework 6.2.0
|
||||
- **통신**: 시리얼 (RS232), RESTful API, WebSocket
|
||||
- **비전**: 이미지 처리를 위한 EmguCV
|
||||
- **프로토콜**: 장비 제어를 위한 사용자 정의 상태 머신 구현
|
||||
|
||||
### 상태 머신 아키텍처
|
||||
|
||||
애플리케이션은 포괄적인 상태 머신 패턴을 사용합니다:
|
||||
- `RunCode/Step/`: 주요 작업 단계 (INIT, IDLE, RUN, HOME, FINISH)
|
||||
- `RunCode/StateMachine/`: 핵심 상태 머신 로직 및 이벤트 처리
|
||||
- `RunCode/RunSequence/`: 특정 작업 시퀀스 (바코드 읽기, 인쇄, 피킹)
|
||||
|
||||
### 디바이스 관리
|
||||
|
||||
- 위치 검증이 포함된 `arAzinAxt` 라이브러리를 통한 모션 제어
|
||||
- Keyence 스캐너 통합을 통한 바코드 읽기
|
||||
- SATO 프린터 API를 통한 라벨 인쇄
|
||||
- 안전 및 I/O 제어를 위한 PLC 통신
|
||||
|
||||
## 개발 패턴
|
||||
|
||||
### 구성 관리
|
||||
- 수정을 위한 UI 폼이 포함된 `Setting/` 클래스에 설정 저장
|
||||
- `System_Setting.cs` 및 `System_MotParameter.cs`의 시스템 매개변수
|
||||
- `UserSetting.cs`의 사용자별 설정
|
||||
|
||||
### 데이터 관리
|
||||
- `Model1.edmx`의 Entity Framework 모델
|
||||
- 다양한 데이터 유형을 위한 `Manager/` 폴더의 데이터베이스 관리자
|
||||
- 릴 정보, 결과 및 SID 변환을 위한 구성 요소 클래스
|
||||
|
||||
### UI 패턴
|
||||
- `UIControl/` 폴더의 사용자 정의 컨트롤
|
||||
- `Dialog/` 폴더의 일관된 다이얼로그 패턴
|
||||
- 포함된 이미지 및 아이콘을 사용한 리소스 관리
|
||||
|
||||
## 중요 사항
|
||||
|
||||
- 시스템에는 특정 하드웨어 드라이버가 필요합니다 (AzinAxt 모션 컨트롤러, Keyence SDK, SATO 프린터 드라이버)
|
||||
- 데이터베이스 연결 문자열은 `app.config`에서 구성됩니다
|
||||
- 모션 매개변수는 `MotParam/`의 `.swpp` 및 `.usrs` 파일에 저장됩니다
|
||||
- 애플리케이션은 서로 다른 출력 경로를 가진 Debug 및 Release 구성을 모두 지원합니다
|
||||
- 플랫폼 대상은 일반적으로 하드웨어 호환성을 위해 x64입니다
|
||||
|
||||
## 테스트
|
||||
|
||||
공식적인 단위 테스트 프로젝트는 없습니다. 테스트는 일반적으로 다음을 통해 수행됩니다:
|
||||
- 메인 애플리케이션을 사용한 수동 작업
|
||||
- 실제 장비를 사용한 하드웨어 인 더 루프 테스트
|
||||
- 애플리케이션의 디버그 다이얼로그 및 모니터링 폼
|
||||
|
||||
## 종속성
|
||||
|
||||
주요 외부 종속성은 다음과 같습니다:
|
||||
- Entity Framework 6.2.0
|
||||
- Newtonsoft.Json 13.0.3
|
||||
- EmguCV 4.5.1
|
||||
- 웹 서비스를 위한 Microsoft OWIN 스택
|
||||
- 다양한 하드웨어별 SDK 및 드라이버
|
||||
BIN
Handler/DLL/ArLog.Net4.dll
Normal file
BIN
Handler/DLL/ArLog.Net4.dll
Normal file
Binary file not shown.
BIN
Handler/DLL/CarlosAg.ExcelXmlWriter.dll
Normal file
BIN
Handler/DLL/CarlosAg.ExcelXmlWriter.dll
Normal file
Binary file not shown.
BIN
Handler/DLL/ChilkatDotNet4.dll
Normal file
BIN
Handler/DLL/ChilkatDotNet4.dll
Normal file
Binary file not shown.
BIN
Handler/DLL/Communication.dll
Normal file
BIN
Handler/DLL/Communication.dll
Normal file
Binary file not shown.
BIN
Handler/DLL/Keyence.AutoID.SDK.dll
Normal file
BIN
Handler/DLL/Keyence.AutoID.SDK.dll
Normal file
Binary file not shown.
BIN
Handler/DLL/Newtonsoft.Json.dll
Normal file
BIN
Handler/DLL/Newtonsoft.Json.dll
Normal file
Binary file not shown.
BIN
Handler/DLL/Sato/x64/SATOPrinterAPI.dll
Normal file
BIN
Handler/DLL/Sato/x64/SATOPrinterAPI.dll
Normal file
Binary file not shown.
BIN
Handler/DLL/Sato/x86/SATOPrinterAPI.dll
Normal file
BIN
Handler/DLL/Sato/x86/SATOPrinterAPI.dll
Normal file
Binary file not shown.
BIN
Handler/DLL/VncClientControlCommon.dll
Normal file
BIN
Handler/DLL/VncClientControlCommon.dll
Normal file
Binary file not shown.
BIN
Handler/DLL/VncClientControlCommonLib.dll
Normal file
BIN
Handler/DLL/VncClientControlCommonLib.dll
Normal file
Binary file not shown.
BIN
Handler/DLL/WatsonWebsocket.dll
Normal file
BIN
Handler/DLL/WatsonWebsocket.dll
Normal file
Binary file not shown.
BIN
Handler/DLL/Winsock Orcas.dll
Normal file
BIN
Handler/DLL/Winsock Orcas.dll
Normal file
Binary file not shown.
BIN
Handler/DLL/arControl.Net4.dll
Normal file
BIN
Handler/DLL/arControl.Net4.dll
Normal file
Binary file not shown.
BIN
Handler/DLL/arRS232.Net4.dll
Normal file
BIN
Handler/DLL/arRS232.Net4.dll
Normal file
Binary file not shown.
BIN
Handler/DLL/libxl.dll
Normal file
BIN
Handler/DLL/libxl.dll
Normal file
Binary file not shown.
BIN
Handler/DLL/libxl.net.dll
Normal file
BIN
Handler/DLL/libxl.net.dll
Normal file
Binary file not shown.
BIN
Handler/DLL/libxl/bin64/libxl.dll
Normal file
BIN
Handler/DLL/libxl/bin64/libxl.dll
Normal file
Binary file not shown.
BIN
Handler/DLL/libxl/libxl.net.dll
Normal file
BIN
Handler/DLL/libxl/libxl.net.dll
Normal file
Binary file not shown.
BIN
Handler/MotParam/Mot_Picker_X.swpp
Normal file
BIN
Handler/MotParam/Mot_Picker_X.swpp
Normal file
Binary file not shown.
256
Handler/MotParam/Mot_Picker_X.usrs
Normal file
256
Handler/MotParam/Mot_Picker_X.usrs
Normal file
@@ -0,0 +1,256 @@
|
||||
File-Spec,2
|
||||
FileType,User Parameters Data File
|
||||
Made-by,YASKAWA SigmaWin+ Ver.7
|
||||
DateTime,12/23/2020 11:45:35 AM
|
||||
SERVO-TYPE,SGD7S-2R8A00A
|
||||
SERVO-ID,112
|
||||
SERVO-YMOD,0
|
||||
SERVO-SPEC,00
|
||||
SERVO-SOFT,47
|
||||
SERVO-CAPACITY,400
|
||||
SerialNo,D0205I826810007
|
||||
BTOFlag,1
|
||||
BTO-ID,
|
||||
IS-SUPPORTED,1
|
||||
IS-EDITED,0
|
||||
MachineName,
|
||||
OP-TYPE,
|
||||
OP-ID,65533
|
||||
OP-YMOD,65535
|
||||
OP-SOFT,65535
|
||||
OP1-TYPE,
|
||||
OP1-TYPEID,0
|
||||
OP1-ID,65533
|
||||
OP1-YMOD,65535
|
||||
OP1-YMODTYPE,65535
|
||||
OP1-SOFT,65535
|
||||
OP2-TYPE,
|
||||
OP2-TYPEID,0
|
||||
OP2-ID,65533
|
||||
OP2-YMOD,65535
|
||||
OP2-YMODTYPE,65535
|
||||
OP2-SOFT,65535
|
||||
OP3-TYPE,
|
||||
OP3-TYPEID,0
|
||||
OP3-ID,65533
|
||||
OP3-YMOD,65535
|
||||
OP3-YMODTYPE,65535
|
||||
OP3-SOFT,65535
|
||||
ACCESS-LEVEL,1
|
||||
SpecVersion,65535
|
||||
AXIS-NUM,1
|
||||
MOTOR-TYPE,SGM7J-04AFD21
|
||||
MOTOR-ID,173
|
||||
ENCODER-ID,24
|
||||
ENCODER-SOFT,3
|
||||
ServoControlType,512
|
||||
CompatibleMapNum,6
|
||||
CompatibleMap,0,3,3,6,6,10
|
||||
CommentCnt,0
|
||||
Comment,
|
||||
ServoNameComment,Picker X
|
||||
UserPrmCnt,198
|
||||
UserPrm,000,17,2,1
|
||||
UserPrm,001,0,2,0
|
||||
UserPrm,002,0,2,0
|
||||
UserPrm,006,2,2,0
|
||||
UserPrm,007,0,2,0
|
||||
UserPrm,008,0,2,0
|
||||
UserPrm,009,16,2,0
|
||||
UserPrm,00A,1,2,0
|
||||
UserPrm,00B,256,2,1
|
||||
UserPrm,00C,0,2,0
|
||||
UserPrm,00D,0,2,0
|
||||
UserPrm,00E,0,2,0
|
||||
UserPrm,00F,0,2,0
|
||||
UserPrm,010,1,2,0
|
||||
UserPrm,021,0,2,0
|
||||
UserPrm,040,0,2,0
|
||||
UserPrm,080,0,2,0
|
||||
UserPrm,081,0,2,0
|
||||
UserPrm,100,400,2,0
|
||||
UserPrm,101,2000,2,0
|
||||
UserPrm,102,400,2,0
|
||||
UserPrm,103,100,2,0
|
||||
UserPrm,104,400,2,0
|
||||
UserPrm,105,2000,2,0
|
||||
UserPrm,106,400,2,0
|
||||
UserPrm,109,0,2,0
|
||||
UserPrm,10A,0,2,0
|
||||
UserPrm,10B,0,2,0
|
||||
UserPrm,10C,200,2,0
|
||||
UserPrm,10D,0,2,0
|
||||
UserPrm,10E,0,2,0
|
||||
UserPrm,10F,0,2,0
|
||||
UserPrm,11F,0,2,0
|
||||
UserPrm,121,100,2,0
|
||||
UserPrm,122,100,2,0
|
||||
UserPrm,123,0,2,0
|
||||
UserPrm,124,0,2,0
|
||||
UserPrm,125,100,2,0
|
||||
UserPrm,131,0,2,0
|
||||
UserPrm,132,0,2,0
|
||||
UserPrm,135,0,2,0
|
||||
UserPrm,136,0,2,0
|
||||
UserPrm,139,0,2,0
|
||||
UserPrm,13D,2000,2,0
|
||||
UserPrm,140,256,2,0
|
||||
UserPrm,141,500,2,0
|
||||
UserPrm,142,1000,2,0
|
||||
UserPrm,143,1000,2,0
|
||||
UserPrm,144,1000,2,0
|
||||
UserPrm,145,500,2,0
|
||||
UserPrm,146,700,2,0
|
||||
UserPrm,147,1000,2,0
|
||||
UserPrm,148,500,2,0
|
||||
UserPrm,149,1000,2,0
|
||||
UserPrm,14A,800,2,0
|
||||
UserPrm,14B,100,2,0
|
||||
UserPrm,14F,33,2,0
|
||||
UserPrm,160,16,2,0
|
||||
UserPrm,161,1000,2,0
|
||||
UserPrm,162,100,2,0
|
||||
UserPrm,163,0,2,0
|
||||
UserPrm,164,0,2,0
|
||||
UserPrm,165,0,2,0
|
||||
UserPrm,166,0,2,0
|
||||
UserPrm,170,5121,2,0
|
||||
UserPrm,200,1,2,1
|
||||
UserPrm,205,65535,2,0
|
||||
UserPrm,207,0,2,0
|
||||
UserPrm,20A,32768,4,0
|
||||
UserPrm,20E,16777216,4,1
|
||||
UserPrm,210,20000,4,1
|
||||
UserPrm,212,5000,4,1
|
||||
UserPrm,216,0,2,0
|
||||
UserPrm,217,0,2,0
|
||||
UserPrm,218,1,2,0
|
||||
UserPrm,22A,0,2,0
|
||||
UserPrm,240,0,2,0
|
||||
UserPrm,281,20,2,0
|
||||
UserPrm,300,600,2,0
|
||||
UserPrm,301,100,2,0
|
||||
UserPrm,302,200,2,0
|
||||
UserPrm,303,300,2,0
|
||||
UserPrm,304,50,2,1
|
||||
UserPrm,305,0,2,0
|
||||
UserPrm,306,0,2,0
|
||||
UserPrm,307,40,2,0
|
||||
UserPrm,308,0,2,0
|
||||
UserPrm,30A,0,2,0
|
||||
UserPrm,30C,0,2,0
|
||||
UserPrm,310,0,2,0
|
||||
UserPrm,311,100,2,0
|
||||
UserPrm,312,50,2,0
|
||||
UserPrm,316,10000,2,0
|
||||
UserPrm,324,300,2,0
|
||||
UserPrm,400,30,2,0
|
||||
UserPrm,401,100,2,0
|
||||
UserPrm,402,800,2,0
|
||||
UserPrm,403,800,2,0
|
||||
UserPrm,404,100,2,0
|
||||
UserPrm,405,100,2,0
|
||||
UserPrm,406,800,2,0
|
||||
UserPrm,407,10000,2,0
|
||||
UserPrm,408,0,2,0
|
||||
UserPrm,409,5000,2,0
|
||||
UserPrm,40A,70,2,0
|
||||
UserPrm,40B,0,2,0
|
||||
UserPrm,40C,5000,2,0
|
||||
UserPrm,40D,70,2,0
|
||||
UserPrm,40E,0,2,0
|
||||
UserPrm,40F,5000,2,0
|
||||
UserPrm,410,50,2,0
|
||||
UserPrm,412,100,2,0
|
||||
UserPrm,415,0,2,0
|
||||
UserPrm,416,0,2,0
|
||||
UserPrm,417,5000,2,0
|
||||
UserPrm,418,70,2,0
|
||||
UserPrm,419,0,2,0
|
||||
UserPrm,41A,5000,2,0
|
||||
UserPrm,41B,70,2,0
|
||||
UserPrm,41C,0,2,0
|
||||
UserPrm,41D,5000,2,0
|
||||
UserPrm,41E,70,2,0
|
||||
UserPrm,41F,0,2,0
|
||||
UserPrm,423,0,2,0
|
||||
UserPrm,424,50,2,0
|
||||
UserPrm,425,100,2,0
|
||||
UserPrm,426,0,2,0
|
||||
UserPrm,427,0,2,0
|
||||
UserPrm,456,15,2,0
|
||||
UserPrm,460,257,2,0
|
||||
UserPrm,475,0,2,0
|
||||
UserPrm,476,0,2,0
|
||||
UserPrm,481,400,2,0
|
||||
UserPrm,482,3000,2,0
|
||||
UserPrm,486,25,2,0
|
||||
UserPrm,487,0,2,0
|
||||
UserPrm,488,100,2,0
|
||||
UserPrm,490,100,2,0
|
||||
UserPrm,495,100,2,0
|
||||
UserPrm,498,10,2,0
|
||||
UserPrm,501,10,2,0
|
||||
UserPrm,502,20,2,0
|
||||
UserPrm,503,10,2,0
|
||||
UserPrm,506,0,2,0
|
||||
UserPrm,507,100,2,0
|
||||
UserPrm,508,50,2,0
|
||||
UserPrm,509,20,2,0
|
||||
UserPrm,50A,8448,2,0
|
||||
UserPrm,50B,25923,2,0
|
||||
UserPrm,50C,34952,2,0
|
||||
UserPrm,50D,34952,2,0
|
||||
UserPrm,50E,12817,2,0
|
||||
UserPrm,50F,0,2,0
|
||||
UserPrm,510,0,2,0
|
||||
UserPrm,512,0,2,0
|
||||
UserPrm,513,0,2,0
|
||||
UserPrm,514,0,2,0
|
||||
UserPrm,515,34952,2,0
|
||||
UserPrm,516,34952,2,0
|
||||
UserPrm,517,1620,2,0
|
||||
UserPrm,518,0,2,0
|
||||
UserPrm,519,34952,2,0
|
||||
UserPrm,51B,1000,4,0
|
||||
UserPrm,51E,100,2,0
|
||||
UserPrm,520,5242880,4,0
|
||||
UserPrm,522,7,4,0
|
||||
UserPrm,524,1073741824,4,0
|
||||
UserPrm,526,5242880,4,0
|
||||
UserPrm,528,100,2,0
|
||||
UserPrm,529,10000,2,0
|
||||
UserPrm,52A,20,2,0
|
||||
UserPrm,52B,20,2,0
|
||||
UserPrm,52C,100,2,0
|
||||
UserPrm,52F,4095,2,0
|
||||
UserPrm,530,0,2,0
|
||||
UserPrm,531,32768,4,0
|
||||
UserPrm,533,500,2,0
|
||||
UserPrm,534,100,2,0
|
||||
UserPrm,535,100,2,0
|
||||
UserPrm,536,1,2,0
|
||||
UserPrm,550,0,2,0
|
||||
UserPrm,551,0,2,0
|
||||
UserPrm,552,100,2,0
|
||||
UserPrm,553,100,2,0
|
||||
UserPrm,55A,1,2,0
|
||||
UserPrm,560,400,2,0
|
||||
UserPrm,561,100,2,0
|
||||
UserPrm,600,0,2,0
|
||||
UserPrm,601,0,2,0
|
||||
UserPrm,603,0,2,0
|
||||
UserPrm,604,0,2,0
|
||||
UserPrm,621,0,2,0
|
||||
UserPrm,622,10000,2,0
|
||||
UserPrm,623,10000,2,0
|
||||
UserPrm,624,10,2,0
|
||||
UserPrm,625,100,2,0
|
||||
UserPrm,626,100,4,0
|
||||
UserPrm,628,10,2,0
|
||||
Custom
|
||||
CustomGroupNum,1
|
||||
Gp1_Begin
|
||||
GroupName,
|
||||
Num,0
|
||||
Gp1_End
|
||||
BIN
Handler/MotParam/Mot_Picker_Z.swpp
Normal file
BIN
Handler/MotParam/Mot_Picker_Z.swpp
Normal file
Binary file not shown.
256
Handler/MotParam/Mot_Picker_Z.usrs
Normal file
256
Handler/MotParam/Mot_Picker_Z.usrs
Normal file
@@ -0,0 +1,256 @@
|
||||
File-Spec,2
|
||||
FileType,User Parameters Data File
|
||||
Made-by,YASKAWA SigmaWin+ Ver.7
|
||||
DateTime,12/23/2020 11:46:21 AM
|
||||
SERVO-TYPE,SGD7S-1R6A00A002
|
||||
SERVO-ID,112
|
||||
SERVO-YMOD,0
|
||||
SERVO-SPEC,00
|
||||
SERVO-SOFT,47
|
||||
SERVO-CAPACITY,200
|
||||
SerialNo,1A2036500620011
|
||||
BTOFlag,1
|
||||
BTO-ID,
|
||||
IS-SUPPORTED,1
|
||||
IS-EDITED,0
|
||||
MachineName,
|
||||
OP-TYPE,
|
||||
OP-ID,65533
|
||||
OP-YMOD,65535
|
||||
OP-SOFT,65535
|
||||
OP1-TYPE,
|
||||
OP1-TYPEID,0
|
||||
OP1-ID,65533
|
||||
OP1-YMOD,65535
|
||||
OP1-YMODTYPE,65535
|
||||
OP1-SOFT,65535
|
||||
OP2-TYPE,
|
||||
OP2-TYPEID,0
|
||||
OP2-ID,65533
|
||||
OP2-YMOD,65535
|
||||
OP2-YMODTYPE,65535
|
||||
OP2-SOFT,65535
|
||||
OP3-TYPE,
|
||||
OP3-TYPEID,0
|
||||
OP3-ID,65533
|
||||
OP3-YMOD,65535
|
||||
OP3-YMODTYPE,65535
|
||||
OP3-SOFT,65535
|
||||
ACCESS-LEVEL,1
|
||||
SpecVersion,65535
|
||||
AXIS-NUM,1
|
||||
MOTOR-TYPE,SGM7J-02AFD2C
|
||||
MOTOR-ID,173
|
||||
ENCODER-ID,24
|
||||
ENCODER-SOFT,3
|
||||
ServoControlType,512
|
||||
CompatibleMapNum,6
|
||||
CompatibleMap,0,3,3,6,6,10
|
||||
CommentCnt,0
|
||||
Comment,
|
||||
ServoNameComment,Picker Z
|
||||
UserPrmCnt,198
|
||||
UserPrm,000,17,2,1
|
||||
UserPrm,001,0,2,0
|
||||
UserPrm,002,0,2,0
|
||||
UserPrm,006,2,2,0
|
||||
UserPrm,007,0,2,0
|
||||
UserPrm,008,0,2,0
|
||||
UserPrm,009,16,2,0
|
||||
UserPrm,00A,1,2,0
|
||||
UserPrm,00B,256,2,1
|
||||
UserPrm,00C,0,2,0
|
||||
UserPrm,00D,0,2,0
|
||||
UserPrm,00E,0,2,0
|
||||
UserPrm,00F,0,2,0
|
||||
UserPrm,010,1,2,0
|
||||
UserPrm,021,0,2,0
|
||||
UserPrm,040,0,2,0
|
||||
UserPrm,080,0,2,0
|
||||
UserPrm,081,0,2,0
|
||||
UserPrm,100,400,2,0
|
||||
UserPrm,101,2000,2,0
|
||||
UserPrm,102,400,2,0
|
||||
UserPrm,103,100,2,0
|
||||
UserPrm,104,400,2,0
|
||||
UserPrm,105,2000,2,0
|
||||
UserPrm,106,400,2,0
|
||||
UserPrm,109,0,2,0
|
||||
UserPrm,10A,0,2,0
|
||||
UserPrm,10B,0,2,0
|
||||
UserPrm,10C,200,2,0
|
||||
UserPrm,10D,0,2,0
|
||||
UserPrm,10E,0,2,0
|
||||
UserPrm,10F,0,2,0
|
||||
UserPrm,11F,0,2,0
|
||||
UserPrm,121,100,2,0
|
||||
UserPrm,122,100,2,0
|
||||
UserPrm,123,0,2,0
|
||||
UserPrm,124,0,2,0
|
||||
UserPrm,125,100,2,0
|
||||
UserPrm,131,0,2,0
|
||||
UserPrm,132,0,2,0
|
||||
UserPrm,135,0,2,0
|
||||
UserPrm,136,0,2,0
|
||||
UserPrm,139,0,2,0
|
||||
UserPrm,13D,2000,2,0
|
||||
UserPrm,140,256,2,0
|
||||
UserPrm,141,500,2,0
|
||||
UserPrm,142,1000,2,0
|
||||
UserPrm,143,1000,2,0
|
||||
UserPrm,144,1000,2,0
|
||||
UserPrm,145,500,2,0
|
||||
UserPrm,146,700,2,0
|
||||
UserPrm,147,1000,2,0
|
||||
UserPrm,148,500,2,0
|
||||
UserPrm,149,1000,2,0
|
||||
UserPrm,14A,800,2,0
|
||||
UserPrm,14B,100,2,0
|
||||
UserPrm,14F,33,2,0
|
||||
UserPrm,160,16,2,0
|
||||
UserPrm,161,1000,2,0
|
||||
UserPrm,162,100,2,0
|
||||
UserPrm,163,0,2,0
|
||||
UserPrm,164,0,2,0
|
||||
UserPrm,165,0,2,0
|
||||
UserPrm,166,0,2,0
|
||||
UserPrm,170,5121,2,0
|
||||
UserPrm,200,1,2,1
|
||||
UserPrm,205,65535,2,0
|
||||
UserPrm,207,0,2,0
|
||||
UserPrm,20A,32768,4,0
|
||||
UserPrm,20E,16777216,4,1
|
||||
UserPrm,210,20000,4,1
|
||||
UserPrm,212,5000,4,1
|
||||
UserPrm,216,0,2,0
|
||||
UserPrm,217,0,2,0
|
||||
UserPrm,218,1,2,0
|
||||
UserPrm,22A,0,2,0
|
||||
UserPrm,240,0,2,0
|
||||
UserPrm,281,20,2,0
|
||||
UserPrm,300,600,2,0
|
||||
UserPrm,301,100,2,0
|
||||
UserPrm,302,200,2,0
|
||||
UserPrm,303,300,2,0
|
||||
UserPrm,304,50,2,1
|
||||
UserPrm,305,0,2,0
|
||||
UserPrm,306,0,2,0
|
||||
UserPrm,307,40,2,0
|
||||
UserPrm,308,0,2,0
|
||||
UserPrm,30A,0,2,0
|
||||
UserPrm,30C,0,2,0
|
||||
UserPrm,310,0,2,0
|
||||
UserPrm,311,100,2,0
|
||||
UserPrm,312,50,2,0
|
||||
UserPrm,316,10000,2,0
|
||||
UserPrm,324,300,2,0
|
||||
UserPrm,400,30,2,0
|
||||
UserPrm,401,85,2,1
|
||||
UserPrm,402,800,2,0
|
||||
UserPrm,403,800,2,0
|
||||
UserPrm,404,100,2,0
|
||||
UserPrm,405,100,2,0
|
||||
UserPrm,406,800,2,0
|
||||
UserPrm,407,10000,2,0
|
||||
UserPrm,408,256,2,1
|
||||
UserPrm,409,5000,2,0
|
||||
UserPrm,40A,70,2,0
|
||||
UserPrm,40B,0,2,0
|
||||
UserPrm,40C,1480,2,1
|
||||
UserPrm,40D,150,2,1
|
||||
UserPrm,40E,0,2,0
|
||||
UserPrm,40F,5000,2,0
|
||||
UserPrm,410,50,2,0
|
||||
UserPrm,412,100,2,0
|
||||
UserPrm,415,0,2,0
|
||||
UserPrm,416,0,2,0
|
||||
UserPrm,417,5000,2,0
|
||||
UserPrm,418,70,2,0
|
||||
UserPrm,419,0,2,0
|
||||
UserPrm,41A,5000,2,0
|
||||
UserPrm,41B,70,2,0
|
||||
UserPrm,41C,0,2,0
|
||||
UserPrm,41D,5000,2,0
|
||||
UserPrm,41E,70,2,0
|
||||
UserPrm,41F,0,2,0
|
||||
UserPrm,423,0,2,0
|
||||
UserPrm,424,50,2,0
|
||||
UserPrm,425,100,2,0
|
||||
UserPrm,426,0,2,0
|
||||
UserPrm,427,0,2,0
|
||||
UserPrm,456,15,2,0
|
||||
UserPrm,460,257,2,0
|
||||
UserPrm,475,0,2,0
|
||||
UserPrm,476,0,2,0
|
||||
UserPrm,481,400,2,0
|
||||
UserPrm,482,3000,2,0
|
||||
UserPrm,486,25,2,0
|
||||
UserPrm,487,0,2,0
|
||||
UserPrm,488,100,2,0
|
||||
UserPrm,490,100,2,0
|
||||
UserPrm,495,100,2,0
|
||||
UserPrm,498,10,2,0
|
||||
UserPrm,501,10,2,0
|
||||
UserPrm,502,20,2,0
|
||||
UserPrm,503,10,2,0
|
||||
UserPrm,506,0,2,0
|
||||
UserPrm,507,100,2,0
|
||||
UserPrm,508,50,2,0
|
||||
UserPrm,509,20,2,0
|
||||
UserPrm,50A,8448,2,0
|
||||
UserPrm,50B,25923,2,0
|
||||
UserPrm,50C,34952,2,0
|
||||
UserPrm,50D,34952,2,0
|
||||
UserPrm,50E,12305,2,1
|
||||
UserPrm,50F,512,2,1
|
||||
UserPrm,510,0,2,0
|
||||
UserPrm,512,0,2,0
|
||||
UserPrm,513,0,2,0
|
||||
UserPrm,514,0,2,0
|
||||
UserPrm,515,34952,2,0
|
||||
UserPrm,516,34952,2,0
|
||||
UserPrm,517,1620,2,0
|
||||
UserPrm,518,0,2,0
|
||||
UserPrm,519,34952,2,0
|
||||
UserPrm,51B,1000,4,0
|
||||
UserPrm,51E,100,2,0
|
||||
UserPrm,520,5242880,4,0
|
||||
UserPrm,522,7,4,0
|
||||
UserPrm,524,1073741824,4,0
|
||||
UserPrm,526,5242880,4,0
|
||||
UserPrm,528,100,2,0
|
||||
UserPrm,529,10000,2,0
|
||||
UserPrm,52A,20,2,0
|
||||
UserPrm,52B,20,2,0
|
||||
UserPrm,52C,100,2,0
|
||||
UserPrm,52F,4095,2,0
|
||||
UserPrm,530,0,2,0
|
||||
UserPrm,531,32768,4,0
|
||||
UserPrm,533,500,2,0
|
||||
UserPrm,534,100,2,0
|
||||
UserPrm,535,100,2,0
|
||||
UserPrm,536,1,2,0
|
||||
UserPrm,550,0,2,0
|
||||
UserPrm,551,0,2,0
|
||||
UserPrm,552,100,2,0
|
||||
UserPrm,553,100,2,0
|
||||
UserPrm,55A,1,2,0
|
||||
UserPrm,560,400,2,0
|
||||
UserPrm,561,100,2,0
|
||||
UserPrm,600,0,2,0
|
||||
UserPrm,601,0,2,0
|
||||
UserPrm,603,0,2,0
|
||||
UserPrm,604,0,2,0
|
||||
UserPrm,621,0,2,0
|
||||
UserPrm,622,10000,2,0
|
||||
UserPrm,623,10000,2,0
|
||||
UserPrm,624,10,2,0
|
||||
UserPrm,625,100,2,0
|
||||
UserPrm,626,100,4,0
|
||||
UserPrm,628,10,2,0
|
||||
Custom
|
||||
CustomGroupNum,1
|
||||
Gp1_Begin
|
||||
GroupName,
|
||||
Num,0
|
||||
Gp1_End
|
||||
BIN
Handler/MotParam/Mot_Printer_Y.swpp
Normal file
BIN
Handler/MotParam/Mot_Printer_Y.swpp
Normal file
Binary file not shown.
256
Handler/MotParam/Mot_Printer_Y.usrs
Normal file
256
Handler/MotParam/Mot_Printer_Y.usrs
Normal file
@@ -0,0 +1,256 @@
|
||||
File-Spec,2
|
||||
FileType,User Parameters Data File
|
||||
Made-by,YASKAWA SigmaWin+ Ver.7
|
||||
DateTime,12/29/2020 4:34:27 PM
|
||||
SERVO-TYPE,SGD7S-1R6A00A002
|
||||
SERVO-ID,112
|
||||
SERVO-YMOD,0
|
||||
SERVO-SPEC,00
|
||||
SERVO-SOFT,47
|
||||
SERVO-CAPACITY,200
|
||||
SerialNo,1A2036500620026
|
||||
BTOFlag,1
|
||||
BTO-ID,
|
||||
IS-SUPPORTED,1
|
||||
IS-EDITED,0
|
||||
MachineName,
|
||||
OP-TYPE,
|
||||
OP-ID,65533
|
||||
OP-YMOD,65535
|
||||
OP-SOFT,65535
|
||||
OP1-TYPE,
|
||||
OP1-TYPEID,0
|
||||
OP1-ID,65533
|
||||
OP1-YMOD,65535
|
||||
OP1-YMODTYPE,65535
|
||||
OP1-SOFT,65535
|
||||
OP2-TYPE,
|
||||
OP2-TYPEID,0
|
||||
OP2-ID,65533
|
||||
OP2-YMOD,65535
|
||||
OP2-YMODTYPE,65535
|
||||
OP2-SOFT,65535
|
||||
OP3-TYPE,
|
||||
OP3-TYPEID,0
|
||||
OP3-ID,65533
|
||||
OP3-YMOD,65535
|
||||
OP3-YMODTYPE,65535
|
||||
OP3-SOFT,65535
|
||||
ACCESS-LEVEL,1
|
||||
SpecVersion,65535
|
||||
AXIS-NUM,1
|
||||
MOTOR-TYPE,SGM7J-02AFD21
|
||||
MOTOR-ID,173
|
||||
ENCODER-ID,24
|
||||
ENCODER-SOFT,3
|
||||
ServoControlType,512
|
||||
CompatibleMapNum,6
|
||||
CompatibleMap,0,3,3,6,6,10
|
||||
CommentCnt,0
|
||||
Comment,
|
||||
ServoNameComment,PrintLeft Move
|
||||
UserPrmCnt,198
|
||||
UserPrm,000,16,2,1
|
||||
UserPrm,001,0,2,0
|
||||
UserPrm,002,0,2,0
|
||||
UserPrm,006,2,2,0
|
||||
UserPrm,007,0,2,0
|
||||
UserPrm,008,0,2,0
|
||||
UserPrm,009,16,2,0
|
||||
UserPrm,00A,1,2,0
|
||||
UserPrm,00B,256,2,1
|
||||
UserPrm,00C,0,2,0
|
||||
UserPrm,00D,0,2,0
|
||||
UserPrm,00E,0,2,0
|
||||
UserPrm,00F,0,2,0
|
||||
UserPrm,010,1,2,0
|
||||
UserPrm,021,0,2,0
|
||||
UserPrm,040,0,2,0
|
||||
UserPrm,080,0,2,0
|
||||
UserPrm,081,0,2,0
|
||||
UserPrm,100,600,2,1
|
||||
UserPrm,101,2000,2,0
|
||||
UserPrm,102,600,2,1
|
||||
UserPrm,103,3000,2,1
|
||||
UserPrm,104,400,2,0
|
||||
UserPrm,105,2000,2,0
|
||||
UserPrm,106,400,2,0
|
||||
UserPrm,109,0,2,0
|
||||
UserPrm,10A,0,2,0
|
||||
UserPrm,10B,0,2,0
|
||||
UserPrm,10C,200,2,0
|
||||
UserPrm,10D,0,2,0
|
||||
UserPrm,10E,0,2,0
|
||||
UserPrm,10F,0,2,0
|
||||
UserPrm,11F,0,2,0
|
||||
UserPrm,121,100,2,0
|
||||
UserPrm,122,100,2,0
|
||||
UserPrm,123,0,2,0
|
||||
UserPrm,124,0,2,0
|
||||
UserPrm,125,100,2,0
|
||||
UserPrm,131,0,2,0
|
||||
UserPrm,132,0,2,0
|
||||
UserPrm,135,0,2,0
|
||||
UserPrm,136,0,2,0
|
||||
UserPrm,139,0,2,0
|
||||
UserPrm,13D,2000,2,0
|
||||
UserPrm,140,256,2,0
|
||||
UserPrm,141,500,2,0
|
||||
UserPrm,142,1000,2,0
|
||||
UserPrm,143,1000,2,0
|
||||
UserPrm,144,1000,2,0
|
||||
UserPrm,145,500,2,0
|
||||
UserPrm,146,700,2,0
|
||||
UserPrm,147,1000,2,0
|
||||
UserPrm,148,500,2,0
|
||||
UserPrm,149,1000,2,0
|
||||
UserPrm,14A,800,2,0
|
||||
UserPrm,14B,100,2,0
|
||||
UserPrm,14F,33,2,0
|
||||
UserPrm,160,16,2,0
|
||||
UserPrm,161,1000,2,0
|
||||
UserPrm,162,100,2,0
|
||||
UserPrm,163,0,2,0
|
||||
UserPrm,164,0,2,0
|
||||
UserPrm,165,0,2,0
|
||||
UserPrm,166,0,2,0
|
||||
UserPrm,170,5120,2,1
|
||||
UserPrm,200,1,2,1
|
||||
UserPrm,205,65535,2,0
|
||||
UserPrm,207,0,2,0
|
||||
UserPrm,20A,32768,4,0
|
||||
UserPrm,20E,16777216,4,1
|
||||
UserPrm,210,46000,4,1
|
||||
UserPrm,212,11500,4,1
|
||||
UserPrm,216,0,2,0
|
||||
UserPrm,217,0,2,0
|
||||
UserPrm,218,1,2,0
|
||||
UserPrm,22A,0,2,0
|
||||
UserPrm,240,0,2,0
|
||||
UserPrm,281,20,2,0
|
||||
UserPrm,300,600,2,0
|
||||
UserPrm,301,100,2,0
|
||||
UserPrm,302,200,2,0
|
||||
UserPrm,303,300,2,0
|
||||
UserPrm,304,50,2,1
|
||||
UserPrm,305,0,2,0
|
||||
UserPrm,306,0,2,0
|
||||
UserPrm,307,40,2,0
|
||||
UserPrm,308,0,2,0
|
||||
UserPrm,30A,0,2,0
|
||||
UserPrm,30C,0,2,0
|
||||
UserPrm,310,0,2,0
|
||||
UserPrm,311,100,2,0
|
||||
UserPrm,312,50,2,0
|
||||
UserPrm,316,10000,2,0
|
||||
UserPrm,324,300,2,0
|
||||
UserPrm,400,90,2,1
|
||||
UserPrm,401,400,2,1
|
||||
UserPrm,402,800,2,0
|
||||
UserPrm,403,800,2,0
|
||||
UserPrm,404,800,2,1
|
||||
UserPrm,405,800,2,1
|
||||
UserPrm,406,800,2,0
|
||||
UserPrm,407,10000,2,0
|
||||
UserPrm,408,0,2,0
|
||||
UserPrm,409,5000,2,0
|
||||
UserPrm,40A,70,2,0
|
||||
UserPrm,40B,0,2,0
|
||||
UserPrm,40C,5000,2,0
|
||||
UserPrm,40D,70,2,0
|
||||
UserPrm,40E,0,2,0
|
||||
UserPrm,40F,5000,2,0
|
||||
UserPrm,410,50,2,0
|
||||
UserPrm,412,100,2,0
|
||||
UserPrm,415,0,2,0
|
||||
UserPrm,416,0,2,0
|
||||
UserPrm,417,5000,2,0
|
||||
UserPrm,418,70,2,0
|
||||
UserPrm,419,0,2,0
|
||||
UserPrm,41A,5000,2,0
|
||||
UserPrm,41B,70,2,0
|
||||
UserPrm,41C,0,2,0
|
||||
UserPrm,41D,5000,2,0
|
||||
UserPrm,41E,70,2,0
|
||||
UserPrm,41F,0,2,0
|
||||
UserPrm,423,0,2,0
|
||||
UserPrm,424,50,2,0
|
||||
UserPrm,425,100,2,0
|
||||
UserPrm,426,0,2,0
|
||||
UserPrm,427,0,2,0
|
||||
UserPrm,456,15,2,0
|
||||
UserPrm,460,257,2,0
|
||||
UserPrm,475,0,2,0
|
||||
UserPrm,476,0,2,0
|
||||
UserPrm,481,400,2,0
|
||||
UserPrm,482,3000,2,0
|
||||
UserPrm,486,25,2,0
|
||||
UserPrm,487,0,2,0
|
||||
UserPrm,488,100,2,0
|
||||
UserPrm,490,100,2,0
|
||||
UserPrm,495,100,2,0
|
||||
UserPrm,498,10,2,0
|
||||
UserPrm,501,10,2,0
|
||||
UserPrm,502,20,2,0
|
||||
UserPrm,503,10,2,0
|
||||
UserPrm,506,0,2,0
|
||||
UserPrm,507,100,2,0
|
||||
UserPrm,508,50,2,0
|
||||
UserPrm,509,20,2,0
|
||||
UserPrm,50A,33025,2,1
|
||||
UserPrm,50B,25928,2,1
|
||||
UserPrm,50C,34952,2,0
|
||||
UserPrm,50D,34952,2,0
|
||||
UserPrm,50E,12817,2,0
|
||||
UserPrm,50F,0,2,0
|
||||
UserPrm,510,0,2,0
|
||||
UserPrm,512,0,2,0
|
||||
UserPrm,513,0,2,0
|
||||
UserPrm,514,0,2,0
|
||||
UserPrm,515,34952,2,0
|
||||
UserPrm,516,34952,2,0
|
||||
UserPrm,517,1620,2,0
|
||||
UserPrm,518,0,2,0
|
||||
UserPrm,519,34952,2,0
|
||||
UserPrm,51B,1000,4,0
|
||||
UserPrm,51E,100,2,0
|
||||
UserPrm,520,5242880,4,0
|
||||
UserPrm,522,7,4,0
|
||||
UserPrm,524,1073741824,4,0
|
||||
UserPrm,526,5242880,4,0
|
||||
UserPrm,528,100,2,0
|
||||
UserPrm,529,10000,2,0
|
||||
UserPrm,52A,20,2,0
|
||||
UserPrm,52B,20,2,0
|
||||
UserPrm,52C,100,2,0
|
||||
UserPrm,52F,4095,2,0
|
||||
UserPrm,530,5,2,1
|
||||
UserPrm,531,2000,4,1
|
||||
UserPrm,533,100,2,1
|
||||
UserPrm,534,100,2,0
|
||||
UserPrm,535,3,2,1
|
||||
UserPrm,536,0,2,1
|
||||
UserPrm,550,0,2,0
|
||||
UserPrm,551,0,2,0
|
||||
UserPrm,552,100,2,0
|
||||
UserPrm,553,100,2,0
|
||||
UserPrm,55A,1,2,0
|
||||
UserPrm,560,400,2,0
|
||||
UserPrm,561,100,2,0
|
||||
UserPrm,600,0,2,0
|
||||
UserPrm,601,0,2,0
|
||||
UserPrm,603,0,2,0
|
||||
UserPrm,604,0,2,0
|
||||
UserPrm,621,0,2,0
|
||||
UserPrm,622,10000,2,0
|
||||
UserPrm,623,10000,2,0
|
||||
UserPrm,624,10,2,0
|
||||
UserPrm,625,100,2,0
|
||||
UserPrm,626,100,4,0
|
||||
UserPrm,628,10,2,0
|
||||
Custom
|
||||
CustomGroupNum,1
|
||||
Gp1_Begin
|
||||
GroupName,
|
||||
Num,0
|
||||
Gp1_End
|
||||
BIN
Handler/MotParam/Mot_Printer_Z.swpp
Normal file
BIN
Handler/MotParam/Mot_Printer_Z.swpp
Normal file
Binary file not shown.
256
Handler/MotParam/Mot_Printer_Z.usrs
Normal file
256
Handler/MotParam/Mot_Printer_Z.usrs
Normal file
@@ -0,0 +1,256 @@
|
||||
File-Spec,2
|
||||
FileType,User Parameters Data File
|
||||
Made-by,YASKAWA SigmaWin+ Ver.7
|
||||
DateTime,12/29/2020 4:42:26 PM
|
||||
SERVO-TYPE,SGD7S-1R6A00A002
|
||||
SERVO-ID,112
|
||||
SERVO-YMOD,0
|
||||
SERVO-SPEC,00
|
||||
SERVO-SOFT,47
|
||||
SERVO-CAPACITY,200
|
||||
SerialNo,1A2046912320009
|
||||
BTOFlag,1
|
||||
BTO-ID,
|
||||
IS-SUPPORTED,1
|
||||
IS-EDITED,0
|
||||
MachineName,
|
||||
OP-TYPE,
|
||||
OP-ID,65533
|
||||
OP-YMOD,65535
|
||||
OP-SOFT,65535
|
||||
OP1-TYPE,
|
||||
OP1-TYPEID,0
|
||||
OP1-ID,65533
|
||||
OP1-YMOD,65535
|
||||
OP1-YMODTYPE,65535
|
||||
OP1-SOFT,65535
|
||||
OP2-TYPE,
|
||||
OP2-TYPEID,0
|
||||
OP2-ID,65533
|
||||
OP2-YMOD,65535
|
||||
OP2-YMODTYPE,65535
|
||||
OP2-SOFT,65535
|
||||
OP3-TYPE,
|
||||
OP3-TYPEID,0
|
||||
OP3-ID,65533
|
||||
OP3-YMOD,65535
|
||||
OP3-YMODTYPE,65535
|
||||
OP3-SOFT,65535
|
||||
ACCESS-LEVEL,1
|
||||
SpecVersion,65535
|
||||
AXIS-NUM,1
|
||||
MOTOR-TYPE,SGM7J-02AFD2C
|
||||
MOTOR-ID,173
|
||||
ENCODER-ID,24
|
||||
ENCODER-SOFT,3
|
||||
ServoControlType,512
|
||||
CompatibleMapNum,6
|
||||
CompatibleMap,0,3,3,6,6,10
|
||||
CommentCnt,0
|
||||
Comment,
|
||||
ServoNameComment,Print Left Up/Dn
|
||||
UserPrmCnt,198
|
||||
UserPrm,000,17,2,1
|
||||
UserPrm,001,0,2,0
|
||||
UserPrm,002,0,2,0
|
||||
UserPrm,006,2,2,0
|
||||
UserPrm,007,0,2,0
|
||||
UserPrm,008,0,2,0
|
||||
UserPrm,009,16,2,0
|
||||
UserPrm,00A,1,2,0
|
||||
UserPrm,00B,256,2,1
|
||||
UserPrm,00C,0,2,0
|
||||
UserPrm,00D,0,2,0
|
||||
UserPrm,00E,0,2,0
|
||||
UserPrm,00F,0,2,0
|
||||
UserPrm,010,1,2,0
|
||||
UserPrm,021,0,2,0
|
||||
UserPrm,040,0,2,0
|
||||
UserPrm,080,0,2,0
|
||||
UserPrm,081,0,2,0
|
||||
UserPrm,100,400,2,0
|
||||
UserPrm,101,2000,2,0
|
||||
UserPrm,102,400,2,0
|
||||
UserPrm,103,100,2,0
|
||||
UserPrm,104,400,2,0
|
||||
UserPrm,105,2000,2,0
|
||||
UserPrm,106,400,2,0
|
||||
UserPrm,109,0,2,0
|
||||
UserPrm,10A,0,2,0
|
||||
UserPrm,10B,0,2,0
|
||||
UserPrm,10C,200,2,0
|
||||
UserPrm,10D,0,2,0
|
||||
UserPrm,10E,0,2,0
|
||||
UserPrm,10F,0,2,0
|
||||
UserPrm,11F,0,2,0
|
||||
UserPrm,121,100,2,0
|
||||
UserPrm,122,100,2,0
|
||||
UserPrm,123,0,2,0
|
||||
UserPrm,124,0,2,0
|
||||
UserPrm,125,100,2,0
|
||||
UserPrm,131,0,2,0
|
||||
UserPrm,132,0,2,0
|
||||
UserPrm,135,0,2,0
|
||||
UserPrm,136,0,2,0
|
||||
UserPrm,139,0,2,0
|
||||
UserPrm,13D,2000,2,0
|
||||
UserPrm,140,256,2,0
|
||||
UserPrm,141,500,2,0
|
||||
UserPrm,142,1000,2,0
|
||||
UserPrm,143,1000,2,0
|
||||
UserPrm,144,1000,2,0
|
||||
UserPrm,145,500,2,0
|
||||
UserPrm,146,700,2,0
|
||||
UserPrm,147,1000,2,0
|
||||
UserPrm,148,500,2,0
|
||||
UserPrm,149,1000,2,0
|
||||
UserPrm,14A,800,2,0
|
||||
UserPrm,14B,100,2,0
|
||||
UserPrm,14F,33,2,0
|
||||
UserPrm,160,16,2,0
|
||||
UserPrm,161,1000,2,0
|
||||
UserPrm,162,100,2,0
|
||||
UserPrm,163,0,2,0
|
||||
UserPrm,164,0,2,0
|
||||
UserPrm,165,0,2,0
|
||||
UserPrm,166,0,2,0
|
||||
UserPrm,170,5121,2,0
|
||||
UserPrm,200,1,2,1
|
||||
UserPrm,205,65535,2,0
|
||||
UserPrm,207,0,2,0
|
||||
UserPrm,20A,32768,4,0
|
||||
UserPrm,20E,16777216,4,1
|
||||
UserPrm,210,10000,4,1
|
||||
UserPrm,212,2500,4,1
|
||||
UserPrm,216,0,2,0
|
||||
UserPrm,217,0,2,0
|
||||
UserPrm,218,1,2,0
|
||||
UserPrm,22A,0,2,0
|
||||
UserPrm,240,0,2,0
|
||||
UserPrm,281,20,2,0
|
||||
UserPrm,300,600,2,0
|
||||
UserPrm,301,100,2,0
|
||||
UserPrm,302,200,2,0
|
||||
UserPrm,303,300,2,0
|
||||
UserPrm,304,50,2,1
|
||||
UserPrm,305,0,2,0
|
||||
UserPrm,306,0,2,0
|
||||
UserPrm,307,40,2,0
|
||||
UserPrm,308,0,2,0
|
||||
UserPrm,30A,0,2,0
|
||||
UserPrm,30C,0,2,0
|
||||
UserPrm,310,0,2,0
|
||||
UserPrm,311,100,2,0
|
||||
UserPrm,312,50,2,0
|
||||
UserPrm,316,10000,2,0
|
||||
UserPrm,324,300,2,0
|
||||
UserPrm,400,30,2,0
|
||||
UserPrm,401,85,2,1
|
||||
UserPrm,402,800,2,0
|
||||
UserPrm,403,800,2,0
|
||||
UserPrm,404,100,2,0
|
||||
UserPrm,405,100,2,0
|
||||
UserPrm,406,800,2,0
|
||||
UserPrm,407,10000,2,0
|
||||
UserPrm,408,256,2,1
|
||||
UserPrm,409,5000,2,0
|
||||
UserPrm,40A,70,2,0
|
||||
UserPrm,40B,0,2,0
|
||||
UserPrm,40C,1480,2,1
|
||||
UserPrm,40D,150,2,1
|
||||
UserPrm,40E,0,2,0
|
||||
UserPrm,40F,5000,2,0
|
||||
UserPrm,410,50,2,0
|
||||
UserPrm,412,100,2,0
|
||||
UserPrm,415,0,2,0
|
||||
UserPrm,416,0,2,0
|
||||
UserPrm,417,5000,2,0
|
||||
UserPrm,418,70,2,0
|
||||
UserPrm,419,0,2,0
|
||||
UserPrm,41A,5000,2,0
|
||||
UserPrm,41B,70,2,0
|
||||
UserPrm,41C,0,2,0
|
||||
UserPrm,41D,5000,2,0
|
||||
UserPrm,41E,70,2,0
|
||||
UserPrm,41F,0,2,0
|
||||
UserPrm,423,0,2,0
|
||||
UserPrm,424,50,2,0
|
||||
UserPrm,425,100,2,0
|
||||
UserPrm,426,0,2,0
|
||||
UserPrm,427,0,2,0
|
||||
UserPrm,456,15,2,0
|
||||
UserPrm,460,257,2,0
|
||||
UserPrm,475,0,2,0
|
||||
UserPrm,476,0,2,0
|
||||
UserPrm,481,400,2,0
|
||||
UserPrm,482,3000,2,0
|
||||
UserPrm,486,25,2,0
|
||||
UserPrm,487,0,2,0
|
||||
UserPrm,488,100,2,0
|
||||
UserPrm,490,100,2,0
|
||||
UserPrm,495,100,2,0
|
||||
UserPrm,498,10,2,0
|
||||
UserPrm,501,10,2,0
|
||||
UserPrm,502,20,2,0
|
||||
UserPrm,503,10,2,0
|
||||
UserPrm,506,0,2,0
|
||||
UserPrm,507,100,2,0
|
||||
UserPrm,508,50,2,0
|
||||
UserPrm,509,20,2,0
|
||||
UserPrm,50A,8448,2,0
|
||||
UserPrm,50B,25923,2,0
|
||||
UserPrm,50C,34952,2,0
|
||||
UserPrm,50D,34952,2,0
|
||||
UserPrm,50E,12305,2,1
|
||||
UserPrm,50F,512,2,1
|
||||
UserPrm,510,0,2,0
|
||||
UserPrm,512,0,2,0
|
||||
UserPrm,513,0,2,0
|
||||
UserPrm,514,0,2,0
|
||||
UserPrm,515,34952,2,0
|
||||
UserPrm,516,34952,2,0
|
||||
UserPrm,517,1620,2,0
|
||||
UserPrm,518,0,2,0
|
||||
UserPrm,519,34952,2,0
|
||||
UserPrm,51B,1000,4,0
|
||||
UserPrm,51E,100,2,0
|
||||
UserPrm,520,5242880,4,0
|
||||
UserPrm,522,7,4,0
|
||||
UserPrm,524,1073741824,4,0
|
||||
UserPrm,526,5242880,4,0
|
||||
UserPrm,528,100,2,0
|
||||
UserPrm,529,10000,2,0
|
||||
UserPrm,52A,20,2,0
|
||||
UserPrm,52B,20,2,0
|
||||
UserPrm,52C,100,2,0
|
||||
UserPrm,52F,4095,2,0
|
||||
UserPrm,530,0,2,0
|
||||
UserPrm,531,32768,4,0
|
||||
UserPrm,533,500,2,0
|
||||
UserPrm,534,100,2,0
|
||||
UserPrm,535,100,2,0
|
||||
UserPrm,536,1,2,0
|
||||
UserPrm,550,0,2,0
|
||||
UserPrm,551,0,2,0
|
||||
UserPrm,552,100,2,0
|
||||
UserPrm,553,100,2,0
|
||||
UserPrm,55A,1,2,0
|
||||
UserPrm,560,400,2,0
|
||||
UserPrm,561,100,2,0
|
||||
UserPrm,600,0,2,0
|
||||
UserPrm,601,0,2,0
|
||||
UserPrm,603,0,2,0
|
||||
UserPrm,604,0,2,0
|
||||
UserPrm,621,0,2,0
|
||||
UserPrm,622,10000,2,0
|
||||
UserPrm,623,10000,2,0
|
||||
UserPrm,624,10,2,0
|
||||
UserPrm,625,100,2,0
|
||||
UserPrm,626,100,4,0
|
||||
UserPrm,628,10,2,0
|
||||
Custom
|
||||
CustomGroupNum,1
|
||||
Gp1_Begin
|
||||
GroupName,
|
||||
Num,0
|
||||
Gp1_End
|
||||
BIN
Handler/MotParam/Mot_Theta.swpp
Normal file
BIN
Handler/MotParam/Mot_Theta.swpp
Normal file
Binary file not shown.
256
Handler/MotParam/Mot_Theta.usrs
Normal file
256
Handler/MotParam/Mot_Theta.usrs
Normal file
@@ -0,0 +1,256 @@
|
||||
File-Spec,2
|
||||
FileType,User Parameters Data File
|
||||
Made-by,YASKAWA SigmaWin+ Ver.7
|
||||
DateTime,12/23/2020 11:42:01 AM
|
||||
SERVO-TYPE,SGD7S-1R6A00A002
|
||||
SERVO-ID,112
|
||||
SERVO-YMOD,0
|
||||
SERVO-SPEC,00
|
||||
SERVO-SOFT,47
|
||||
SERVO-CAPACITY,200
|
||||
SerialNo,1A2036500620098
|
||||
BTOFlag,1
|
||||
BTO-ID,
|
||||
IS-SUPPORTED,1
|
||||
IS-EDITED,0
|
||||
MachineName,
|
||||
OP-TYPE,
|
||||
OP-ID,65533
|
||||
OP-YMOD,65535
|
||||
OP-SOFT,65535
|
||||
OP1-TYPE,
|
||||
OP1-TYPEID,0
|
||||
OP1-ID,65533
|
||||
OP1-YMOD,65535
|
||||
OP1-YMODTYPE,65535
|
||||
OP1-SOFT,65535
|
||||
OP2-TYPE,
|
||||
OP2-TYPEID,0
|
||||
OP2-ID,65533
|
||||
OP2-YMOD,65535
|
||||
OP2-YMODTYPE,65535
|
||||
OP2-SOFT,65535
|
||||
OP3-TYPE,
|
||||
OP3-TYPEID,0
|
||||
OP3-ID,65533
|
||||
OP3-YMOD,65535
|
||||
OP3-YMODTYPE,65535
|
||||
OP3-SOFT,65535
|
||||
ACCESS-LEVEL,1
|
||||
SpecVersion,65535
|
||||
AXIS-NUM,1
|
||||
MOTOR-TYPE,SGM7J-02AFD21
|
||||
MOTOR-ID,173
|
||||
ENCODER-ID,24
|
||||
ENCODER-SOFT,3
|
||||
ServoControlType,512
|
||||
CompatibleMapNum,6
|
||||
CompatibleMap,0,3,3,6,6,10
|
||||
CommentCnt,0
|
||||
Comment,
|
||||
ServoNameComment,Picker Theta
|
||||
UserPrmCnt,198
|
||||
UserPrm,000,17,2,1
|
||||
UserPrm,001,0,2,0
|
||||
UserPrm,002,0,2,0
|
||||
UserPrm,006,2,2,0
|
||||
UserPrm,007,0,2,0
|
||||
UserPrm,008,0,2,0
|
||||
UserPrm,009,16,2,0
|
||||
UserPrm,00A,1,2,0
|
||||
UserPrm,00B,256,2,1
|
||||
UserPrm,00C,0,2,0
|
||||
UserPrm,00D,0,2,0
|
||||
UserPrm,00E,0,2,0
|
||||
UserPrm,00F,0,2,0
|
||||
UserPrm,010,1,2,0
|
||||
UserPrm,021,0,2,0
|
||||
UserPrm,040,0,2,0
|
||||
UserPrm,080,0,2,0
|
||||
UserPrm,081,0,2,0
|
||||
UserPrm,100,400,2,0
|
||||
UserPrm,101,2000,2,0
|
||||
UserPrm,102,400,2,0
|
||||
UserPrm,103,100,2,0
|
||||
UserPrm,104,400,2,0
|
||||
UserPrm,105,2000,2,0
|
||||
UserPrm,106,400,2,0
|
||||
UserPrm,109,0,2,0
|
||||
UserPrm,10A,0,2,0
|
||||
UserPrm,10B,0,2,0
|
||||
UserPrm,10C,200,2,0
|
||||
UserPrm,10D,0,2,0
|
||||
UserPrm,10E,0,2,0
|
||||
UserPrm,10F,0,2,0
|
||||
UserPrm,11F,0,2,0
|
||||
UserPrm,121,100,2,0
|
||||
UserPrm,122,100,2,0
|
||||
UserPrm,123,0,2,0
|
||||
UserPrm,124,0,2,0
|
||||
UserPrm,125,100,2,0
|
||||
UserPrm,131,0,2,0
|
||||
UserPrm,132,0,2,0
|
||||
UserPrm,135,0,2,0
|
||||
UserPrm,136,0,2,0
|
||||
UserPrm,139,0,2,0
|
||||
UserPrm,13D,2000,2,0
|
||||
UserPrm,140,256,2,0
|
||||
UserPrm,141,500,2,0
|
||||
UserPrm,142,1000,2,0
|
||||
UserPrm,143,1000,2,0
|
||||
UserPrm,144,1000,2,0
|
||||
UserPrm,145,500,2,0
|
||||
UserPrm,146,700,2,0
|
||||
UserPrm,147,1000,2,0
|
||||
UserPrm,148,500,2,0
|
||||
UserPrm,149,1000,2,0
|
||||
UserPrm,14A,800,2,0
|
||||
UserPrm,14B,100,2,0
|
||||
UserPrm,14F,33,2,0
|
||||
UserPrm,160,16,2,0
|
||||
UserPrm,161,1000,2,0
|
||||
UserPrm,162,100,2,0
|
||||
UserPrm,163,0,2,0
|
||||
UserPrm,164,0,2,0
|
||||
UserPrm,165,0,2,0
|
||||
UserPrm,166,0,2,0
|
||||
UserPrm,170,5121,2,0
|
||||
UserPrm,200,1,2,1
|
||||
UserPrm,205,65535,2,0
|
||||
UserPrm,207,0,2,0
|
||||
UserPrm,20A,32768,4,0
|
||||
UserPrm,20E,16777216,4,1
|
||||
UserPrm,210,20000,4,1
|
||||
UserPrm,212,5000,4,1
|
||||
UserPrm,216,0,2,0
|
||||
UserPrm,217,0,2,0
|
||||
UserPrm,218,1,2,0
|
||||
UserPrm,22A,0,2,0
|
||||
UserPrm,240,0,2,0
|
||||
UserPrm,281,20,2,0
|
||||
UserPrm,300,600,2,0
|
||||
UserPrm,301,100,2,0
|
||||
UserPrm,302,200,2,0
|
||||
UserPrm,303,300,2,0
|
||||
UserPrm,304,200,2,1
|
||||
UserPrm,305,0,2,0
|
||||
UserPrm,306,0,2,0
|
||||
UserPrm,307,40,2,0
|
||||
UserPrm,308,0,2,0
|
||||
UserPrm,30A,0,2,0
|
||||
UserPrm,30C,0,2,0
|
||||
UserPrm,310,0,2,0
|
||||
UserPrm,311,100,2,0
|
||||
UserPrm,312,50,2,0
|
||||
UserPrm,316,10000,2,0
|
||||
UserPrm,324,300,2,0
|
||||
UserPrm,400,30,2,0
|
||||
UserPrm,401,100,2,0
|
||||
UserPrm,402,800,2,0
|
||||
UserPrm,403,800,2,0
|
||||
UserPrm,404,100,2,0
|
||||
UserPrm,405,100,2,0
|
||||
UserPrm,406,800,2,0
|
||||
UserPrm,407,10000,2,0
|
||||
UserPrm,408,0,2,0
|
||||
UserPrm,409,5000,2,0
|
||||
UserPrm,40A,70,2,0
|
||||
UserPrm,40B,0,2,0
|
||||
UserPrm,40C,5000,2,0
|
||||
UserPrm,40D,70,2,0
|
||||
UserPrm,40E,0,2,0
|
||||
UserPrm,40F,5000,2,0
|
||||
UserPrm,410,50,2,0
|
||||
UserPrm,412,100,2,0
|
||||
UserPrm,415,0,2,0
|
||||
UserPrm,416,0,2,0
|
||||
UserPrm,417,5000,2,0
|
||||
UserPrm,418,70,2,0
|
||||
UserPrm,419,0,2,0
|
||||
UserPrm,41A,5000,2,0
|
||||
UserPrm,41B,70,2,0
|
||||
UserPrm,41C,0,2,0
|
||||
UserPrm,41D,5000,2,0
|
||||
UserPrm,41E,70,2,0
|
||||
UserPrm,41F,0,2,0
|
||||
UserPrm,423,0,2,0
|
||||
UserPrm,424,50,2,0
|
||||
UserPrm,425,100,2,0
|
||||
UserPrm,426,0,2,0
|
||||
UserPrm,427,0,2,0
|
||||
UserPrm,456,15,2,0
|
||||
UserPrm,460,257,2,0
|
||||
UserPrm,475,0,2,0
|
||||
UserPrm,476,0,2,0
|
||||
UserPrm,481,400,2,0
|
||||
UserPrm,482,3000,2,0
|
||||
UserPrm,486,25,2,0
|
||||
UserPrm,487,0,2,0
|
||||
UserPrm,488,100,2,0
|
||||
UserPrm,490,100,2,0
|
||||
UserPrm,495,100,2,0
|
||||
UserPrm,498,10,2,0
|
||||
UserPrm,501,10,2,0
|
||||
UserPrm,502,20,2,0
|
||||
UserPrm,503,10,2,0
|
||||
UserPrm,506,0,2,0
|
||||
UserPrm,507,100,2,0
|
||||
UserPrm,508,50,2,0
|
||||
UserPrm,509,20,2,0
|
||||
UserPrm,50A,8448,2,0
|
||||
UserPrm,50B,25923,2,0
|
||||
UserPrm,50C,34952,2,0
|
||||
UserPrm,50D,34952,2,0
|
||||
UserPrm,50E,12817,2,0
|
||||
UserPrm,50F,0,2,0
|
||||
UserPrm,510,0,2,0
|
||||
UserPrm,512,0,2,0
|
||||
UserPrm,513,0,2,0
|
||||
UserPrm,514,0,2,0
|
||||
UserPrm,515,34952,2,0
|
||||
UserPrm,516,34952,2,0
|
||||
UserPrm,517,1620,2,0
|
||||
UserPrm,518,0,2,0
|
||||
UserPrm,519,34952,2,0
|
||||
UserPrm,51B,1000,4,0
|
||||
UserPrm,51E,100,2,0
|
||||
UserPrm,520,5242880,4,0
|
||||
UserPrm,522,7,4,0
|
||||
UserPrm,524,1073741824,4,0
|
||||
UserPrm,526,5242880,4,0
|
||||
UserPrm,528,100,2,0
|
||||
UserPrm,529,10000,2,0
|
||||
UserPrm,52A,20,2,0
|
||||
UserPrm,52B,20,2,0
|
||||
UserPrm,52C,100,2,0
|
||||
UserPrm,52F,4095,2,0
|
||||
UserPrm,530,0,2,0
|
||||
UserPrm,531,32768,4,0
|
||||
UserPrm,533,500,2,0
|
||||
UserPrm,534,100,2,0
|
||||
UserPrm,535,100,2,0
|
||||
UserPrm,536,1,2,0
|
||||
UserPrm,550,0,2,0
|
||||
UserPrm,551,0,2,0
|
||||
UserPrm,552,100,2,0
|
||||
UserPrm,553,100,2,0
|
||||
UserPrm,55A,1,2,0
|
||||
UserPrm,560,400,2,0
|
||||
UserPrm,561,100,2,0
|
||||
UserPrm,600,0,2,0
|
||||
UserPrm,601,0,2,0
|
||||
UserPrm,603,0,2,0
|
||||
UserPrm,604,0,2,0
|
||||
UserPrm,621,0,2,0
|
||||
UserPrm,622,10000,2,0
|
||||
UserPrm,623,10000,2,0
|
||||
UserPrm,624,10,2,0
|
||||
UserPrm,625,100,2,0
|
||||
UserPrm,626,100,4,0
|
||||
UserPrm,628,10,2,0
|
||||
Custom
|
||||
CustomGroupNum,1
|
||||
Gp1_Begin
|
||||
GroupName,
|
||||
Num,0
|
||||
Gp1_End
|
||||
12
Handler/Project/Button/AIR.cs
Normal file
12
Handler/Project/Button/AIR.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Project
|
||||
{
|
||||
public partial class FMain
|
||||
{
|
||||
}
|
||||
}
|
||||
86
Handler/Project/Button/RESET.cs
Normal file
86
Handler/Project/Button/RESET.cs
Normal file
@@ -0,0 +1,86 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UIControl;
|
||||
using AR;
|
||||
namespace Project
|
||||
{
|
||||
public partial class FMain
|
||||
{
|
||||
|
||||
void _BUTTON_RESET()
|
||||
{
|
||||
//Common processing when RESET button is pressed
|
||||
DIO.SetBuzzer(false); //buzzer off
|
||||
|
||||
if (PUB.popup.Visible)
|
||||
PUB.popup.needClose = true;
|
||||
|
||||
if (
|
||||
hmi1.Scean == HMI.eScean.xmove)
|
||||
hmi1.Scean = UIControl.HMI.eScean.Nomal;
|
||||
|
||||
PUB.flag.set(eVarBool.FG_KEYENCE_OFFF, false, "USER");
|
||||
PUB.flag.set(eVarBool.FG_KEYENCE_OFFR, false, "USER");
|
||||
|
||||
//Remove popup message if it's a removable message.
|
||||
if (hmi1.HasPopupMenu && hmi1.PopupMenuRequireInput == false)
|
||||
hmi1.DelMenu();
|
||||
|
||||
//Alarm clear work (only when motion has error)
|
||||
if (PUB.mot.IsInit && PUB.mot.HasServoAlarm)
|
||||
{
|
||||
PUB.mot.SetAlarmClearOn();
|
||||
System.Threading.Thread.Sleep(200);
|
||||
PUB.mot.SetAlarmClearOff();
|
||||
}
|
||||
|
||||
//If there's no material and sensor doesn't respond but vacuum is on, turn it off
|
||||
if (DIO.isVacOKL() == 0 && PUB.flag.get(eVarBool.FG_PK_ITEMON) == false && DIO.GetIOOutput(eDOName.PICK_VAC1) == false)
|
||||
DIO.SetPickerVac(false, true);
|
||||
|
||||
|
||||
//This reset is meaningful in stop and error mode.
|
||||
if (PUB.sm.Step == eSMStep.RUN)
|
||||
{
|
||||
PUB.log.Add("[RESET] button does not work during operation");
|
||||
}
|
||||
else if (PUB.sm.Step == eSMStep.PAUSE)
|
||||
{
|
||||
//Switch to start waiting state (execution starts when start key is pressed in waiting state)
|
||||
PUB.sm.SetNewStep(eSMStep.WAITSTART);
|
||||
PUB.log.AddAT("Reset Clear System Resume & Pause ON");
|
||||
}
|
||||
else if (PUB.sm.Step == eSMStep.EMERGENCY)
|
||||
{
|
||||
PUB.popup.setMessage("EMERGENCY RESET\n" +
|
||||
"[Emergency Stop] state requires [System Initialization]\n" +
|
||||
"Execute [Initialize] from the top menu");
|
||||
|
||||
PUB.log.Add("RESET button caused transition from EMG situation to IDLE");
|
||||
PUB.sm.SetNewStep(eSMStep.IDLE);
|
||||
}
|
||||
else if (PUB.sm.Step == eSMStep.ERROR)
|
||||
{
|
||||
PUB.log.Add("RESET button caused transition from ERR situation to IDLE");
|
||||
PUB.sm.SetNewStep(eSMStep.IDLE);
|
||||
}
|
||||
else if (PUB.sm.Step == eSMStep.WAITSTART)
|
||||
{
|
||||
//No processing even when waiting for start
|
||||
//Pub.log.Add("[RESET] button does not work while waiting for start button");
|
||||
}
|
||||
else if (PUB.sm.Step == eSMStep.IDLE)
|
||||
{
|
||||
//Pub.log.Add("[RESET] button does not work during standby");
|
||||
}
|
||||
else
|
||||
{
|
||||
//Pub.log.AddE("REST key button input from undefined state - switching to standby state");
|
||||
PUB.sm.SetNewStep(eSMStep.IDLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
81
Handler/Project/Button/START.cs
Normal file
81
Handler/Project/Button/START.cs
Normal file
@@ -0,0 +1,81 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using AR;
|
||||
namespace Project
|
||||
{
|
||||
public partial class FMain
|
||||
{
|
||||
|
||||
void _BUTTON_START()
|
||||
{
|
||||
if (PUB.sm.Step == eSMStep.RUN)
|
||||
{
|
||||
//아무것도 하지 않는다
|
||||
PUB.log.Add("START button is not available during operation");
|
||||
}
|
||||
else if (PUB.sm.Step == eSMStep.IDLE) //일반대기상태
|
||||
{
|
||||
if (DIO.isVacOKL() > 0)
|
||||
{
|
||||
DIO.SetBuzzer(true);
|
||||
PUB.popup.setMessage("PICKER ITEM DETECT\nItem detected in PICKER\nPress [Cancel Work] to DROP item and remove it.");
|
||||
return;
|
||||
}
|
||||
else if (DIO.getCartSize(1) == eCartSize.None)
|
||||
{
|
||||
DIO.SetBuzzer(true);
|
||||
PUB.popup.setMessage("Cart is not installed in loader");
|
||||
return;
|
||||
}
|
||||
else if (DIO.GetIOInput(eDIName.PORTC_LIM_DN) == true && DIO.GetIOInput(eDIName.PORTC_DET_UP) == true)
|
||||
{
|
||||
//하단리밋과, 자재감지가 동시에 들어오면 overload 이다
|
||||
DIO.SetBuzzer(true);
|
||||
PUB.popup.setMessage("Too many reels are loaded in the loader\n" +
|
||||
"Bottom limit sensor and top reel detection sensor are both active");
|
||||
return;
|
||||
}
|
||||
//else if (Util_DO.getCartSize(0) == eCartSize.None && Util_DO.getCartSize(2) == eCartSize.None)
|
||||
//{
|
||||
// Util_DO.SetBuzzer(true);
|
||||
// Pub.popup.setMessage("언로더에 카트가 장착되지 않았습니다");
|
||||
// return;
|
||||
//}
|
||||
|
||||
Func_start_job_select();
|
||||
|
||||
|
||||
}
|
||||
else if (PUB.sm.Step == eSMStep.WAITSTART) //시작대기상태
|
||||
{
|
||||
|
||||
DIO.SetRoomLight(true);
|
||||
|
||||
//새로시작하면 포트 얼라인을 해제 해준다
|
||||
PUB.flag.set(eVarBool.FG_RDY_PORT_PL, false, "SW_START");
|
||||
PUB.flag.set(eVarBool.FG_RDY_PORT_PC, false, "SW_START");
|
||||
PUB.flag.set(eVarBool.FG_RDY_PORT_PR, false, "SW_START");
|
||||
|
||||
VAR.BOOL[eVarBool.FG_WAIT_INFOSELECTCLOSE] = false;
|
||||
|
||||
//언로더 체크작업은 항상 다시 시작한다
|
||||
if (PUB.Result.UnloaderSeq > 1) PUB.Result.UnloaderSeq = 1;
|
||||
|
||||
//팝업메세지가 사라지도록 한다
|
||||
PUB.popup.needClose = true;
|
||||
PUB.sm.SetNewStep(eSMStep.RUN);
|
||||
PUB.log.Add("[User pause] released => Work continues");
|
||||
}
|
||||
else
|
||||
{
|
||||
//string msg = "SYSTEM {0}\n[RESET] 버튼을 누른 후 다시 시도하세요";
|
||||
//msg = string.Format(msg, PUB.sm.Step);
|
||||
//PUB.popup.setMessage(msg);
|
||||
PUB.log.AddE($"Press [RESET] button and try again");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
49
Handler/Project/Button/STOP.cs
Normal file
49
Handler/Project/Button/STOP.cs
Normal file
@@ -0,0 +1,49 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using AR;
|
||||
namespace Project
|
||||
{
|
||||
public partial class FMain
|
||||
{
|
||||
void _BUTTON_STOP()
|
||||
{
|
||||
//매거진 투입모터 멈춤
|
||||
if (DIO.GetIOOutput(eDOName.PORTL_MOT_RUN)) DIO.SetPortMotor(0, eMotDir.CW, false, "Button Stop");
|
||||
if (DIO.GetIOOutput(eDOName.PORTC_MOT_RUN)) DIO.SetPortMotor(1, eMotDir.CW, false, "Button Stop");
|
||||
if (DIO.GetIOOutput(eDOName.PORTR_MOT_RUN)) DIO.SetPortMotor(2, eMotDir.CW, false, "Button Stop");
|
||||
|
||||
//자재가 없고, 센서도 반응안하는데. 진공이 되어잇으면 off한다
|
||||
if (DIO.isVacOKL() == 0 && PUB.flag.get(eVarBool.FG_PK_ITEMON) == false && DIO.GetIOOutput(eDOName.PICK_VAC1) == true)
|
||||
DIO.SetPickerVac(false, true);
|
||||
|
||||
//조명켜기
|
||||
if (AR.SETTING.Data.Disable_RoomLight == false)
|
||||
DIO.SetRoomLight(true);
|
||||
|
||||
//컨베이어 멈춘다 230502
|
||||
DIO.SetOutput(eDOName.LEFT_CONV, false);
|
||||
DIO.SetOutput(eDOName.RIGHT_CONV, false);
|
||||
|
||||
//모든 모터도 멈춘다
|
||||
if (PUB.mot.HasMoving) PUB.mot.MoveStop("Stop Button");
|
||||
|
||||
if (PUB.sm.Step == eSMStep.RUN)
|
||||
{
|
||||
//일시중지상태로 전환한다
|
||||
PUB.Result.SetResultMessage(eResult.OPERATION, eECode.USER_STOP, eNextStep.PAUSE);
|
||||
PUB.log.Add("[User pause]");
|
||||
}
|
||||
else if (PUB.sm.Step == eSMStep.HOME_FULL) //홈진행중에는 대기상태로 전환
|
||||
{
|
||||
PUB.sm.SetNewStep(eSMStep.IDLE);
|
||||
}
|
||||
|
||||
//로그 기록
|
||||
PUB.LogFlush();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
168
Handler/Project/Class/CHistoryJOB.cs
Normal file
168
Handler/Project/Class/CHistoryJOB.cs
Normal file
@@ -0,0 +1,168 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
|
||||
namespace Project.Class
|
||||
{
|
||||
|
||||
public class CHistoryJOB : INotifyPropertyChanged
|
||||
{
|
||||
public event PropertyChangedEventHandler PropertyChanged;
|
||||
List<JobData> _items;
|
||||
public CHistoryJOB()
|
||||
{
|
||||
_items = new List<JobData>();
|
||||
}
|
||||
public void Clear()
|
||||
{
|
||||
lock (_items)
|
||||
{
|
||||
_items.Clear();
|
||||
}
|
||||
|
||||
OnPropertyChanged("Clear");
|
||||
}
|
||||
public int Count
|
||||
{
|
||||
get
|
||||
{
|
||||
lock (_items)
|
||||
{
|
||||
return _items.Count;
|
||||
}
|
||||
}
|
||||
}
|
||||
public void SetItems(List<JobData> value)
|
||||
{
|
||||
lock (_items)
|
||||
{
|
||||
this._items = value;
|
||||
}
|
||||
OnPropertyChanged("REFRESH");
|
||||
}
|
||||
|
||||
public List<JobData> Items { get { return _items; } }
|
||||
public void Add(JobData data)
|
||||
{
|
||||
lock (_items)
|
||||
{
|
||||
data.No = this._items.Count + 1;
|
||||
_items.Add(data);
|
||||
}
|
||||
|
||||
OnPropertyChanged("Add:" + data.guid);
|
||||
}
|
||||
|
||||
public void Remove(JobData data)
|
||||
{
|
||||
lock (_items)
|
||||
{
|
||||
_items.Remove(data);
|
||||
}
|
||||
|
||||
OnPropertyChanged("Remove:" + data.guid);
|
||||
}
|
||||
public void Remove(string guid)
|
||||
{
|
||||
lock (_items)
|
||||
{
|
||||
var data = Get(guid);
|
||||
_items.Remove(data);
|
||||
}
|
||||
OnPropertyChanged("Remove:" + guid);
|
||||
}
|
||||
public JobData Get(string guid)
|
||||
{
|
||||
lock (_items)
|
||||
{
|
||||
return _items.Where(t => t.guid == guid).FirstOrDefault();
|
||||
}
|
||||
}
|
||||
public void Set(JobData data)
|
||||
{
|
||||
var item = Get(data.guid);
|
||||
if (item == null) throw new Exception("No data guid:" + data.guid.ToString());
|
||||
else
|
||||
{
|
||||
//item.No = data.No;
|
||||
//item.JobStart = data.JobStart;
|
||||
//item.JobEnd = data.JobEnd;
|
||||
//item.VisionData = data.VisionData;
|
||||
//item.error = data.error;
|
||||
//item.Message = data.Message;
|
||||
OnPropertyChanged("Set:" + data.guid);
|
||||
}
|
||||
}
|
||||
public void RaiseSetEvent(string guid)
|
||||
{
|
||||
OnPropertyChanged("Set:" + guid);
|
||||
}
|
||||
|
||||
protected void OnPropertyChanged([CallerMemberName] string name = null)
|
||||
{
|
||||
if (PropertyChanged != null)
|
||||
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(name));
|
||||
}
|
||||
}
|
||||
//[Serializable]
|
||||
//public class JobData
|
||||
//{
|
||||
// //고유식별자
|
||||
// public string guid { get; private set; }
|
||||
|
||||
// //비젼처리값
|
||||
// public Class.VisionData VisionData { get; set; }
|
||||
|
||||
// //언로더포트(L/R)
|
||||
// public string PortPos { get; set; }
|
||||
|
||||
// //프린트위치(U/LO)
|
||||
// public string PrintPos { get; set; }
|
||||
|
||||
// //작업시작시간
|
||||
// public DateTime JobStart { get; set; }
|
||||
|
||||
// //작업종료시간
|
||||
// public DateTime JobEnd { get; set; }
|
||||
|
||||
// /// <summary>
|
||||
// /// 이전 출고되는 시점과의 시간차 값
|
||||
// /// </summary>
|
||||
// public double TackTime { get { return (JobEnd - JobStart).TotalSeconds; } }
|
||||
|
||||
// //작업순서
|
||||
// public int No { get; set; }
|
||||
|
||||
// //오류상태
|
||||
// public eJobResult error { get; set; }
|
||||
|
||||
// //메세지
|
||||
// public string message { get; set; }
|
||||
|
||||
|
||||
// public TimeSpan JobRun
|
||||
// {
|
||||
// get
|
||||
// {
|
||||
// if (JobEnd.Year == 1982) return new TimeSpan(0);
|
||||
// else return this.JobEnd - this.JobStart;
|
||||
// }
|
||||
// }
|
||||
// public JobData()
|
||||
// {
|
||||
// this.No = 0;
|
||||
// PortPos = string.Empty;
|
||||
// PrintPos = string.Empty;
|
||||
// guid = Guid.NewGuid().ToString();
|
||||
// VisionData = new VisionData();
|
||||
// this.JobStart = new DateTime(1982, 11, 23); // DateTime.Parse("1982-11-23");
|
||||
// this.JobEnd = new DateTime(1982, 11, 23); // DateTime.Parse("1982-11-23");
|
||||
// error = eJobResult.None;
|
||||
// message = string.Empty;
|
||||
// }
|
||||
|
||||
//}
|
||||
}
|
||||
134
Handler/Project/Class/CHistorySIDRef.cs
Normal file
134
Handler/Project/Class/CHistorySIDRef.cs
Normal file
@@ -0,0 +1,134 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
|
||||
namespace Project.Class
|
||||
{
|
||||
public class CHistorySIDRef : INotifyPropertyChanged
|
||||
{
|
||||
public event PropertyChangedEventHandler PropertyChanged;
|
||||
public Boolean JobSIDRecvError
|
||||
{
|
||||
get
|
||||
{
|
||||
//아이템이있어야 정상이다
|
||||
if (_items == null || _items.Count < 1) return true;
|
||||
else if (JobSIDRecvTime.Year == 1982) return true;
|
||||
else return false;
|
||||
}
|
||||
}
|
||||
public DateTime JobSIDRecvTime { get; set; }
|
||||
public string JobSIDRecvMessage { get; set; }
|
||||
List<SIDDataRef> _items;
|
||||
|
||||
public CHistorySIDRef()
|
||||
{
|
||||
Clear();
|
||||
}
|
||||
public void SetItems(List<SIDDataRef> value)
|
||||
{
|
||||
this._items = value;
|
||||
OnPropertyChanged("REFRESH");
|
||||
}
|
||||
|
||||
public List<SIDDataRef> Items { get { return _items; } }
|
||||
public int Count
|
||||
{
|
||||
get
|
||||
{
|
||||
return _items.Count;
|
||||
}
|
||||
}
|
||||
public SIDDataRef Get(string sid_)
|
||||
{
|
||||
return _items.Where(t => t.sid == sid_).FirstOrDefault();
|
||||
}
|
||||
public void Set(SIDDataRef data)
|
||||
{
|
||||
var item = Get(data.sid);
|
||||
if (item == null) throw new Exception("No data sid:" + data.sid.ToString());
|
||||
else
|
||||
{
|
||||
item.kpc = data.kpc;
|
||||
item.unit = data.unit;
|
||||
OnPropertyChanged("Set:" + data.sid);
|
||||
}
|
||||
}
|
||||
|
||||
public void Set(string sid, int kpc, string unit)
|
||||
{
|
||||
var item = Get(sid);
|
||||
if (item == null)
|
||||
{
|
||||
Add(sid, kpc, unit); //없다면 추가해준다
|
||||
}
|
||||
else
|
||||
{
|
||||
item.kpc = kpc;
|
||||
item.unit = unit;
|
||||
OnPropertyChanged("Set:" + sid);
|
||||
}
|
||||
}
|
||||
|
||||
public void Add(SIDDataRef data)
|
||||
{
|
||||
_items.Add(data);
|
||||
OnPropertyChanged("Add:" + data.sid);
|
||||
}
|
||||
|
||||
|
||||
public void Add(string sid, int kpc_, string unit)
|
||||
{
|
||||
if (string.IsNullOrEmpty(sid))
|
||||
{
|
||||
PUB.log.AddAT("SID addition failed - SID value not entered");
|
||||
return;
|
||||
}
|
||||
//if (JobSidList.ContainsKey(sid) == false)
|
||||
_items.Add(new SIDDataRef(sid, kpc_, unit));
|
||||
OnPropertyChanged("Add:" + sid);
|
||||
//else
|
||||
//{
|
||||
//이미 데이터가 있다. 중복이므로 누적한다
|
||||
//JobSidList.TryGetValue()
|
||||
//}
|
||||
}
|
||||
public void Clear()
|
||||
{
|
||||
//JobSIDRecvError = false;
|
||||
JobSIDRecvMessage = string.Empty;
|
||||
JobSIDRecvTime = DateTime.Parse("1982-11-23");
|
||||
if (this._items == null) this._items = new List<SIDDataRef>();
|
||||
else this._items.Clear();
|
||||
OnPropertyChanged("Clear");
|
||||
}
|
||||
|
||||
protected void OnPropertyChanged([CallerMemberName] string name = null)
|
||||
{
|
||||
if (PropertyChanged != null)
|
||||
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(name));
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class SIDDataRef
|
||||
{
|
||||
public string guid { get; set; }
|
||||
public string sid { get; set; }
|
||||
public string unit { get; set; }
|
||||
public int kpc { get; set; }
|
||||
|
||||
public SIDDataRef(string sid_, int kpc_, string unit_)
|
||||
{
|
||||
|
||||
guid = Guid.NewGuid().ToString();
|
||||
sid = sid_;
|
||||
unit = unit_;
|
||||
kpc = kpc_;
|
||||
}
|
||||
public SIDDataRef() : this(string.Empty, 0, string.Empty) { }
|
||||
}
|
||||
}
|
||||
546
Handler/Project/Class/CResult.cs
Normal file
546
Handler/Project/Class/CResult.cs
Normal file
@@ -0,0 +1,546 @@
|
||||
using AR;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
|
||||
namespace Project
|
||||
{
|
||||
|
||||
public class CResult
|
||||
{
|
||||
public enum eInspectResult
|
||||
{
|
||||
NG = 0,
|
||||
OK,
|
||||
ERROR,
|
||||
NOTSET = 9,
|
||||
}
|
||||
|
||||
public UInt64 OptionValue = 0;
|
||||
public UInt64 OptionValueData = 0;
|
||||
|
||||
public List<Class.RegexPattern> BCDPattern;
|
||||
public List<Class.RegexPattern> BCDIgnorePattern;
|
||||
|
||||
public object BCDPatternLock = new object();
|
||||
|
||||
public DateTime ResetButtonDownTime = DateTime.Now;
|
||||
public Boolean ClearAllSID = false;
|
||||
public Class.CHistorySIDRef SIDReference; //SIDLIST받은 내역
|
||||
public List<UIControl.CItem> OUTHistory; //출고포트 처리내역
|
||||
public DataSet1.SIDHistoryDataTable SIDHistory; //sID별 rid 전체 목록 차수별로만 저장된다
|
||||
|
||||
public DataSet1.K4EE_Component_Reel_SID_ConvertDataTable DTSidConvert;
|
||||
public List<string> DTSidConvertEmptyList;
|
||||
public List<string> DTSidConvertMultiList;
|
||||
|
||||
public DSList dsList;
|
||||
|
||||
public ModelInfoM mModel; //모션 모델
|
||||
public ModelInfoV vModel; //작업 모델
|
||||
|
||||
/// <summary>
|
||||
/// 아이템의 정보가 담겨있다 (0:왼쪽,1:비젼,2:오른쪽)
|
||||
/// </summary>
|
||||
public Class.JobData ItemDataL = new Class.JobData(0);
|
||||
public Class.JobData ItemDataC = new Class.JobData(1);
|
||||
public Class.JobData ItemDataR = new Class.JobData(2);
|
||||
|
||||
public Guid guid = new Guid();
|
||||
|
||||
public string JobType2 = string.Empty;
|
||||
public Boolean JobFirst
|
||||
{
|
||||
get
|
||||
{
|
||||
return VAR.I32[(int)eVarInt32.PickOnCount] == 0;
|
||||
}
|
||||
}
|
||||
|
||||
public Boolean DryRun
|
||||
{
|
||||
get
|
||||
{
|
||||
if (string.IsNullOrEmpty(JobType2)) return false;
|
||||
else return JobType2.ToUpper() == "DRY";
|
||||
}
|
||||
}
|
||||
|
||||
public int OverLoadCountF { get; set; }
|
||||
public int OverLoadCountR { get; set; }
|
||||
|
||||
public UIControl.CItem UnloaderItem = null;
|
||||
public DateTime LastExtInputTime = DateTime.Parse("1982-11-23");
|
||||
public DateTime LastOutTime = DateTime.Parse("1982-11-23");
|
||||
|
||||
public Single[] PortAlignWaitSec = new float[] { 0, 0, 0, 0 };
|
||||
public long[] PortAlignTime = new long[] { 0, 0, 0, 0 };
|
||||
|
||||
public byte UnloaderSeq = 0;
|
||||
public DateTime UnloaderSeqTime;
|
||||
public DateTime UnloaderSendtime = DateTime.Parse("1982-11-23");
|
||||
|
||||
/// <summary>
|
||||
/// 로딩에 사용하는 포트번호 (자동 판단됨)
|
||||
/// </summary>
|
||||
public int LoadPortIndex = -1;
|
||||
|
||||
/// <summary>
|
||||
/// 로딩시에 사용한 포트의 번호(이 값으로 수량기록 위치를 결정)
|
||||
/// </summary>
|
||||
public int LoadPickIndex = -1;
|
||||
|
||||
/// <summary>
|
||||
/// 최종 할당된 언로딩 포트번호(1~8)
|
||||
/// </summary>
|
||||
public int UnloadPortNo = -1;
|
||||
public byte LiveViewseq = 0;
|
||||
public string AcceptBcd = string.Empty;
|
||||
public DateTime AcceptBcdTime = DateTime.Now;
|
||||
public string AcceptSid = string.Empty;
|
||||
|
||||
//작업정보
|
||||
public eInspectResult Result; //작업결과가 저장됨
|
||||
public eResult ResultCode;
|
||||
public eECode ResultErrorCode;
|
||||
public string ResultMessage;
|
||||
|
||||
public string LastSIDFrom = string.Empty;//101 = string.Empty;
|
||||
public string LastSIDTo = string.Empty; // 103 = string.Empty;
|
||||
//public string LastSID103_2 = string.Empty;
|
||||
public string LastVName = string.Empty;
|
||||
public int LastSIDCnt = 0;
|
||||
|
||||
public Dictionary<string, string> PrintPostionList = null;
|
||||
|
||||
//작업정보(시간)
|
||||
public DateTime JobStartTime = DateTime.Parse("1982-11-23");
|
||||
public DateTime JobEndTime = DateTime.Parse("1982-11-23");
|
||||
public TimeSpan JobRunTime()
|
||||
{
|
||||
if (JobStartTime.Year == 1982) return new TimeSpan(0);
|
||||
if (JobEndTime.Year == 1982) return DateTime.Now - JobStartTime;
|
||||
else return JobEndTime - JobStartTime;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// RUN -> Pause(Wait Start)모드 전환시 저장할 모터의 위치값
|
||||
/// 조그모드등으로 좌표를 옴길때의 기준 좌표
|
||||
/// 이 좌표값에서 현재 모션값에 변화가 있으면 프로그램에서는 오류로 처리하게 됨
|
||||
/// </summary>
|
||||
public double[] PreventMotionPosition = new double[8];
|
||||
|
||||
#region "SetResultMessage"
|
||||
|
||||
public void SetResultMessage(eResult code, eECode err, eNextStep systempause, params object[] args)
|
||||
{
|
||||
|
||||
var rltMsg = PUB.GetResultCodeMessage(code);
|
||||
var codeMSg = $"[E{(int)err}] ";// + Util.GetResultCodeMessage(code);
|
||||
if (err == eECode.MESSAGE_ERROR)
|
||||
{
|
||||
codeMSg = $"[{rltMsg} ERROR MESSAGE]\n";
|
||||
}
|
||||
else if (err == eECode.MESSAGE_INFO)
|
||||
{
|
||||
codeMSg = $"[{rltMsg} INFORMATION]\n";
|
||||
}
|
||||
|
||||
|
||||
|
||||
var erMsg = PUB.GetErrorMessage(err, args);
|
||||
var msg = codeMSg + erMsg;
|
||||
|
||||
this.ResultCode = code;
|
||||
this.ResultErrorCode = err;
|
||||
this.ResultMessage = msg;
|
||||
|
||||
if (systempause == eNextStep.PAUSENOMESAGE) this.ResultMessage = string.Empty; //210129
|
||||
|
||||
PUB.log.AddE(msg);
|
||||
if (systempause == eNextStep.PAUSE) PUB.sm.SetNewStep(eSMStep.PAUSE);
|
||||
else if (systempause == eNextStep.PAUSENOMESAGE) PUB.sm.SetNewStep(eSMStep.PAUSE);
|
||||
else if (systempause == eNextStep.ERROR) PUB.sm.SetNewStep(eSMStep.ERROR);
|
||||
}
|
||||
|
||||
|
||||
public void SetResultTimeOutMessage(eDOName pinName, Boolean checkState, eNextStep systemPause)
|
||||
{
|
||||
var pindef = DIO.Pin[pinName];
|
||||
if (checkState) SetResultMessage(eResult.SENSOR, eECode.DOON, systemPause, pindef.terminalno, pindef.name);
|
||||
else SetResultMessage(eResult.SENSOR, eECode.DOOFF, systemPause, pindef.terminalno, pindef.name);
|
||||
}
|
||||
public void SetResultTimeOutMessage(eDIName pinName, Boolean checkState, eNextStep systemPause)
|
||||
{
|
||||
var pindef = DIO.Pin[pinName];
|
||||
if (checkState) SetResultMessage(eResult.SENSOR, eECode.DION, systemPause, pindef.terminalno, pindef.name);
|
||||
else SetResultMessage(eResult.SENSOR, eECode.DIOFF, systemPause, pindef.terminalno, pindef.name);
|
||||
}
|
||||
public void SetResultTimeOutMessage(eAxis motAxis, eECode ecode, eNextStep systemPause, string source, double targetpos, string message)
|
||||
{
|
||||
SetResultMessage(eResult.TIMEOUT, ecode, systemPause, motAxis, source, targetpos, message);
|
||||
}
|
||||
public void SetResultTimeOutMessage(eECode ecode, eNextStep systemPause, params object[] args)
|
||||
{
|
||||
SetResultMessage(eResult.TIMEOUT, ecode, systemPause, args);
|
||||
}
|
||||
#endregion
|
||||
|
||||
public DateTime[] diCheckTime = new DateTime[256];
|
||||
public DateTime[] doCheckTime = new DateTime[256];
|
||||
|
||||
public Boolean isError { get; set; }
|
||||
public int retry = 0;
|
||||
public DateTime retryTime;
|
||||
public DateTime[] WaitForVar = new DateTime[255];
|
||||
public int ABCount = 0;
|
||||
public bool AutoReelOut = false;
|
||||
|
||||
public CResult()
|
||||
{
|
||||
mModel = new ModelInfoM();
|
||||
vModel = new ModelInfoV();
|
||||
|
||||
SIDReference = new Class.CHistorySIDRef();
|
||||
SIDHistory = new DataSet1.SIDHistoryDataTable();
|
||||
BCDPattern = new List<Class.RegexPattern>();
|
||||
OUTHistory = new List<UIControl.CItem>();
|
||||
|
||||
this.Clear("Result ctor");
|
||||
dsList = new DSList();
|
||||
LoadListDB();
|
||||
|
||||
//230509
|
||||
if(DTSidConvert != null) DTSidConvert.Dispose();
|
||||
DTSidConvert = new DataSet1.K4EE_Component_Reel_SID_ConvertDataTable();
|
||||
DTSidConvertEmptyList = new List<string>();
|
||||
DTSidConvertMultiList = new List<string>();
|
||||
}
|
||||
|
||||
public void SaveListDB()
|
||||
{
|
||||
var finame = System.IO.Path.Combine(UTIL.CurrentPath, "Data", "SavaedList.xml");
|
||||
var fi = new System.IO.FileInfo(finame);
|
||||
if (fi.Directory.Exists == false) fi.Directory.Create();
|
||||
this.dsList.WriteXml(fi.FullName);
|
||||
PUB.log.Add("Pre-list DB saved " + fi.FullName);
|
||||
}
|
||||
|
||||
public void LoadListDB()
|
||||
{
|
||||
var finame = System.IO.Path.Combine(UTIL.CurrentPath, "Data", "SavaedList.xml");
|
||||
var fi = new System.IO.FileInfo(finame);
|
||||
if (fi.Directory.Exists == false) fi.Directory.Create();
|
||||
if (fi.Exists)
|
||||
{
|
||||
this.dsList.ReadXml(fi.FullName);
|
||||
PUB.log.Add("Pre-list DB loaded " + fi.FullName);
|
||||
}
|
||||
}
|
||||
|
||||
///// <summary>
|
||||
///// 입력한 sid 가 원본에 존재하지 않으면 -1을 존재하면 입력된 수량을 반환합니다
|
||||
///// </summary>
|
||||
///// <param name="sid"></param>
|
||||
///// <returns></returns>
|
||||
//public int ExistSIDReferenceCheck(string sid)
|
||||
//{
|
||||
// var dr = PUB.Result.SIDReference.Items.Where(t => t.sid.EndsWith(sid)).FirstOrDefault();
|
||||
// if (dr == null) return -1;
|
||||
// else return dr.kpc;
|
||||
//}
|
||||
|
||||
|
||||
//public void ClearHistory()
|
||||
//{
|
||||
|
||||
// //this.JObHistory.Clear();
|
||||
// this.SIDReference.Clear();
|
||||
// PUB.log.AddI("Clear History");
|
||||
//}
|
||||
|
||||
|
||||
public void ClearOutPort()
|
||||
{
|
||||
OUTHistory.Clear();
|
||||
}
|
||||
|
||||
public void Clear(string Reason)
|
||||
{
|
||||
|
||||
this.guid = Guid.NewGuid();
|
||||
|
||||
//프린트위치를 별도로 저장하고 있는다(나중에 추가 활용한다) 231005
|
||||
if (PrintPostionList == null)
|
||||
PrintPostionList = new Dictionary<string, string>();
|
||||
else
|
||||
PrintPostionList.Clear();
|
||||
PUB.log.Add("Print Positoin Clear");
|
||||
|
||||
ItemDataL.Clear(Reason);
|
||||
ItemDataC.Clear(Reason);
|
||||
ItemDataR.Clear(Reason);
|
||||
|
||||
OverLoadCountF = 0;
|
||||
OverLoadCountR = 0;
|
||||
ClearOutPort();
|
||||
|
||||
LoadPortIndex = -1;
|
||||
|
||||
if (PUB.sm != null)
|
||||
PUB.sm.seq.ClearTime();
|
||||
|
||||
isError = false;
|
||||
ABCount = 0;
|
||||
///기다림용 변수모듬
|
||||
for (int i = 0; i < WaitForVar.Length; i++)
|
||||
WaitForVar[i] = DateTime.Parse("1982-11-23");
|
||||
|
||||
//조그모드시 모션이동 감지용 저장 변수
|
||||
for (int i = 0; i < 6; i++)
|
||||
PreventMotionPosition[i] = 0.0;
|
||||
|
||||
//JobStartTime = DateTime.Parse("1982-11-23");
|
||||
//JobEndTime = DateTime.Parse("1982-11-23");
|
||||
//LastOutTime = DateTime.Parse("1982-11-23");
|
||||
|
||||
Result = eInspectResult.NOTSET;
|
||||
ResultCode = eResult.NOERROR;
|
||||
ResultMessage = string.Empty;
|
||||
|
||||
//시간정보값을 초기화함
|
||||
for (int i = 0; i < 2; i++)
|
||||
ClearTime(i);
|
||||
|
||||
|
||||
|
||||
PUB.log.Add("Result data initialized");
|
||||
}
|
||||
|
||||
|
||||
public void ClearTime(int shutIdx)
|
||||
{
|
||||
//JobStartTime = DateTime.Parse("1982-11-23");
|
||||
//JobEndTime = DateTime.Parse("1982-11-23");
|
||||
|
||||
Result = eInspectResult.NOTSET;
|
||||
ResultCode = eResult.NOERROR;
|
||||
ResultMessage = string.Empty;
|
||||
|
||||
PUB.log.Add("Result(Clear Time)");
|
||||
}
|
||||
|
||||
public Boolean isSetmModel
|
||||
{
|
||||
get
|
||||
{
|
||||
if (PUB.Result.mModel == null || PUB.Result.mModel.idx == -1 || PUB.Result.mModel.Title.isEmpty())
|
||||
return false;
|
||||
else return true;
|
||||
}
|
||||
|
||||
}
|
||||
public Boolean isSetvModel
|
||||
{
|
||||
get
|
||||
{
|
||||
if (PUB.Result.vModel == null || PUB.Result.vModel.idx == -1 || PUB.Result.vModel.Title.isEmpty())
|
||||
return false;
|
||||
else return true;
|
||||
}
|
||||
|
||||
}
|
||||
//public string getErrorMessage(eResult rlt, eECode err, params object[] args)
|
||||
//{
|
||||
// switch (err)
|
||||
// {
|
||||
// case eECode.RIDDUPL:
|
||||
// return string.Format(
|
||||
// "좌측 언로더에 사용되었던 REEL ID 입니다\n" +
|
||||
// "바코드 오류 가능성이 있습니다\n" +
|
||||
// "좌측 릴의 바코드를 확인하시기 바랍니다\n" +
|
||||
// "작업을 계속할 수 없습니다. 취소 후 다시 시도하세요\n{0}", args);
|
||||
|
||||
// case eECode.RIDDUPR:
|
||||
// return string.Format(
|
||||
// "우측 언로더에 사용되었던 REEL ID 입니다\n" +
|
||||
// "바코드 오류 가능성이 있습니다\n" +
|
||||
// "우측 릴의 바코드를 확인하시기 바랍니다\n" +
|
||||
// "작업을 계속할 수 없습니다. 취소 후 다시 시도하세요\n{0}", args);
|
||||
|
||||
// case eECode.BARCODEVALIDERR:
|
||||
// return string.Format("바코드 데이터 검증 실패\n" +
|
||||
// "인쇄전 데이터와 인쇄후 데이터가 일치하지 않습니다\n" +
|
||||
// "ID(O) : {1}\n" +
|
||||
// "ID(N) : {2}\n" +
|
||||
// "SID : {5}->{6}\n" +
|
||||
// "QTY : {3}->{4}\n" +
|
||||
// "DATE : {7}->{8}\n" +
|
||||
// "Index : {0}", args);
|
||||
|
||||
// case eECode.MOTX_SAFETY:
|
||||
// return string.Format("PICKER-X 축이 안전위치에 없습니다\n1. 조그를 이용하여 중앙으로 이동 합니다\n2.홈 작업을 다시 실행합니다", args);
|
||||
// case eECode.NOERROR:
|
||||
// return string.Format("오류가 없습니다", args);
|
||||
|
||||
// case eECode.PORTOVERLOAD:
|
||||
// return string.Format("PORT OVERLOAD\n위치 : {0}\n" +
|
||||
// "너무 많은 양이 적재 되었습니다\n" + "상단 LIMIT 센서에 걸리지 않게 적재하세요", args);
|
||||
// case eECode.EMERGENCY:
|
||||
// return string.Format("비상정지 버튼을 확인하세요\n" +
|
||||
// "버튼 : F{0}\n" +
|
||||
// "메인전원이 OFF 된 경우에도 이 메세지가 표시 됩니다\n" +
|
||||
// "메인전원은 모니터 하단 AIR버튼 좌측에 있습니다"
|
||||
// , DIO.GetIOInput(eDIName.BUT_EMGF));
|
||||
// case eECode.NOMODELM:
|
||||
// return "모션모델이 선택되지 않았습니다\n" +
|
||||
// "상단 메뉴 [모션모델]에서 사용할 모델을 선택하세요";
|
||||
// case eECode.NOMODELV:
|
||||
// return "작업모델이 선택되지 않았습니다\n" +
|
||||
// "상단 메뉴 [작업모델]에서 사용할 모델을 선택하세요";
|
||||
|
||||
// case eECode.CARTERROR:
|
||||
// return string.Format("언로더 카트가 없거나 크기 정보가 일치하지 않습니다\n좌측:{0}, 로더:{1}, 우측:{2}", args);
|
||||
// case eECode.CARTL:
|
||||
// return string.Format("왼쪽(UNLOAD) 포트에 카트가 감지되지 않습니다\n카트를 장착하세요\n카트크기 : {0}, 릴크기:{1}", args);
|
||||
// case eECode.CARTC:
|
||||
// return string.Format("중앙(LOAD) 포트에 카트가 감지되지 않습니다\n카트를 장착하세요\n카트크기 : {0}, 릴크기:{1}", args);
|
||||
// case eECode.CARTR:
|
||||
// return string.Format("오른쪽(UNLOAD) 포트에 카트가 감지되지 않습니다\n카트를 장착하세요\n카트크기 : {0}, 릴크기:{1}", args);
|
||||
|
||||
// case eECode.CARTLMATCH:
|
||||
// return string.Format("왼쪽(UNLOAD) 카트와 피커의 릴 크기가 일치하지 않습니다\n카트크기를 확인 하세요\n카트크기 : {0}, 릴크기:{1}", args);
|
||||
// case eECode.CARTCMATCH:
|
||||
// return string.Format("중앙(LOAD) 카트와 피커의 릴 크기가 일치하지 않습니다\n카트크기를 확인 하세요\n카트크기 : {0}, 릴크기:{1}", args);
|
||||
// case eECode.CARTRMATCH:
|
||||
// return string.Format("오른쪽(UNLOAD) 카트와 피커의 릴 크기가 일치하지 않습니다\n카트크기를 확인 하세요\n카트크기 : {0}, 릴크기:{1}", args);
|
||||
|
||||
|
||||
// case eECode.NOREELSIZE:
|
||||
// return string.Format("왼쪽포트에 놓을 릴의 크기정보가 없습니다\n프로그램 오류입니다\n개발자에게 해당 메세지를 전달하세요\n" +
|
||||
// "장치 초기화를 진행 한 후 다시 시도하세요");
|
||||
|
||||
// case eECode.VISION_NOCONN:
|
||||
// return string.Format("카메라({0}) 연결 안됨", args);
|
||||
|
||||
// case eECode.INCOMPLETE_LOADERDATA:
|
||||
// return string.Format("로더 바코드 필수값을 읽지 못했습니다", args);
|
||||
// case eECode.CAM_NOBARCODEU:
|
||||
// return string.Format("언로더({0}) 바코드를 읽지 못했습니다", args);
|
||||
// case eECode.HOME_TIMEOUT:
|
||||
// return string.Format("홈 진행이 완료되지 않고 있습니다\n" +
|
||||
// "오류가 발생했다면 '홈' 작업을 다시 진행하세요\n" +
|
||||
// "대기시간 : {0}초", args);
|
||||
|
||||
|
||||
// case eECode.DOORSAFTY:
|
||||
// return string.Format("포트 안전센서가 감지 되었습니다\n" +
|
||||
// "안전센서를 확인한 후 다시 시도하세요\n", args);
|
||||
|
||||
// case eECode.AIRNOOUT:
|
||||
// return "AIR 공급이 차단 되어 있습니다.\n" +
|
||||
// "전면의 AIR 버튼을 누르세요\n" +
|
||||
// "공급이 되지 않으면 메인 전원 을 확인하세요\n" +
|
||||
// "메인 전원은 AIR 버튼 좌측에 있습니다" +
|
||||
// "메인 전원 공급 실패시 장비 후면의 차단기를 확인하세요";
|
||||
|
||||
|
||||
// case eECode.DOOFF:
|
||||
// var pinoOf = (eDOName)args[0];
|
||||
// return string.Format("출력이 OFF 되지 않았습니다.\n" +
|
||||
// "포트설명 : {0}\n" +
|
||||
// "포트번호 : {1} ({2})", DIO.getPinDescription(pinoOf), (int)pinoOf, Enum.GetName(typeof(eDOPin), pinoOf));
|
||||
// case eECode.DOON:
|
||||
// var pinoOn = (eDOName)args[0];
|
||||
// return string.Format("출력이 ON 되지 않았습니다.\n" +
|
||||
// "포트설명 : {0}\n" +
|
||||
// "포트번호 : {1} ({2})", DIO.getPinDescription(pinoOn), (int)pinoOn, Enum.GetName(typeof(eDOPin), pinoOn));
|
||||
// case eECode.DIOFF:
|
||||
// var piniOf = (eDIName)args[0];
|
||||
// return string.Format("입력이 OFF 되지 않았습니다.\n" +
|
||||
// "포트설명 : {0}\n" +
|
||||
// "포트번호 : {1} ({2})", DIO.getPinDescription(piniOf), (int)piniOf, Enum.GetName(typeof(eDIPin), piniOf));
|
||||
// case eECode.DION:
|
||||
// var piniOn = (eDIName)args[0];
|
||||
// return string.Format("입력이 ON 되지 않았습니다.\n" +
|
||||
// "포트설명 : {0}\n" +
|
||||
// "포트번호 : {1} ({2})", DIO.getPinDescription(piniOn), (int)piniOn, Enum.GetName(typeof(eDIPin), piniOn));
|
||||
|
||||
// case eECode.AZJINIT:
|
||||
// return string.Format("DIO 혹은 모션카드가 초기화 되지 않았습니다.\n" +
|
||||
// "DIO : {0}\n" +
|
||||
// "MOTION : {1}\n" +
|
||||
// "해당 카드는 본체 내부 PCI 슬롯에 장착 된 장비 입니다\n" +
|
||||
// "EzConfig AXT 프로그램으로 카드 상태를 확인하세요",
|
||||
// PUB.dio.IsInit, PUB.mot.IsInit);
|
||||
|
||||
// case eECode.MOT_HSET:
|
||||
// var msg = "모션의 HOME 검색이 완료되지 않았습니다";
|
||||
// for (int i = 0; i < 6; i++)
|
||||
// {
|
||||
// if (PUB.mot.IsUse(i) == false) continue;
|
||||
// var axis = (eAxis)i;
|
||||
// var stat = PUB.mot.IsHomeSet(i);
|
||||
// if (stat == false) msg += string.Format("\n[{0}] {1} : {2}", i, axis, stat);
|
||||
// }
|
||||
// msg += "\n장치 초기화를 실행하세요";
|
||||
// return msg;
|
||||
// case eECode.MOT_SVOFF:
|
||||
// var msgsv = "모션 중 SERVO-OFF 된 축이 있습니다";
|
||||
// for (int i = 0; i < 6; i++)
|
||||
// {
|
||||
// if (PUB.mot.IsUse(i) == false) continue;
|
||||
// var axis = (eAxis)i;
|
||||
// var stat = PUB.mot.IsServOn(i);
|
||||
// if (stat == false) msgsv += string.Format("\n[{0}] {1} : {2}", i, axis, stat);
|
||||
// }
|
||||
// msgsv += "\nRESET을 누른 후 '모션설정' 화면에서 확인합니다";
|
||||
// return msgsv;
|
||||
// case eECode.MOT_HSEARCH:
|
||||
// return string.Format("모션의 홈 검색이 실패되었습니다\n" +
|
||||
// "축 : {0}\n" +
|
||||
// "메세지 : {1}", args);
|
||||
|
||||
// case eECode.MOT_CMD:
|
||||
// var axisNo = (int)((eAxis)args[0]);
|
||||
// var axisSrc = args[1].ToString();
|
||||
// return string.Format("모션축 명령이 실패 되었습니다\n축 : {0}\n" +
|
||||
// "현재위치 : {2}\n" +
|
||||
// "명령위치 : {3}\n" +
|
||||
// "소스 : {1}", axisNo, axisSrc, PUB.mot.GetActPos(axisNo), PUB.mot.GetActPos(axisNo));
|
||||
|
||||
|
||||
|
||||
// //case eECode.timeout_step:
|
||||
// // return string.Format("스텝당 최대 실행 시간이 초과 되었습니다.\n" +
|
||||
// // "스텝 : {0}\n" +
|
||||
// // "최대동작시간 : " + COMM.SETTING.Data.Timeout_StepMaxTime.ToString(), args);
|
||||
|
||||
|
||||
// case eECode.USER_STOP:
|
||||
// return "'일시정지' 버튼 눌림\n" +
|
||||
// "사용자에 의해 작동이 중지 되었습니다\n" +
|
||||
// "'RESET' -> 'START'로 작업을 계속할 수 있습니다";
|
||||
|
||||
// case eECode.CAM_RIGHT:
|
||||
// return "우측카메라가 사용가능한 상태가 아닙니다.\n" +
|
||||
// "신규 실행시에는 초기화 완료까지 기다려 주세요";
|
||||
// case eECode.CAM_LEFT:
|
||||
// return "좌측카메라가 사용가능한 상태가 아닙니다.\n" +
|
||||
// "신규 실행시에는 초기화 완료까지 기다려 주세요";
|
||||
// default:
|
||||
// return err.ToString();
|
||||
// }
|
||||
|
||||
//}
|
||||
//public string getResultCodeMessage(eResult rltCode)
|
||||
//{
|
||||
// //별도 메세지처리없이 그대로 노출한다
|
||||
// return rltCode.ToString().ToUpper();
|
||||
//}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
459
Handler/Project/Class/Command.cs
Normal file
459
Handler/Project/Class/Command.cs
Normal file
@@ -0,0 +1,459 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using AR;
|
||||
namespace Project.Commands
|
||||
{
|
||||
public class CommandBuffer
|
||||
{
|
||||
public int Idx { get; set; }
|
||||
|
||||
private int REGISTER_VALUE = 0;
|
||||
private Boolean REGISTER_TRUE = false;
|
||||
private Boolean REGISTER_FALSE = false;
|
||||
private Boolean REGISTER_EQUAL = false;
|
||||
private Boolean REGISTER_ABOVE = false;
|
||||
private Boolean REGISTER_BELOW = false;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 순차실행명령
|
||||
/// </summary>
|
||||
public List<Command> Commands;
|
||||
|
||||
/// <summary>
|
||||
/// 상시실행명령
|
||||
/// </summary>
|
||||
public List<Command> SPS;
|
||||
public CommandBuffer()
|
||||
{
|
||||
Commands = new List<Command>();
|
||||
SPS = new List<Command>();
|
||||
}
|
||||
public void AddSeq(Command cmd)
|
||||
{
|
||||
cmd.Idx = this.Commands.Count;
|
||||
this.Commands.Add(cmd);
|
||||
}
|
||||
public void AddSPS(Command cmd)
|
||||
{
|
||||
cmd.Idx = this.SPS.Count;
|
||||
this.SPS.Add(cmd);
|
||||
}
|
||||
public void Clear()
|
||||
{
|
||||
Commands.Clear();
|
||||
SPS.Clear();
|
||||
Idx = 0;
|
||||
}
|
||||
public StepResult Run()
|
||||
{
|
||||
//sps는 모두 실행한다
|
||||
StepResult rlt;
|
||||
foreach (var sps in this.SPS)
|
||||
{
|
||||
rlt = RunCode(sps);
|
||||
if (rlt == StepResult.Wait) return StepResult.Wait; //SPS에서 대기 코드가 있다
|
||||
else if (rlt == StepResult.Error) return StepResult.Error;
|
||||
}
|
||||
|
||||
//sequece 는 현재 것만 실행한다.
|
||||
if (Idx < 0) Idx = 0;
|
||||
var cmd = this.Commands[Idx];
|
||||
rlt = RunCode(cmd);
|
||||
if (rlt == StepResult.Complete) //이 명령이 완료되면 다음으로 진행한다
|
||||
{
|
||||
Idx += 1;
|
||||
if (Idx >= this.Commands.Count) return StepResult.Complete;
|
||||
else return StepResult.Wait;
|
||||
}
|
||||
return rlt;
|
||||
}
|
||||
|
||||
private StepResult RunCode(Command cmd)
|
||||
{
|
||||
switch (cmd.type)
|
||||
{
|
||||
case CType.NOP: return StepResult.Complete;
|
||||
case CType.Wait:
|
||||
var data0 = cmd.Data as CDWait;
|
||||
if (data0.Trigger == false)
|
||||
{
|
||||
//아직 시작을 안했으니 시작시키고 대기한다
|
||||
data0.SetTrigger(true);
|
||||
return StepResult.Wait;
|
||||
}
|
||||
else
|
||||
{
|
||||
//아직 시간을 다 쓰지 않았다면 넘어간다
|
||||
if (data0.TimeOver == false) return StepResult.Wait;
|
||||
}
|
||||
break;
|
||||
case CType.Output:
|
||||
var data1 = cmd.Data as CDOutput;
|
||||
if (data1.PinIndex < 0) return StepResult.Error;
|
||||
if (DIO.SetOutput((eDOName)data1.Pin, data1.Value) == false) return StepResult.Error;
|
||||
break;
|
||||
case CType.Move:
|
||||
var data2 = cmd.Data as CDMove;
|
||||
MOT.Move((eAxis)data2.Axis, data2.Position, data2.Speed, data2.Acc, data2.Relative);
|
||||
break;
|
||||
case CType.MoveForece:
|
||||
var data3 = cmd.Data as CDMove;
|
||||
MOT.Move((eAxis)data3.Axis, data3.Position, data3.Speed, data3.Acc, data3.Relative, false, false);
|
||||
break;
|
||||
case CType.MoveWait:
|
||||
var data4 = cmd.Data as CDMove;
|
||||
var axis = (eAxis)data4.Axis;
|
||||
var mrlt = MOT.CheckMotionPos(axis, new TimeSpan(1), data4.Position, data4.Speed, data4.Acc, data4.Dcc, cmd.description);
|
||||
if (mrlt == false) return StepResult.Wait;
|
||||
break;
|
||||
case CType.GetFlag:
|
||||
var data5 = cmd.Data as CDFlag;
|
||||
data5.Value = PUB.flag.get(data5.Flag);
|
||||
REGISTER_FALSE = data5.Value == false;
|
||||
REGISTER_TRUE = data5.Value == true;
|
||||
break;
|
||||
case CType.SetFlag:
|
||||
var data6 = cmd.Data as CDFlag;
|
||||
PUB.flag.set(data6.Flag, data6.Value, cmd.description);
|
||||
break;
|
||||
case CType.True:
|
||||
var data7 = cmd.Data as CDCommand;
|
||||
if (REGISTER_TRUE) return RunCode(data7.Command);
|
||||
break;
|
||||
case CType.False:
|
||||
var data8 = cmd.Data as CDCommand;
|
||||
if (REGISTER_FALSE) return RunCode(data8.Command);
|
||||
break;
|
||||
case CType.GetVar: //공용변수의값
|
||||
var data10 = cmd.Data as CDGetVar;
|
||||
if (data10.Key == "STEPTIME")
|
||||
{
|
||||
data10.Confirm = true;
|
||||
data10.Value = (int)PUB.sm.StepRunTime.TotalMilliseconds;
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
case CType.GetSetVar: //공용변수(설정)의 값
|
||||
var data11 = cmd.Data as CDGetVar;
|
||||
if (data11.Key == "TIMEOUT_HOMEFULL")
|
||||
{
|
||||
data11.Confirm = true;
|
||||
data11.Value = 60;// (int)Pub.sm.StepRunTime.TotalMilliseconds;
|
||||
}
|
||||
break;
|
||||
|
||||
case CType.Compare:
|
||||
|
||||
var data9 = cmd.Data as CDCompare<int>;
|
||||
if (data9 != null)
|
||||
{
|
||||
RunCode(data9.Source); //비교값(좌)
|
||||
RunCode(data9.Target); //비교값(우)
|
||||
|
||||
var valS = data9.Source.Data as ICommandValue;
|
||||
var valT = data9.Target.Data as ICommandValue;
|
||||
int ValueS = (int)valS.Value;
|
||||
int ValueT = (int)valT.Value;
|
||||
|
||||
REGISTER_ABOVE = ValueS > ValueT;
|
||||
REGISTER_BELOW = ValueS < ValueT;
|
||||
REGISTER_EQUAL = ValueS == ValueT;
|
||||
REGISTER_TRUE = ValueS == ValueT;
|
||||
REGISTER_FALSE = ValueS != ValueT;
|
||||
REGISTER_VALUE = ValueS - ValueT;
|
||||
}
|
||||
else return StepResult.Error;
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case CType.SetError:
|
||||
var data12 = cmd.Data as CDError;
|
||||
PUB.Result.SetResultMessage(data12.ResultCode, data12.ErrorCode, data12.NextStep);
|
||||
break;
|
||||
}
|
||||
|
||||
return StepResult.Complete;
|
||||
}
|
||||
}
|
||||
public enum CType
|
||||
{
|
||||
NOP = 0,
|
||||
/// <summary>
|
||||
/// motion move
|
||||
/// </summary>
|
||||
Move,
|
||||
MoveForece,
|
||||
|
||||
/// <summary>
|
||||
/// move and wait
|
||||
/// </summary>
|
||||
MoveWait,
|
||||
|
||||
/// <summary>
|
||||
/// set digital output
|
||||
/// </summary>
|
||||
Output,
|
||||
Log,
|
||||
StepChange,
|
||||
/// <summary>
|
||||
/// check digital input
|
||||
/// </summary>
|
||||
InputCheck,
|
||||
|
||||
/// <summary>
|
||||
/// check digital output
|
||||
/// </summary>
|
||||
OutputCheck,
|
||||
|
||||
GetFlag,
|
||||
SetFlag,
|
||||
|
||||
Equal,
|
||||
NotEqual,
|
||||
True,
|
||||
False,
|
||||
Zero,
|
||||
NonZero,
|
||||
SetError,
|
||||
Compare,
|
||||
SetVar,
|
||||
GetVar,
|
||||
GetSetVar,
|
||||
Above,
|
||||
Below,
|
||||
|
||||
Wait,
|
||||
Run,
|
||||
|
||||
}
|
||||
public class Command
|
||||
{
|
||||
|
||||
public CType type { get; set; } = CType.NOP;
|
||||
public int Idx { get; set; }
|
||||
public string description { get; set; }
|
||||
public ICommandData Data { get; set; }
|
||||
public Command(CType type, string desc = "")
|
||||
{
|
||||
this.type = type;
|
||||
this.description = desc;
|
||||
}
|
||||
}
|
||||
public interface ICommandData
|
||||
{
|
||||
// string Description { get; set; }
|
||||
}
|
||||
public interface ICommandValue
|
||||
{
|
||||
object Value { get; set; }
|
||||
}
|
||||
public class CDGetVar : ICommandData, ICommandValue
|
||||
{
|
||||
public string Key { get; set; }
|
||||
public object Value { get; set; }
|
||||
public Boolean Confirm { get; set; }
|
||||
public CDGetVar(string key)
|
||||
{
|
||||
this.Key = key;
|
||||
}
|
||||
}
|
||||
public class CDGetSetVar : ICommandData, ICommandValue
|
||||
{
|
||||
public string Key { get; set; }
|
||||
public object Value { get; set; }
|
||||
public Boolean Confirm { get; set; }
|
||||
public CDGetSetVar(string key)
|
||||
{
|
||||
this.Key = key;
|
||||
}
|
||||
}
|
||||
public class CDSetVar : ICommandData
|
||||
{
|
||||
public string Key { get; set; }
|
||||
public int Value { get; set; }
|
||||
public CDSetVar(string key, int value)
|
||||
{
|
||||
this.Key = key;
|
||||
this.Value = Value;
|
||||
}
|
||||
}
|
||||
public class CDFlag : ICommandData
|
||||
{
|
||||
public eVarBool Flag { get; set; }
|
||||
public Boolean Value { get; set; }
|
||||
public CDFlag(eVarBool flag)
|
||||
{
|
||||
this.Flag = flag;
|
||||
Value = false;
|
||||
}
|
||||
}
|
||||
|
||||
public class CDSetValI : ICommandData
|
||||
{
|
||||
public int Value { get; set; }
|
||||
public CDSetValI(int idx, int value)
|
||||
{
|
||||
this.Value = value;
|
||||
}
|
||||
}
|
||||
public class CDSetValB : ICommandData
|
||||
{
|
||||
public bool Value { get; set; }
|
||||
public CDSetValB(int idx, bool value)
|
||||
{
|
||||
this.Value = value;
|
||||
}
|
||||
}
|
||||
public class CDCommand : ICommandData
|
||||
{
|
||||
public Command Command { get; set; }
|
||||
public CDCommand(Command command)
|
||||
{
|
||||
this.Command = command;
|
||||
}
|
||||
}
|
||||
public class CDError : ICommandData
|
||||
{
|
||||
public eResult ResultCode { get; set; }
|
||||
public eECode ErrorCode { get; set; }
|
||||
public eNextStep NextStep { get; set; }
|
||||
|
||||
public CDError(eResult resultCode, eECode errorCode, eNextStep nextStep)
|
||||
{
|
||||
ResultCode = resultCode;
|
||||
ErrorCode = errorCode;
|
||||
NextStep = nextStep;
|
||||
}
|
||||
}
|
||||
//public class CDCompare<T> : ICommandData
|
||||
//{
|
||||
// public T Value { get; set; }
|
||||
// public CDCompare(T value)
|
||||
// {
|
||||
// Value = value;
|
||||
// }
|
||||
// public CDCompare(Command source, Command target)
|
||||
// {
|
||||
// Value = value;
|
||||
// }
|
||||
//}
|
||||
public class CDCompare<T> : ICommandData
|
||||
{
|
||||
public Command Source { get; set; }
|
||||
public Command Target { get; set; }
|
||||
public CDCompare(Command source, Command target)
|
||||
{
|
||||
Source = source;
|
||||
Target = target;
|
||||
}
|
||||
}
|
||||
|
||||
public class CDWait : ICommandData
|
||||
{
|
||||
public int WaitMS { get; set; }
|
||||
public DateTime StartTime { get; set; }
|
||||
public Boolean Trigger { get; set; }
|
||||
private TimeSpan GetTime { get { return DateTime.Now - StartTime; } }
|
||||
public Boolean TimeOver { get { return GetTime.TotalMilliseconds > WaitMS; } }
|
||||
public void SetTrigger(Boolean value)
|
||||
{
|
||||
Trigger = value;
|
||||
StartTime = DateTime.Now;
|
||||
}
|
||||
|
||||
public CDWait() : this(100) { }
|
||||
public CDWait(int ms)
|
||||
{
|
||||
this.WaitMS = ms;
|
||||
}
|
||||
}
|
||||
public class CDMove : ICommandData
|
||||
{
|
||||
|
||||
public int Axis { get; set; }
|
||||
public double Position { get; set; }
|
||||
public double Speed { get; set; }
|
||||
public double Acc { get; set; }
|
||||
public double Dcc { get; set; }
|
||||
public Boolean Relative { get; set; }
|
||||
// public string Description { get; set; }
|
||||
public CDMove(eAxis axis, double pos, double speed) : this((int)axis, pos, speed, 0) { }
|
||||
public CDMove(int axis, double pos, double speed, double acc, double dcc = 0, Boolean relatvie = false)
|
||||
{
|
||||
Axis = axis;
|
||||
Position = pos;
|
||||
Speed = speed;
|
||||
Acc = acc;
|
||||
Dcc = dcc == 0 ? acc : dcc;
|
||||
Relative = relatvie;
|
||||
|
||||
}
|
||||
}
|
||||
public class CDOutput : ICommandData
|
||||
{
|
||||
|
||||
public eDOName Pin { get; set; }
|
||||
public int PinIndex { get; set; }
|
||||
public Boolean Value { get; set; }
|
||||
// public string Description { get; set; }
|
||||
//public CDOutput(eDOName pin) : this(pin, false) { }
|
||||
public CDOutput(eDOName pin, Boolean value)
|
||||
{
|
||||
Pin = pin;
|
||||
PinIndex = (int)pin;
|
||||
Value = value;
|
||||
}
|
||||
public CDOutput(int point, Boolean value)
|
||||
{
|
||||
Pin = (eDOName)point;
|
||||
PinIndex = point;
|
||||
Value = value;
|
||||
}
|
||||
}
|
||||
|
||||
public class CDRun : ICommandData
|
||||
{
|
||||
public Action Target { get; set; }
|
||||
public CDRun(Action target)
|
||||
{
|
||||
Target = target;
|
||||
}
|
||||
}
|
||||
public class CDRunRet<T> : ICommandData
|
||||
{
|
||||
public Func<T> Target { get; set; }
|
||||
public CDRunRet(Func<T> target)
|
||||
{
|
||||
Target = target;
|
||||
}
|
||||
}
|
||||
|
||||
public class CDLog : ICommandData
|
||||
{
|
||||
|
||||
public string Message { get; set; }
|
||||
public Boolean IsError { get; set; }
|
||||
public CDLog(string message, Boolean err = false)
|
||||
{
|
||||
Message = message;
|
||||
IsError = err;
|
||||
}
|
||||
}
|
||||
public class CDStep : ICommandData
|
||||
{
|
||||
|
||||
public eSMStep Step { get; set; }
|
||||
public Boolean Force { get; set; }
|
||||
public CDStep(eSMStep step, Boolean force = false)
|
||||
{
|
||||
Step = step;
|
||||
Force = force;
|
||||
}
|
||||
}
|
||||
}
|
||||
393
Handler/Project/Class/EEMStatus.cs
Normal file
393
Handler/Project/Class/EEMStatus.cs
Normal file
@@ -0,0 +1,393 @@
|
||||
//using Project;
|
||||
//using Project.Device;
|
||||
//using System;
|
||||
//using System.Collections.Generic;
|
||||
//using System.Linq;
|
||||
//using System.Management;
|
||||
//using System.Net;
|
||||
//using System.Net.NetworkInformation;
|
||||
//using System.Text;
|
||||
//using System.Threading.Tasks;
|
||||
//using AR;
|
||||
|
||||
///// <summary>
|
||||
///// ============================================================================
|
||||
///// 장비기술 상태 모니터링 관련 클래스
|
||||
///// 이 클래스는 SQLfiletoDB 프로그램과 같이 사용하는 것을 권장합니다.
|
||||
///// 현재 실행 중인 프로그램의 하위 폴더 Status 에 입력된 상태값을 SQL 파일로 기록합니다.
|
||||
///// SQLfiletoDB는 SQL파일을 실제 DB에 기록하는 프로그램입니다.
|
||||
///// ============================================================================
|
||||
///// 작성자 : chi
|
||||
///// 작성일 : 202-06-15
|
||||
///// GIT : (none)
|
||||
///// </summary>
|
||||
//public static partial class EEMStatus
|
||||
//{
|
||||
// static System.Threading.ManualResetEvent mre = new System.Threading.ManualResetEvent(true);
|
||||
// static string ip = string.Empty;
|
||||
// static string mac = string.Empty;
|
||||
// static DateTime StatusChecktime = DateTime.Now;
|
||||
// static DateTime MonitorChecktime = DateTime.Now.AddYears(-1);
|
||||
// static DateTime FileCheckTime = DateTime.Now;
|
||||
// static string monitorfile = string.Empty;
|
||||
// /// <summary>
|
||||
// /// UpdateStatusSQL 명령이 동작하는 간격이며 기본 180초(=3분)로 되어 있습니다.
|
||||
// /// </summary>
|
||||
// public static int UpdateStatusInterval { get; set; } = 180;
|
||||
// public static int UpdateFileInterval { get; set; } = 3;
|
||||
// static bool queryok = false;
|
||||
// static bool UpdateRun = false;
|
||||
|
||||
// public static string IP
|
||||
// {
|
||||
// get
|
||||
// {
|
||||
// if (queryok == false) GetNetworkInfo();
|
||||
// return ip;
|
||||
// }
|
||||
// set { ip = value; }
|
||||
// }
|
||||
// public static string MAC
|
||||
// {
|
||||
// get
|
||||
// {
|
||||
// if (queryok == false) GetNetworkInfo();
|
||||
// return mac;
|
||||
// }
|
||||
// set
|
||||
// {
|
||||
// mac = value;
|
||||
// }
|
||||
// }
|
||||
|
||||
// /// <summary>
|
||||
// /// 현재 시스템의 IP/MAC정보를 취득합니다.
|
||||
// /// </summary>
|
||||
// static void GetNetworkInfo()
|
||||
// {
|
||||
|
||||
// ip = "";
|
||||
// mac = "";
|
||||
// // string prgmName = Application.ProductName;
|
||||
|
||||
// var nif = NetworkInterface.GetAllNetworkInterfaces();
|
||||
// var host = Dns.GetHostEntry(Dns.GetHostName());
|
||||
// string fullname = System.Net.Dns.GetHostEntry("").HostName;
|
||||
// foreach (IPAddress r in host.AddressList)
|
||||
// {
|
||||
// string str = r.ToString();
|
||||
|
||||
// if (str != "" && str.Substring(0, 3) == "10.")
|
||||
// {
|
||||
// ip = str;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
|
||||
// string rtn = string.Empty;
|
||||
// ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled='TRUE'");
|
||||
// ManagementObjectSearcher query1 = new ManagementObjectSearcher(oq);
|
||||
// foreach (ManagementObject mo in query1.Get())
|
||||
// {
|
||||
// string[] address = (string[])mo["IPAddress"];
|
||||
// if (address[0] == ip && mo["MACAddress"] != null)
|
||||
// {
|
||||
// mac = mo["MACAddress"].ToString();
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// queryok = true;
|
||||
// }
|
||||
|
||||
// public static void UpdateStatusSQL(eSMStep status, bool _extrun = false, string remark = "")
|
||||
// {
|
||||
// var tsrun = DateTime.Now - StatusChecktime;
|
||||
// if (tsrun.TotalSeconds >= UpdateStatusInterval)
|
||||
// {
|
||||
// AddStatusSQL(status, "UPDATE", extrun: _extrun);
|
||||
// StatusChecktime = DateTime.Now;
|
||||
// }
|
||||
|
||||
// //내부실행모드일때에만 파일을 처리한다
|
||||
// if (_extrun == false)
|
||||
// {
|
||||
// var tsfile = DateTime.Now - FileCheckTime;
|
||||
// if (tsfile.TotalSeconds >= UpdateFileInterval)
|
||||
// {
|
||||
// if (UpdateRun == false)
|
||||
// {
|
||||
// UpdateRun = true;
|
||||
// Task.Run(() =>
|
||||
// {
|
||||
// UpdateFileToDB();
|
||||
// UpdateRun = false;
|
||||
// });
|
||||
// }
|
||||
// FileCheckTime = DateTime.Now;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// /// <summary>
|
||||
// /// 상태모니터링 프로그램의 실행파일 명
|
||||
// /// </summary>
|
||||
// static string StatusMonitorFile
|
||||
// {
|
||||
// get
|
||||
// {
|
||||
// if (string.IsNullOrEmpty(monitorfile))
|
||||
// monitorfile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Status", "SQLFileToDB.exe");
|
||||
// return monitorfile;
|
||||
// }
|
||||
// }
|
||||
|
||||
// static System.Diagnostics.Process CheckMonitor()
|
||||
// {
|
||||
// if (System.IO.File.Exists(StatusMonitorFile) == false) return null;
|
||||
|
||||
// var prcs = System.Diagnostics.Process.GetProcesses();
|
||||
// return prcs.Where(t => t.ProcessName.ToLower().StartsWith("sqlfiletodb")).FirstOrDefault();
|
||||
// }
|
||||
|
||||
// public static bool RunStatusMonitor()
|
||||
// {
|
||||
// //파일이 없으면 실행 불가
|
||||
// if (System.IO.File.Exists(StatusMonitorFile) == false) return false;
|
||||
|
||||
// //실행프로세스 검사
|
||||
// var prc = CheckMonitor();
|
||||
// if (prc == null)
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// prc = new System.Diagnostics.Process();
|
||||
// prc.StartInfo = new System.Diagnostics.ProcessStartInfo
|
||||
// {
|
||||
// Arguments = string.Empty,
|
||||
// FileName = StatusMonitorFile,
|
||||
// };
|
||||
// prc.Start();
|
||||
// }
|
||||
// catch
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
// return true;
|
||||
// }
|
||||
|
||||
// /// <summary>
|
||||
// /// 작업수량을 입력합니다
|
||||
// /// </summary>
|
||||
// /// <param name="cnt"></param>
|
||||
// /// <returns></returns>
|
||||
// public static string AddStatusCount(int cnt, string remark = "")
|
||||
// {
|
||||
// if (remark.isEmpty()) remark = $"Count Set : {cnt}";
|
||||
// return AddStatusSQL(PUB.sm.Step, remark, count: cnt);
|
||||
// }
|
||||
// /// <summary>
|
||||
// /// 상태메세지를 status 폴더에 기록합니다.
|
||||
// /// </summary>
|
||||
// /// <param name="status">상태머신의 상태값</param>
|
||||
// /// <param name="remark">비고</param>
|
||||
// /// <param name="wdate">기록일시</param>
|
||||
// /// <returns>오류발생시 오류메세지가 반환 됩니다</returns>
|
||||
// public static string AddStatusSQL(eSMStep status, string remark = "", DateTime? wdate = null, bool extrun = false, int? count = null)
|
||||
// {
|
||||
// if (queryok == false || MAC.isEmpty()) GetNetworkInfo();
|
||||
// if (status == eSMStep.CLOSEWAIT || status == eSMStep.CLOSED) return string.Empty;
|
||||
|
||||
// if (extrun)
|
||||
// {
|
||||
// //상태모니터링 프로그램을 실행합니다.
|
||||
// var tsMon = DateTime.Now - MonitorChecktime;
|
||||
// if (tsMon.TotalMinutes > 5) RunStatusMonitor();
|
||||
// }
|
||||
|
||||
// try
|
||||
// {
|
||||
// var state = 0;
|
||||
// string cntstr = "null";
|
||||
// if (count != null) cntstr = count.ToString();
|
||||
// var alarmid = string.Empty;
|
||||
// var alarmmsg = string.Empty;
|
||||
// if (string.IsNullOrEmpty(remark)) remark = $"STS:{status}";
|
||||
|
||||
// if (status == eSMStep.RUN) state = 1;
|
||||
// else if (status == eSMStep.ERROR || status == eSMStep.EMERGENCY)
|
||||
// {
|
||||
// state = 2;
|
||||
// alarmid = PUB.Result.ResultErrorCode.ToString();
|
||||
// alarmmsg = PUB.Result.ResultMessage;
|
||||
// }
|
||||
// else if (status == eSMStep.PAUSE) //일시중지도 오류코드가 포함된다,
|
||||
// {
|
||||
// if (PUB.Result.ResultErrorCode == Project.eECode.USER_STEP ||
|
||||
// PUB.Result.ResultErrorCode == Project.eECode.USER_STOP ||
|
||||
// PUB.Result.ResultErrorCode.ToString().StartsWith("MESSAGE"))
|
||||
// {
|
||||
// //사용자에의해 멈추는 것은 오류코드를 넣지 않는다.
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// alarmid = PUB.Result.ResultErrorCode.ToString();
|
||||
// alarmmsg = PUB.Result.ResultMessage;
|
||||
// }
|
||||
// }
|
||||
// else if (status == eSMStep.INIT) state = 3; //시작
|
||||
// else if (status == eSMStep.CLOSING) state = 4; //종료
|
||||
|
||||
// //length check
|
||||
// if (alarmid.Length > 10) alarmid = alarmid.Substring(0, 10);
|
||||
// if (remark.Length > 99) remark = remark.Substring(0, 99);
|
||||
// if (alarmmsg.Length > 250) alarmmsg = alarmmsg.Substring(0, 50);
|
||||
|
||||
// var mcid = AR.SETTING.Data.MCID;// Project.PUB.setting.MCID;//.Data.MCID;
|
||||
// //var mcid = Project.PUB.setting.MCID;//.Data.MCID;
|
||||
// var path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Status");
|
||||
// var file = System.IO.Path.Combine(path, $"{DateTime.Now.ToString("HHmmssfff")}_{status}.sql");
|
||||
// var sql = "insert into MCMonitor_Rawdata(Model,status,remark,ip,mac,time,alarmid,alarmmsg,count,version) " +
|
||||
// " values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}',{8},'{9}')";
|
||||
|
||||
// var timestr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
// if (wdate != null) timestr = ((DateTime)wdate).ToString("yyyy-MM-dd HH:mm:ss");
|
||||
// var VersionNumber = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
|
||||
// sql = string.Format(sql, mcid, state, remark.Replace("'", "''"), IP, MAC, timestr, alarmid, alarmmsg, cntstr, VersionNumber);
|
||||
// System.IO.File.WriteAllText(file, sql, System.Text.Encoding.Default);
|
||||
|
||||
// ////만들어진지 3분이 지난 파일은 삭제한다.
|
||||
// //var di = new System.IO.DirectoryInfo(path);
|
||||
// //var fi = di.GetFiles("*.sql", System.IO.SearchOption.TopDirectoryOnly).Where(t => t.LastWriteTime < DateTime.Now.AddMinutes(-3)).FirstOrDefault();
|
||||
// //if (fi != null) fi.Delete();
|
||||
// if (state == 4) UpdateFileToDB();
|
||||
// return string.Empty;
|
||||
// }
|
||||
// catch (Exception ex)
|
||||
// {
|
||||
// return ex.Message;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
||||
// static void UpdateFileToDB()
|
||||
// {
|
||||
// if (mre.WaitOne(1000) == false) return;
|
||||
// mre.Reset();
|
||||
// var cs = "Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=Amkor123!";
|
||||
// var path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Status");
|
||||
// var di = new System.IO.DirectoryInfo(path);
|
||||
// if (di.Exists == false) return;
|
||||
// var file = di.GetFiles("*.sql", System.IO.SearchOption.TopDirectoryOnly)
|
||||
// .Where(t => t.LastWriteTime < DateTime.Now.AddSeconds(-3))
|
||||
// .OrderByDescending(t => t.LastWriteTime).FirstOrDefault();
|
||||
|
||||
// if (file == null)
|
||||
// {
|
||||
// mre.Set();
|
||||
// return;
|
||||
// }
|
||||
|
||||
// //파일을 찾아야한다
|
||||
// // PUB.log.Add($">> {file.FullName}");
|
||||
|
||||
|
||||
|
||||
// try
|
||||
// {
|
||||
// var sql = System.IO.File.ReadAllText(file.FullName, System.Text.Encoding.Default);
|
||||
// if (string.IsNullOrEmpty(sql))
|
||||
// {
|
||||
// //비어잇다면
|
||||
// var errpath = System.IO.Path.Combine(di.FullName, "Error");
|
||||
// var errfile = System.IO.Path.Combine(errpath, file.Name);
|
||||
// if (System.IO.Directory.Exists(errpath) == false) System.IO.Directory.CreateDirectory(errpath);
|
||||
// System.IO.File.Move(file.FullName, errfile);// file.MoveTo(errfile);
|
||||
// // ecnt += 1;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// // var csstr = PUB.setting.ConnectionString;
|
||||
// // if (string.IsNullOrEmpty(csstr)) csstr = "Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=Amkor123!";
|
||||
// var cn = new System.Data.SqlClient.SqlConnection(cs);
|
||||
// var cmd = new System.Data.SqlClient.SqlCommand(sql, cn);
|
||||
// cn.Open();
|
||||
// var cnt = cmd.ExecuteNonQuery();
|
||||
// //if (cnt == 0) PUB.log.Add($"Result Empty : {sql}");
|
||||
// cn.Close();
|
||||
// cnt += 1;
|
||||
|
||||
// var errpath = System.IO.Path.Combine(di.FullName, "Complete");
|
||||
// var errfile = System.IO.Path.Combine(errpath, file.Name);
|
||||
// if (System.IO.Directory.Exists(errpath) == false) System.IO.Directory.CreateDirectory(errpath);
|
||||
// //file.MoveTo(errfile);
|
||||
// System.IO.File.Move(file.FullName, errfile);
|
||||
// }
|
||||
|
||||
// }
|
||||
// catch (Exception ex)
|
||||
// {
|
||||
// if(ex.Message.Contains("deadlocked") == false)
|
||||
// {
|
||||
// var errpath = System.IO.Path.Combine(di.FullName, "Error");
|
||||
// var errfile = System.IO.Path.Combine(errpath, file.Name);
|
||||
// if (System.IO.Directory.Exists(errpath) == false) System.IO.Directory.CreateDirectory(errpath);
|
||||
// try
|
||||
// {
|
||||
// //file.MoveTo(errfile);
|
||||
// System.IO.File.Move(file.FullName, errfile);
|
||||
|
||||
// //오류내용도 저장한다..
|
||||
// var errfilename = errfile + "_error.txt";
|
||||
// System.IO.File.WriteAllText(errfilename, ex.Message, System.Text.Encoding.Default);
|
||||
// }
|
||||
// catch (Exception ex2)
|
||||
// {
|
||||
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Console.WriteLine("(UpdateFileToDB) Dead lock error ignored");
|
||||
// }
|
||||
|
||||
// //ecnt += 1;
|
||||
// }
|
||||
|
||||
// //try
|
||||
// //{
|
||||
// // //생성된지 10일이 넘은 자료는 삭제한다.
|
||||
// // //시간소비를 피해서 1개의 파일만 작업한다
|
||||
// // //var sqlfiles = di.GetFiles("*.sql", System.IO.SearchOption.AllDirectories);
|
||||
// // //총3번의 데이터를 처리한다
|
||||
// // //var files = sqlfiles.Where(t => t.LastWriteTime < DateTime.Now.AddDays(-10)).Select(t => t.FullName);
|
||||
// // //int i = 0;
|
||||
// // //var dellist = files.TakeWhile(t => i++ < 3);
|
||||
// // //foreach (var delfile in dellist)
|
||||
// // //System.IO.File.Delete(delfile);
|
||||
// //}
|
||||
// //catch
|
||||
// //{
|
||||
|
||||
// //}
|
||||
// mre.Set();
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
///*
|
||||
//=================================================
|
||||
//변경내역
|
||||
//=================================================
|
||||
//230619 chi UpdateFileToDB 에서 폴더가 없다면 return 하도록 함
|
||||
//230615 chi UpdateFiletoDB의 ManualResetEvent적용
|
||||
// Version 항목 추가
|
||||
//230612 chi 프로그램 시작/종료 alarmid항목 추가
|
||||
// 완료된 파일 10일간 보존하도록 함
|
||||
//230522 chi extrun 모드 추가(agv용 - SQL파일을 외부 프로그램에서 처리하도록 함)
|
||||
//230617 chi 파일쓰기함수를 Task 로 처리
|
||||
// 3분지난데이터 삭제기능 제거
|
||||
//230516 chi initial commit
|
||||
//*/
|
||||
689
Handler/Project/Class/EnumData.cs
Normal file
689
Handler/Project/Class/EnumData.cs
Normal file
@@ -0,0 +1,689 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace Project
|
||||
{
|
||||
|
||||
public enum StepResult
|
||||
{
|
||||
Wait = 0,
|
||||
Complete,
|
||||
Error,
|
||||
}
|
||||
|
||||
public enum eWorkPort
|
||||
{
|
||||
Left = 0,
|
||||
Right
|
||||
}
|
||||
|
||||
public enum eNormalResult
|
||||
{
|
||||
True = 0,
|
||||
False,
|
||||
Error,
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public enum eSMStep : byte
|
||||
{
|
||||
NOTSET = 0,
|
||||
INIT = 1,
|
||||
IDLE = 10,
|
||||
|
||||
RUN = 50,
|
||||
RUN_ROOT_SEQUENCE_L,
|
||||
RUN_ROOT_SEQUENCE_R,
|
||||
RUN_KEYENCE_READ_L,
|
||||
RUN_KEYENCE_READ_R,
|
||||
RUN_PICKER_ON_L,
|
||||
RUN_PICKER_ON_R,
|
||||
RUN_PICKER_OFF_L,
|
||||
RUN_PICKER_OFF_R,
|
||||
RUN_PRINTER_F,
|
||||
RUN_PRINTER_R,
|
||||
RUN_PRINTER_ON_F,
|
||||
RUN_PRINTER_ON_R,
|
||||
RUN_PRINTER_OFF_F,
|
||||
RUN_PRINTER_OFF_R,
|
||||
RUN_QRVALID_F,
|
||||
RUN_QRVALID_R,
|
||||
|
||||
RUN_COM_PT0,
|
||||
RUN_COM_PT1,
|
||||
RUN_COM_PT2,
|
||||
|
||||
RUN_PICK_RETRY,
|
||||
|
||||
//이후에 사용자 런 코드용 스텝을 추가한다.
|
||||
EMERGENCY = 200,
|
||||
HOME_FULL = 201,
|
||||
HOME_DELAY,
|
||||
HOME_CONFIRM,
|
||||
HOME_QUICK,
|
||||
|
||||
CLOSING = 250,
|
||||
CLOSEWAIT = 251,
|
||||
CLOSED = 252,
|
||||
|
||||
//사용자영역
|
||||
FINISH = 100,
|
||||
PAUSE,
|
||||
WAITSTART,
|
||||
ERROR,
|
||||
SAFTY,
|
||||
CLEAR,
|
||||
}
|
||||
|
||||
|
||||
public enum eWaitMessage
|
||||
{
|
||||
PX = 0,
|
||||
PZ,
|
||||
LMOVE,
|
||||
LUPDN,
|
||||
RMOVE,
|
||||
RUPDN,
|
||||
LPRINT,
|
||||
RPRINT,
|
||||
VIS0,
|
||||
VIS1,
|
||||
VIS2,
|
||||
}
|
||||
//public enum eJobResult
|
||||
//{
|
||||
// None = 0,
|
||||
// Error,
|
||||
// ErrorOut,
|
||||
// MaxCount,
|
||||
// NotExistSID,
|
||||
// DisableUnloader,
|
||||
// MatchFail,
|
||||
// NoBarcode
|
||||
//}
|
||||
public enum eCartSize
|
||||
{
|
||||
None = 0,
|
||||
Inch7 = 7,
|
||||
Inch13 = 13
|
||||
}
|
||||
|
||||
public enum ePrintPutPos
|
||||
{
|
||||
None = 0,
|
||||
Top,
|
||||
Middle,
|
||||
Bottom,
|
||||
}
|
||||
|
||||
public enum ePrintVac
|
||||
{
|
||||
inhalation = 0,
|
||||
exhaust,
|
||||
off,
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public enum eJobType : byte
|
||||
{
|
||||
Sorter = 0,
|
||||
Dryrun,
|
||||
}
|
||||
|
||||
public enum eHeaderHandler
|
||||
{
|
||||
Ping = 0,
|
||||
RequestData,
|
||||
RequstSeqNo,
|
||||
RequstInputReel,
|
||||
JobEnd,
|
||||
JobDelete,
|
||||
}
|
||||
public struct sVisionDMResult
|
||||
{
|
||||
public Boolean iSystemErr { get; set; }
|
||||
public Boolean isError { get; set; }
|
||||
public string DM { get; set; }
|
||||
public System.Drawing.Rectangle ROS { get; set; }
|
||||
|
||||
public System.Drawing.PointF DMCenter { get; set; }
|
||||
public List<System.Drawing.PointF> DMCorner { get; set; }
|
||||
public string DMMessage { get; set; }
|
||||
}
|
||||
public struct sObjectDetectResult
|
||||
{
|
||||
public string Message { get; set; }
|
||||
public List<System.Drawing.Rectangle> Rect { get; set; }
|
||||
public List<uint> Areas { get; set; }
|
||||
public Boolean OK
|
||||
{
|
||||
get
|
||||
{
|
||||
if (Areas == null || Areas.Count < 1) return false;
|
||||
else return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public enum eGridValue
|
||||
{
|
||||
/// <summary>
|
||||
/// 아직 처리 전(기본 초기화된 상태)
|
||||
/// </summary>
|
||||
NotSet = 0,
|
||||
|
||||
/// <summary>
|
||||
/// 원점검사에서 오류 발생
|
||||
/// </summary>
|
||||
OrientError,
|
||||
|
||||
/// <summary>
|
||||
/// 아이템검출에서 실패됨
|
||||
/// </summary>
|
||||
NoItem,
|
||||
|
||||
/// <summary>
|
||||
/// 아이템검출성공, 데이터매트릭스 검출 실패
|
||||
/// </summary>
|
||||
NewItem,
|
||||
|
||||
/// <summary>
|
||||
/// 데이터매트릭스 읽기 실패
|
||||
/// </summary>
|
||||
DMReadError,
|
||||
|
||||
/// <summary>
|
||||
/// 데이터매트릭스 관리 횟수가 기준횟수(10) 미만 (아직 정상)
|
||||
/// </summary>
|
||||
DMNotmalCount,
|
||||
|
||||
/// <summary>
|
||||
/// 데이터매트릭스 관리 횟수가 기준횟수(10)를 초과한 경우
|
||||
/// </summary>
|
||||
DMOverCount,
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public enum eRoiSeq
|
||||
{
|
||||
Area = 0,
|
||||
DataMatrix,
|
||||
Orient,
|
||||
DetectUnit,
|
||||
DetectDM
|
||||
}
|
||||
public enum eWaitType : byte
|
||||
{
|
||||
TryLock = 0,
|
||||
TryUnLock,
|
||||
AirBlowOn,
|
||||
AirBlowOff,
|
||||
AirBlowDustOn,
|
||||
AirBlowDustOff,
|
||||
PrintPickLOff,
|
||||
PrintPickLOn,
|
||||
PrintPickROff,
|
||||
PrintPickROn,
|
||||
PickOff,
|
||||
PickOn,
|
||||
AirBlowCoverDn,
|
||||
AirBlowCoverUp,
|
||||
UnloaderUp,
|
||||
UnloaderDn,
|
||||
LiftUp,
|
||||
LiftDn,
|
||||
}
|
||||
|
||||
public enum eSensorState : byte
|
||||
{
|
||||
Off = 0,
|
||||
On = 1,
|
||||
InComplete = 2,
|
||||
}
|
||||
public enum eIOCheckResult
|
||||
{
|
||||
Wait = 0,
|
||||
Complete,
|
||||
Timeout
|
||||
}
|
||||
|
||||
|
||||
|
||||
public enum ePort
|
||||
{
|
||||
Left = 0,
|
||||
Right,
|
||||
}
|
||||
|
||||
|
||||
enum eResultStringType
|
||||
{
|
||||
Nomal = 0,
|
||||
Attention,
|
||||
Error,
|
||||
}
|
||||
public enum eMotDir
|
||||
{
|
||||
Stop = 0,
|
||||
CW = 1,
|
||||
CCW = 2
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// RUN중일 때 사용되는 세부 시퀀스
|
||||
/// </summary>
|
||||
public enum eRunStep : byte
|
||||
{
|
||||
NOTSET = 0,
|
||||
|
||||
/// <summary>
|
||||
/// 프로그램 체크
|
||||
/// </summary>
|
||||
STARTCHKSW,
|
||||
/// <summary>
|
||||
/// 하드웨어 체크
|
||||
/// </summary>
|
||||
STARTCHKHW,
|
||||
|
||||
/// <summary>
|
||||
/// 기계장치를 작업 시작 전 상태로 이동합니다
|
||||
/// </summary>
|
||||
INITIALHW,
|
||||
|
||||
/// <summary>
|
||||
/// 안전지대(비활성화된경우 발생)
|
||||
/// </summary>
|
||||
SAFTYZONE_GO,
|
||||
SAFTYZONE_RDY,
|
||||
|
||||
BEGINLOAD,
|
||||
/// <summary>
|
||||
/// 트레이를 로딩하기 위한 로더 이동 및 트레이 추출
|
||||
/// </summary>
|
||||
PORTLOAD,
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 비젼촬영을위한 위치로 이동
|
||||
/// </summary>
|
||||
BEGINPICK,
|
||||
ENDPICK,
|
||||
|
||||
OVERLOAD,
|
||||
SAVEDATA,
|
||||
|
||||
/// <summary>
|
||||
/// 모션 원위치
|
||||
/// </summary>
|
||||
BARCODE,
|
||||
|
||||
/// <summary>
|
||||
/// AIR/BLOW 위치 이동 및 작업
|
||||
/// </summary>
|
||||
AIRBLOW,
|
||||
REELOUT,
|
||||
TRAYOUT,
|
||||
|
||||
/// <summary>
|
||||
/// 언로드위치로 셔틀을 이동
|
||||
/// </summary>
|
||||
BEGINUNLOADER,
|
||||
/// <summary>
|
||||
/// 트레이 언로드 작업
|
||||
/// </summary>
|
||||
TRAYUNLOAD,
|
||||
|
||||
/// <summary>
|
||||
/// 언로딩하고 다시 로딩존으로 이동하는 시퀀스
|
||||
/// </summary>
|
||||
MOVE_TO_LOAD,
|
||||
|
||||
}
|
||||
|
||||
|
||||
public enum ePLCIPin : byte
|
||||
{
|
||||
X00, X01, X02, X03, X04, X05, X06, X07, X08, X09, X0A,
|
||||
X10, X11, X12, X13, X14, X15, X16, X17, X18, X19, X1A
|
||||
}
|
||||
public enum ePLCOPin : byte
|
||||
{
|
||||
Y00, Y01, Y02, Y03, Y04, Y05, Y06, Y07, Y08, Y09, Y0A,
|
||||
Y10, Y11, Y12, Y13, Y14, Y15, Y16, Y17, Y18, Y19, Y1A
|
||||
}
|
||||
public enum ePLCITitle : byte
|
||||
{
|
||||
Run, Cart_Status_01, Cart_Status_02, Cart_Status_03, Cart_Status_04,
|
||||
Machine_Confirm = 19
|
||||
}
|
||||
public enum ePLCOTitle : byte
|
||||
{
|
||||
Cart_No_Setting = 0,
|
||||
Handler_Confirm = 19,
|
||||
}
|
||||
|
||||
public enum eResult : byte
|
||||
{
|
||||
NOERROR,
|
||||
EMERGENCY,
|
||||
SAFTY,
|
||||
DEVELOP,
|
||||
SETUP,
|
||||
HARDWARE,
|
||||
SENSOR,
|
||||
MOTION,
|
||||
OPERATION,
|
||||
COMMUNICATION,
|
||||
TIMEOUT,
|
||||
UNLOADER,
|
||||
}
|
||||
|
||||
|
||||
public enum eECode : byte
|
||||
{
|
||||
|
||||
NOTSET = 0,
|
||||
EMERGENCY = 1,
|
||||
NOMODELV = 2,//작업모델
|
||||
NOMODELM = 3,//모션모델
|
||||
DOORSAFTY = 6,
|
||||
AREASAFTY = 7,
|
||||
VIS_LICENSE = 8,
|
||||
HOME_TIMEOUT = 9,
|
||||
AIRNOOUT = 10,
|
||||
NOFUNCTION = 11,
|
||||
AIRNOTDETECT = 12,
|
||||
|
||||
DOOFF = 27,//출력 off
|
||||
DOON = 28,//출력 on
|
||||
DIOFF = 29,//입력off
|
||||
DION = 30,//입력 on
|
||||
|
||||
MESSAGE_INFO = 32,
|
||||
MESSAGE_ERROR = 33,
|
||||
|
||||
VISION_NOTREADY = 34,
|
||||
VISION_NOCONN = 35,
|
||||
VISION_TRIGERROR = 36,
|
||||
VISION_COMMERROR = 37,
|
||||
VISION_NORECV = 38,
|
||||
|
||||
AZJINIT = 39, //DIO 혹은 모션카드 초기화 X
|
||||
MOT_HSET = 41,
|
||||
MOT_SVOFF = 42,
|
||||
MOT_HSEARCH = 43,
|
||||
|
||||
MOT_CMD = 71,
|
||||
USER_STOP = 72,
|
||||
USER_STEP = 73,
|
||||
POSITION_ERROR = 86,
|
||||
MOTIONMODEL_MISSMATCH = 96,
|
||||
|
||||
|
||||
//여기서부터는 전용코드로한다(소켓은 조금 섞여 있음)
|
||||
VISCONF = 100,
|
||||
NEED_AIROFF_L,
|
||||
NEED_AIROFF_R,
|
||||
PORTOVERLOAD,
|
||||
NOPRINTLDATA,
|
||||
NOPRINTRDATA,
|
||||
PRINTL,
|
||||
PRINTR,
|
||||
CAM_LEFT,
|
||||
CAM_RIGHT,
|
||||
INCOMPLETE_LOADERDATA,
|
||||
INCOMPLETE_INFOSELECT,
|
||||
NOPUTPOSITION,
|
||||
NOREELSIZE,
|
||||
PRINTER,
|
||||
QRDATAMISSMATCHL,
|
||||
QRDATAMISSMATCHR,
|
||||
MOTX_SAFETY,
|
||||
|
||||
NO_PAPER_DETECT_L,
|
||||
NO_PAPER_DETECT_R,
|
||||
|
||||
CART_SIZE_ERROR_L,
|
||||
CART_SIZE_ERROR_R,
|
||||
|
||||
PRE_USE_REELID_L,
|
||||
PRE_USE_REELID_R,
|
||||
|
||||
NEED_JOBCANCEL,
|
||||
|
||||
LCONVER_REEL_DECTECT_ALL =150,
|
||||
RCONVER_REEL_DECTECT_ALL,
|
||||
LCONVER_REEL_DECTECT_IN,
|
||||
RCONVER_REEL_DECTECT_IN,
|
||||
LCONVER_MOVING,
|
||||
RCONVER_MOVING,
|
||||
NOREADY_KEYENCE,
|
||||
|
||||
PRINTER_LPICKER_NOBW,
|
||||
PRINTER_RPICKER_NOBW,
|
||||
NOBYPASSSID,
|
||||
|
||||
CONFIG_KEYENCE,
|
||||
PRINTER_LPRINTER_NOUP,
|
||||
PRINTER_RPRINTER_NOUP,
|
||||
NOECSDATA,
|
||||
PICKER_LCYL_NODOWN,
|
||||
PICKER_RCYL_NODOWN,
|
||||
PICKER_LCYL_NOUP,
|
||||
PICKER_RCYL_NOUP,
|
||||
|
||||
NOSIDINFOFROMDB,
|
||||
INBOUNDWEBAPIERROR,
|
||||
SIDINFORDUP,
|
||||
NOECSDATAACTIVE,
|
||||
NOTSELECTMULTISID,
|
||||
}
|
||||
|
||||
public enum eNextStep : byte
|
||||
{
|
||||
NOTHING = 0,
|
||||
PAUSE,
|
||||
PAUSENOMESAGE,
|
||||
ERROR
|
||||
}
|
||||
|
||||
public enum eILock
|
||||
{
|
||||
EMG = 0,
|
||||
PAUSE,
|
||||
HOMESET,
|
||||
DOOR,
|
||||
SAFTYAREA,
|
||||
DISABLE,
|
||||
|
||||
XMOVE,
|
||||
YMOVE,
|
||||
ZMOVE,
|
||||
|
||||
X_POS,
|
||||
Y_POS,
|
||||
Z_POS,
|
||||
|
||||
PY_POS,
|
||||
PZ_POS,
|
||||
CYL_FORWARD,
|
||||
MPrint,
|
||||
}
|
||||
|
||||
|
||||
//public enum eILockPKX
|
||||
//{
|
||||
// EMG = 0,
|
||||
// PAUSE,
|
||||
// HOMESET,
|
||||
// DOOR,
|
||||
// Disable,
|
||||
// ZL_POS,
|
||||
// ZR_POS,
|
||||
// ZMOVE,
|
||||
// PKZPOS,
|
||||
//}
|
||||
|
||||
//public enum eILockPKZ
|
||||
//{
|
||||
// EMG = 0,
|
||||
// PAUSE,
|
||||
// HOMESET,
|
||||
// DOOR,
|
||||
// Disable,
|
||||
// Y_POS,
|
||||
// YMOVE,
|
||||
// PORTRUN0,
|
||||
// PORTRUN1,
|
||||
// PORTRUN2
|
||||
//}
|
||||
|
||||
//public enum eILockPKT
|
||||
//{
|
||||
// EMG = 0,
|
||||
// PAUSE,
|
||||
// HOMESET,
|
||||
// DOOR,
|
||||
// Disable,
|
||||
// Y_POS,
|
||||
// Y_MOVE,
|
||||
// PortRun
|
||||
//}
|
||||
|
||||
|
||||
///// <summary>
|
||||
///// PRINT MOVE AXIS (L+R)
|
||||
///// </summary>
|
||||
//public enum eILockPRM
|
||||
//{
|
||||
// Emergency = 0,
|
||||
// Pause,
|
||||
// HomeSet,
|
||||
// Safty,
|
||||
// Disable,
|
||||
// ZMOVE,
|
||||
// FORWARD,
|
||||
// ITEMON,
|
||||
// PKXPOS,
|
||||
// PRNZPOS,
|
||||
//}
|
||||
|
||||
//public enum eILockPRZ
|
||||
//{
|
||||
// EMG = 0,
|
||||
// PAUSE,
|
||||
// HOMESET,
|
||||
// DOOR,
|
||||
// Disable,
|
||||
// YMOVE,
|
||||
// ITEMON,
|
||||
// PRNYPOS,
|
||||
//}
|
||||
|
||||
public enum eILockPRL
|
||||
{
|
||||
EMG = 0,
|
||||
PAUSE,
|
||||
HOMESET,
|
||||
DOOR,
|
||||
SAFTYAREA,
|
||||
DISABLE,
|
||||
|
||||
PRNYPOS,
|
||||
PRNZPOS,
|
||||
}
|
||||
public enum eILockPRR
|
||||
{
|
||||
EMG = 0,
|
||||
PAUSE,
|
||||
HOMESET,
|
||||
DOOR,
|
||||
SAFTYAREA,
|
||||
DISABLE,
|
||||
|
||||
|
||||
PRNYPOS,
|
||||
PRNZPOS,
|
||||
}
|
||||
public enum eILockVS0
|
||||
{
|
||||
EMG = 0,
|
||||
PAUSE,
|
||||
HOMESET,
|
||||
DOOR,
|
||||
SAFTYAREA,
|
||||
DISABLE,
|
||||
|
||||
PORTRDY,
|
||||
PKXPOS, //피커의 위치
|
||||
PRNYPOS, //프린터Y축 위치
|
||||
}
|
||||
public enum eILockVS1
|
||||
{
|
||||
EMG = 0,
|
||||
PAUSE,
|
||||
HOMESET,
|
||||
DOOR,
|
||||
SAFTYAREA,
|
||||
DISABLE,
|
||||
|
||||
PORTRDY,
|
||||
PKXPOS,
|
||||
}
|
||||
public enum eILockVS2
|
||||
{
|
||||
EMG = 0,
|
||||
PAUSE,
|
||||
HOMESET,
|
||||
DOOR,
|
||||
SAFTYAREA,
|
||||
DISABLE,
|
||||
|
||||
PORTRDY,
|
||||
PKXPOS, //피커의 위치
|
||||
PRNYPOS, //프린터Y축 위치
|
||||
}
|
||||
public enum eILockCV
|
||||
{
|
||||
EMG = 0,
|
||||
PAUSE,
|
||||
HOMESET,
|
||||
DOOR,
|
||||
SAFTYAREA,
|
||||
|
||||
/// <summary>
|
||||
/// 포트를 사용하지 않는경우
|
||||
/// </summary>
|
||||
DISABLE,
|
||||
|
||||
/// <summary>
|
||||
/// 카트모드
|
||||
/// </summary>
|
||||
CARTMODE,
|
||||
|
||||
/// <summary>
|
||||
/// 업체컨이어의 ready 신호
|
||||
/// </summary>
|
||||
EXTBUSY,
|
||||
|
||||
/// <summary>
|
||||
/// 나의 작업 신호
|
||||
/// </summary>
|
||||
BUSY,
|
||||
|
||||
VISION,
|
||||
}
|
||||
}
|
||||
95
Handler/Project/Class/Enum_MotPosition.cs
Normal file
95
Handler/Project/Class/Enum_MotPosition.cs
Normal file
@@ -0,0 +1,95 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace Project
|
||||
{
|
||||
|
||||
public enum ePXLoc : byte
|
||||
{
|
||||
[Description("Reel Waiting(Left) Position")]
|
||||
READYL = 0,
|
||||
[Description("Reel Waiting(Right) Position")]
|
||||
READYR,
|
||||
[Description("Reel PickOn Position")]
|
||||
PICKON,
|
||||
[Description("Reel PickOff(Left) Position")]
|
||||
PICKOFFL,
|
||||
[Description("Reel PickOff(Right) Position")]
|
||||
PICKOFFR,
|
||||
}
|
||||
|
||||
public enum ePZLoc : byte
|
||||
{
|
||||
[Description("Ready Position")]
|
||||
READY = 0,
|
||||
[Description("Reel PickOn Position")]
|
||||
PICKON,
|
||||
[Description("Reel PickOff(Left) Position")]
|
||||
PICKOFFL,
|
||||
[Description("Reel PickOff(Right) Position")]
|
||||
PICKOFFR,
|
||||
}
|
||||
|
||||
public enum ePTLoc : byte
|
||||
{
|
||||
[Description("Ready Position")]
|
||||
READY = 0,
|
||||
}
|
||||
|
||||
public enum eLMLoc : byte
|
||||
{
|
||||
[Description("Ready Position")]
|
||||
READY = 0,
|
||||
[Description("7\" High Attach Position")]
|
||||
PRINTH07,
|
||||
[Description("7\" Low Attach Position")]
|
||||
PRINTL07,
|
||||
[Description("7\" Middle Attach Position")]
|
||||
PRINTM07,
|
||||
[Description("13\" High Attach Position")]
|
||||
PRINTH13,
|
||||
[Description("13\" Low Attach Position")]
|
||||
PRINTL13,
|
||||
[Description("13\" Middle Attach Position")]
|
||||
PRINTM13,
|
||||
}
|
||||
public enum eLZLoc : byte
|
||||
{
|
||||
[Description("Ready Position")]
|
||||
READY = 0,
|
||||
[Description("Reel PickOn Position")]
|
||||
PICKON,
|
||||
[Description("Reel PickOff Position")]
|
||||
PICKOFF,
|
||||
}
|
||||
public enum eRMLoc : byte
|
||||
{
|
||||
[Description("Ready Position")]
|
||||
READY = 0,
|
||||
[Description("7\" High Attach Position")]
|
||||
PRINTH07,
|
||||
[Description("7\" Low Attach Position")]
|
||||
PRINTL07,
|
||||
[Description("7\" Middle Attach Position")]
|
||||
PRINTM07,
|
||||
[Description("13\" High Attach Position")]
|
||||
PRINTH13,
|
||||
[Description("13\" Low Attach Position")]
|
||||
PRINTL13,
|
||||
[Description("13\" Middle Attach Position")]
|
||||
PRINTM13,
|
||||
}
|
||||
public enum eRZLoc : byte
|
||||
{
|
||||
[Description("Ready Position")]
|
||||
READY = 0,
|
||||
[Description("Reel PickOn Position")]
|
||||
PICKON,
|
||||
[Description("Reel PickOff Position")]
|
||||
PICKOFF,
|
||||
}
|
||||
}
|
||||
31
Handler/Project/Class/FTP/EventArgs.cs
Normal file
31
Handler/Project/Class/FTP/EventArgs.cs
Normal file
@@ -0,0 +1,31 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AR.FTPClient
|
||||
{
|
||||
public class MessageEventArgs : EventArgs
|
||||
{
|
||||
protected Boolean _isError = false;
|
||||
public Boolean IsError { get { return _isError; } }
|
||||
protected string _message = string.Empty;
|
||||
public string Message { get { return _message; } }
|
||||
public MessageEventArgs(Boolean isError, string Message)
|
||||
{
|
||||
_isError = isError;
|
||||
_message = Message;
|
||||
}
|
||||
}
|
||||
public class ListProgressEventArgs : EventArgs
|
||||
{
|
||||
//public long Max { get; set; }
|
||||
//public long Value { get; set; }
|
||||
public long TotalRecv { get; set; }
|
||||
public ListProgressEventArgs(long TotalRecv_)
|
||||
{
|
||||
this.TotalRecv = TotalRecv_;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
574
Handler/Project/Class/FTP/FTPClient.cs
Normal file
574
Handler/Project/Class/FTP/FTPClient.cs
Normal file
@@ -0,0 +1,574 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
|
||||
|
||||
namespace AR.FTPClient
|
||||
{
|
||||
public partial class FTPClient : IFTPClient
|
||||
{
|
||||
public string errorMessage { get; set; }
|
||||
|
||||
private int bufferSize = 2048;
|
||||
private int timeout = 20000;
|
||||
|
||||
#region "Contstruct"
|
||||
|
||||
public FTPClient() : this("127.0.0.1", "Anonymous", "") { }
|
||||
|
||||
public FTPClient(string Host, string UserID, string UserPass) :
|
||||
this(Host, UserID, UserPass, 21)
|
||||
{ }
|
||||
|
||||
public FTPClient(string Host, string UserID, string UserPass, bool passive) :
|
||||
this(Host, UserID, UserPass, 21, passive)
|
||||
{ }
|
||||
|
||||
public FTPClient(string Host, string UserID, string UserPass, int port) :
|
||||
this(Host, UserID, UserPass, port, false)
|
||||
{ }
|
||||
|
||||
public FTPClient(string host, string userid, string userpass, int port, bool passive)
|
||||
{
|
||||
Host = host;
|
||||
UserID = userid;
|
||||
UserPassword = userpass;
|
||||
Port = port;
|
||||
PassiveMode = passive;
|
||||
this.TextEncoding = System.Text.Encoding.UTF8;
|
||||
}
|
||||
#endregion
|
||||
|
||||
public event EventHandler<MessageEventArgs> Message;
|
||||
public event EventHandler<ListProgressEventArgs> ListPrgress;
|
||||
|
||||
#region "Properties"
|
||||
|
||||
/// <summary>
|
||||
/// 접속하려는 FTP서버의 IP혹은 도메인 주소를 입력하세요
|
||||
/// 기본값 : 127.0.0.1
|
||||
/// </summary>
|
||||
public string Host { get; set; }
|
||||
/// <summary>
|
||||
/// FTP의 사용자 ID
|
||||
/// 기본값 : Anonymous
|
||||
/// </summary>
|
||||
public string UserID { get; set; }
|
||||
/// <summary>
|
||||
/// FTP 사용자 ID의 암호
|
||||
/// 기본값 : 없음
|
||||
/// </summary>
|
||||
public string UserPassword { get; set; }
|
||||
/// <summary>
|
||||
/// FTP 접속 포트
|
||||
/// 기본값 : 21
|
||||
/// </summary>
|
||||
public int Port { get; set; }
|
||||
/// <summary>
|
||||
/// FTP 접속 방식 (능동형/수동형)
|
||||
/// </summary>
|
||||
public bool PassiveMode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 문자수신시 사용할 인코딩 방식
|
||||
/// </summary>
|
||||
public System.Text.Encoding TextEncoding { get; set; }
|
||||
|
||||
#endregion
|
||||
public void Dispose()
|
||||
{
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// 파일을 다운로드 합니다.
|
||||
/// </summary>
|
||||
/// <param name="remoteFile">원격위치의 전체 경로</param>
|
||||
/// <param name="localFile">로컬위치의 전체 경로</param>
|
||||
public Boolean Download(string remoteFile, string localFile, bool overwrite = false)
|
||||
{
|
||||
FtpWebRequest ftpRequest = null;
|
||||
FtpWebResponse ftpResponse = null;
|
||||
Stream ftpStream = null;
|
||||
|
||||
//overwrite funcion - 190622 - chi
|
||||
errorMessage = string.Empty;
|
||||
if (overwrite == false && System.IO.File.Exists(localFile))
|
||||
{
|
||||
errorMessage = "Target file alreay exists";
|
||||
return false;
|
||||
}
|
||||
else if (overwrite == true && System.IO.File.Exists(localFile))
|
||||
{
|
||||
try
|
||||
{
|
||||
System.IO.File.Delete(localFile);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
errorMessage = ex.Message;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool retval = true;
|
||||
try
|
||||
{
|
||||
long Receive = 0;
|
||||
var url = CombineUrl(remoteFile);
|
||||
|
||||
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(url);
|
||||
ftpRequest.Credentials = new NetworkCredential(this.UserID, this.UserPassword);
|
||||
ftpRequest.UseBinary = true;
|
||||
ftpRequest.UsePassive = this.PassiveMode;
|
||||
ftpRequest.KeepAlive = true;
|
||||
ftpRequest.ReadWriteTimeout = this.timeout;
|
||||
ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
|
||||
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
|
||||
ftpStream = ftpResponse.GetResponseStream();
|
||||
FileStream localFileStream = new FileStream(localFile, FileMode.Create);
|
||||
byte[] byteBuffer = new byte[bufferSize];
|
||||
int bytesRead = ftpStream.Read(byteBuffer, 0, bufferSize);
|
||||
Receive += bytesRead;
|
||||
if (ListPrgress != null)
|
||||
ListPrgress(this, new ListProgressEventArgs(Receive));
|
||||
try
|
||||
{
|
||||
while (bytesRead > 0)
|
||||
{
|
||||
localFileStream.Write(byteBuffer, 0, bytesRead);
|
||||
bytesRead = ftpStream.Read(byteBuffer, 0, bufferSize);
|
||||
Receive += bytesRead;
|
||||
if (ListPrgress != null)
|
||||
ListPrgress(this, new ListProgressEventArgs(Receive));
|
||||
}
|
||||
}
|
||||
catch (Exception ex) { retval = false; Console.WriteLine(ex.ToString()); }
|
||||
localFileStream.Close();
|
||||
ftpStream.Close();
|
||||
ftpResponse.Close();
|
||||
ftpRequest = null;
|
||||
}
|
||||
catch (Exception ex) { retval = false; this.errorMessage = ex.Message; Console.WriteLine(ex.ToString()); }
|
||||
return retval;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 파일을 업로드 합니다.
|
||||
/// </summary>
|
||||
/// <param name="remoteFile">원격위치의 전체 경로</param>
|
||||
/// <param name="localFile">로컬위치의 전체 경로</param>
|
||||
/// <returns></returns>
|
||||
public Boolean Upload(string remoteFile, string localFile)
|
||||
{
|
||||
FtpWebRequest ftpRequest = null;
|
||||
FtpWebResponse ftpResponse = null;
|
||||
Stream ftpStream = null;
|
||||
try
|
||||
{
|
||||
var url = CombineUrl(remoteFile);
|
||||
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(url);
|
||||
ftpRequest.Credentials = new NetworkCredential(UserID, UserPassword);
|
||||
ftpRequest.UseBinary = true;
|
||||
ftpRequest.UsePassive = PassiveMode;
|
||||
ftpRequest.KeepAlive = true;
|
||||
ftpRequest.ReadWriteTimeout = this.timeout;
|
||||
ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
|
||||
ftpStream = ftpRequest.GetRequestStream();
|
||||
FileStream localFileStream = new FileStream(localFile, FileMode.Open);
|
||||
byte[] byteBuffer = new byte[bufferSize];
|
||||
int bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize);
|
||||
Boolean bError = false;
|
||||
try
|
||||
{
|
||||
System.Diagnostics.Stopwatch wat = new System.Diagnostics.Stopwatch();
|
||||
wat.Restart();
|
||||
while (bytesSent != 0)
|
||||
{
|
||||
ftpStream.Write(byteBuffer, 0, bytesSent);
|
||||
bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize);
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
bError = true;
|
||||
}
|
||||
localFileStream.Close();
|
||||
ftpStream.Close();
|
||||
ftpRequest = null;
|
||||
if (bError) return false;
|
||||
else return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
this.errorMessage = ex.Message;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 원격파일을 삭제 합니다.
|
||||
/// </summary>
|
||||
/// <param name="remotefile"></param>
|
||||
public Boolean Delete(string remotefile)
|
||||
{
|
||||
FtpWebRequest ftpRequest = null;
|
||||
FtpWebResponse ftpResponse = null;
|
||||
Stream ftpStream = null;
|
||||
try
|
||||
{
|
||||
var url = CombineUrl(remotefile);
|
||||
ftpRequest = (FtpWebRequest)WebRequest.Create(url);
|
||||
ftpRequest.Credentials = new NetworkCredential(UserID, UserPassword);
|
||||
ftpRequest.UseBinary = true;
|
||||
ftpRequest.UsePassive = this.PassiveMode;
|
||||
ftpRequest.KeepAlive = true;
|
||||
ftpRequest.ReadWriteTimeout = this.timeout;
|
||||
ftpRequest.Method = WebRequestMethods.Ftp.DeleteFile;
|
||||
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
|
||||
ftpResponse.Close();
|
||||
ftpRequest = null;
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex) { this.errorMessage = ex.Message; return false; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 원격파일의 이름을 변경 합니다.
|
||||
/// </summary>
|
||||
/// <param name="currentFileNameAndPath"></param>
|
||||
/// <param name="newFileName"></param>
|
||||
public Boolean rename(string currentFileNameAndPath, string newFileName)
|
||||
{
|
||||
FtpWebRequest ftpRequest = null;
|
||||
FtpWebResponse ftpResponse = null;
|
||||
Stream ftpStream = null;
|
||||
try
|
||||
{
|
||||
var url = CombineUrl(currentFileNameAndPath);
|
||||
ftpRequest = (FtpWebRequest)WebRequest.Create(url);
|
||||
ftpRequest.Credentials = new NetworkCredential(UserID, UserPassword);
|
||||
ftpRequest.UsePassive = this.PassiveMode;
|
||||
ftpRequest.ReadWriteTimeout = this.timeout;
|
||||
ftpRequest.UseBinary = true;
|
||||
ftpRequest.KeepAlive = true;
|
||||
ftpRequest.Method = WebRequestMethods.Ftp.Rename;
|
||||
ftpRequest.RenameTo = newFileName;
|
||||
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
|
||||
ftpResponse.Close();
|
||||
ftpRequest = null;
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex) { this.errorMessage = ex.Message; return false; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 원격위치에 폴더를 생성 합니다.
|
||||
/// 트리구조로 폴더를 생성하지 않습니다. 여러개의 폴더를 생성하려면 각각 호출 해야 합니다.
|
||||
/// </summary>
|
||||
/// <param name="newDirectory"></param>
|
||||
/// <returns></returns>
|
||||
public bool createDirectory(string newDirectory)
|
||||
{
|
||||
FtpWebRequest ftpRequest = null;
|
||||
FtpWebResponse ftpResponse = null;
|
||||
Stream ftpStream = null;
|
||||
try
|
||||
{
|
||||
var url = CombineUrl(newDirectory, false);
|
||||
ftpRequest = (FtpWebRequest)WebRequest.Create(url);
|
||||
ftpRequest.Credentials = new NetworkCredential(UserID, UserPassword);
|
||||
ftpRequest.UsePassive = this.PassiveMode;
|
||||
ftpRequest.UseBinary = true;
|
||||
ftpRequest.KeepAlive = true;
|
||||
ftpRequest.ReadWriteTimeout = this.timeout;
|
||||
ftpRequest.Method = WebRequestMethods.Ftp.MakeDirectory;
|
||||
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
|
||||
ftpResponse.Close();
|
||||
ftpRequest = null;
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex) { this.errorMessage = ex.Message; return false; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 원격위치의 폴더를 삭제합니다. 폴더 삭제 전 대상 폴더는 비어있어야 합니다.
|
||||
/// </summary>
|
||||
/// <param name="Directory"></param>
|
||||
/// <returns></returns>
|
||||
public bool RemoveDirectory(string Directory)
|
||||
{
|
||||
FtpWebRequest ftpRequest = null;
|
||||
FtpWebResponse ftpResponse = null;
|
||||
Stream ftpStream = null;
|
||||
try
|
||||
{
|
||||
var url = CombineUrl(Directory, false);
|
||||
ftpRequest = (FtpWebRequest)WebRequest.Create(url);
|
||||
ftpRequest.Credentials = new NetworkCredential(UserID, UserPassword);
|
||||
ftpRequest.UsePassive = this.PassiveMode;
|
||||
ftpRequest.UseBinary = true;
|
||||
ftpRequest.KeepAlive = true;
|
||||
ftpRequest.ReadWriteTimeout = this.timeout;
|
||||
ftpRequest.Method = WebRequestMethods.Ftp.RemoveDirectory;
|
||||
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
|
||||
ftpResponse.Close();
|
||||
ftpRequest = null;
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex) { this.errorMessage = ex.Message; return false; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 파일의 생성일자 반환
|
||||
/// </summary>
|
||||
/// <param name="fileName"></param>
|
||||
/// <returns></returns>
|
||||
public string getFileCreatedDateTime(string fileName)
|
||||
{
|
||||
FtpWebRequest ftpRequest = null;
|
||||
FtpWebResponse ftpResponse = null;
|
||||
Stream ftpStream = null;
|
||||
try
|
||||
{
|
||||
var url = CombineUrl(fileName);
|
||||
ftpRequest = (FtpWebRequest)WebRequest.Create(url);
|
||||
ftpRequest.Credentials = new NetworkCredential(UserID, UserPassword);
|
||||
ftpRequest.UsePassive = this.PassiveMode;
|
||||
ftpRequest.UseBinary = true;
|
||||
ftpRequest.KeepAlive = true;
|
||||
ftpRequest.ReadWriteTimeout = this.timeout;
|
||||
ftpRequest.Method = WebRequestMethods.Ftp.GetDateTimestamp;
|
||||
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
|
||||
ftpStream = ftpResponse.GetResponseStream();
|
||||
StreamReader ftpReader = new StreamReader(ftpStream, this.TextEncoding);
|
||||
string fileInfo = null;
|
||||
try { fileInfo = ftpReader.ReadToEnd(); }
|
||||
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
|
||||
ftpReader.Close();
|
||||
ftpStream.Close();
|
||||
ftpResponse.Close();
|
||||
ftpRequest = null;
|
||||
return fileInfo;
|
||||
}
|
||||
catch (Exception ex) { this.errorMessage = ex.Message; Console.WriteLine(ex.ToString()); }
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 파일의 크기를 반환
|
||||
/// </summary>
|
||||
/// <param name="fileName"></param>
|
||||
/// <returns></returns>
|
||||
public string getFileSize(string fileName)
|
||||
{
|
||||
FtpWebRequest ftpRequest = null;
|
||||
FtpWebResponse ftpResponse = null;
|
||||
Stream ftpStream = null;
|
||||
try
|
||||
{
|
||||
var url = CombineUrl(fileName);
|
||||
ftpRequest = (FtpWebRequest)WebRequest.Create(url);
|
||||
ftpRequest.Credentials = new NetworkCredential(UserID, UserPassword);
|
||||
ftpRequest.UseBinary = true;
|
||||
ftpRequest.UsePassive = this.PassiveMode;
|
||||
ftpRequest.KeepAlive = true;
|
||||
ftpRequest.ReadWriteTimeout = this.timeout;
|
||||
ftpRequest.Method = WebRequestMethods.Ftp.GetFileSize;
|
||||
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
|
||||
ftpStream = ftpResponse.GetResponseStream();
|
||||
StreamReader ftpReader = new StreamReader(ftpStream, this.TextEncoding);
|
||||
string fileInfo = null;
|
||||
try { while (ftpReader.Peek() != -1) { fileInfo = ftpReader.ReadToEnd(); } }
|
||||
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
|
||||
ftpReader.Close();
|
||||
ftpStream.Close();
|
||||
ftpResponse.Close();
|
||||
ftpRequest = null;
|
||||
return fileInfo;
|
||||
}
|
||||
catch (Exception ex) { errorMessage = ex.Message; Console.WriteLine(ex.ToString()); }
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 폴더와 파일의 이름만 반환 합니다.
|
||||
/// </summary>
|
||||
/// <param name="directory"></param>
|
||||
/// <returns></returns>
|
||||
public string[] directoryListSimple(string directory)
|
||||
{
|
||||
FtpWebRequest ftpRequest = null;
|
||||
FtpWebResponse ftpResponse = null;
|
||||
Stream ftpStream = null;
|
||||
errorMessage = string.Empty;
|
||||
try
|
||||
{
|
||||
var url = CombineUrl(directory, false);
|
||||
if (url.EndsWith("/") == false) url += "/";
|
||||
ftpRequest = (FtpWebRequest)WebRequest.Create(url);
|
||||
ftpRequest.Credentials = new NetworkCredential(UserID, UserPassword);
|
||||
ftpRequest.UseBinary = true;
|
||||
ftpRequest.UsePassive = PassiveMode;
|
||||
ftpRequest.KeepAlive = true;
|
||||
ftpRequest.ReadWriteTimeout = this.timeout;
|
||||
ftpRequest.ReadWriteTimeout = 30000;
|
||||
ftpRequest.Timeout = 30000;
|
||||
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
|
||||
|
||||
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
|
||||
ftpStream = ftpResponse.GetResponseStream();
|
||||
StreamReader ftpReader = new StreamReader(ftpStream, this.TextEncoding);
|
||||
string directoryRaw = null;
|
||||
try
|
||||
{
|
||||
while (ftpReader.Peek() != -1)
|
||||
{
|
||||
var dataLIne = ftpReader.ReadLine();
|
||||
if (dataLIne.Trim() != "")
|
||||
{
|
||||
if (directoryRaw != null && directoryRaw != "") directoryRaw += "|";
|
||||
directoryRaw += dataLIne;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex) { errorMessage += "\n" + ex.Message; }
|
||||
ftpReader.Close();
|
||||
ftpStream.Close();
|
||||
ftpResponse.Close();
|
||||
ftpRequest = null;
|
||||
try { string[] directoryList = directoryRaw.Split("|".ToCharArray()); return directoryList; }
|
||||
catch (Exception ex) { errorMessage += "\n" + ex.Message; }
|
||||
}
|
||||
catch (Exception ex) { errorMessage = ex.Message; Console.WriteLine(ex.ToString()); }
|
||||
return new string[] { "" };
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 폴더 및 파일의 정보를 상세하게 표시합니다.
|
||||
/// </summary>
|
||||
/// <param name="directory"></param>
|
||||
/// <returns></returns>
|
||||
public FTPdirectory ListDirectoryDetail(string directory)
|
||||
{
|
||||
FtpWebRequest ftpRequest = null;
|
||||
FtpWebResponse ftpResponse = null;
|
||||
Stream ftpStream = null;
|
||||
errorMessage = string.Empty;
|
||||
try
|
||||
{
|
||||
var url = CombineUrl(directory, false);
|
||||
|
||||
if (url.EndsWith("/") == false) url += "/";
|
||||
ftpRequest = (FtpWebRequest)WebRequest.Create(url);
|
||||
ftpRequest.Credentials = new NetworkCredential(UserID, UserPassword);
|
||||
ftpRequest.UsePassive = true;
|
||||
ftpRequest.UseBinary = true;
|
||||
ftpRequest.KeepAlive = false;
|
||||
ftpRequest.ReadWriteTimeout = this.timeout;
|
||||
ftpRequest.ReadWriteTimeout = 30000;
|
||||
ftpRequest.Timeout = 30000;
|
||||
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
|
||||
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
|
||||
ftpStream = ftpResponse.GetResponseStream();
|
||||
|
||||
StreamReader ftpReader = new StreamReader(ftpStream, this.TextEncoding);
|
||||
string directoryRaw = null;
|
||||
|
||||
try { while (ftpReader.Peek() != -1) { directoryRaw += ftpReader.ReadLine() + "\r"; } }
|
||||
catch (Exception ex) { errorMessage += "\n" + ex.Message; }
|
||||
ftpReader.Close();
|
||||
ftpStream.Close();
|
||||
ftpResponse.Close();
|
||||
ftpRequest = null;
|
||||
directoryRaw = directoryRaw.Replace("\r\n", "\r").TrimEnd((char)0x0D);
|
||||
return new FTPdirectory(directoryRaw, directory);
|
||||
}
|
||||
catch (Exception ex) { errorMessage += "\n" + ex.Message; }
|
||||
return null;
|
||||
}
|
||||
|
||||
#region "utillity"
|
||||
|
||||
/// <summary>
|
||||
/// Url을 Host와 결합하여 생성
|
||||
/// </summary>
|
||||
/// <param name="file">경로명</param>
|
||||
/// <param name="isfile">파일인지 여부</param>
|
||||
/// <returns></returns>
|
||||
string CombineUrl(string file, bool isfile = true)
|
||||
{
|
||||
file = file.Replace("\\", "/");
|
||||
string url = this.Host;
|
||||
if (this.Host.ToLower().StartsWith("ftp://") == false) url = "ftp://" + url;
|
||||
if (url.Substring(5).LastIndexOf(':') == -1)
|
||||
url += ":" + this.Port.ToString();
|
||||
|
||||
if (this.Host.EndsWith("/")) url = this.Host.Substring(0, Host.Length - 1);
|
||||
|
||||
if (file.StartsWith("/"))
|
||||
url = url + System.Web.HttpUtility.UrlPathEncode(file);
|
||||
else
|
||||
url = url + "/" + System.Web.HttpUtility.UrlPathEncode(file);
|
||||
|
||||
url = url.Replace("#", "%23");
|
||||
|
||||
if (isfile)
|
||||
return url;
|
||||
else
|
||||
return url + "/";
|
||||
}
|
||||
public string PathCombine(string path, string add)
|
||||
{
|
||||
var newpath = string.Empty;
|
||||
if (path.EndsWith("/")) newpath = path + add;
|
||||
else newpath = path + "/" + add;
|
||||
if (!newpath.EndsWith("/")) newpath += '/';
|
||||
return newpath;
|
||||
|
||||
}
|
||||
public string PathFileCombine(string path, string add)
|
||||
{
|
||||
var newpath = string.Empty;
|
||||
if (path.EndsWith("/")) newpath = path + add;
|
||||
else newpath = path + "/" + add;
|
||||
if (newpath.EndsWith("/")) newpath = newpath.Substring(0, newpath.Length - 1);
|
||||
return newpath;
|
||||
|
||||
}
|
||||
public string getParent(string path)
|
||||
{
|
||||
if (path == "/") return path;
|
||||
else if (path == "") return "/";
|
||||
else
|
||||
{
|
||||
//서브폴더를 찾아서 처리해준다.
|
||||
if (path.IndexOf('/') == -1) return "/";
|
||||
else
|
||||
{
|
||||
if (path.EndsWith("/")) path = path.Substring(0, path.Length - 1);
|
||||
var slashindex = path.LastIndexOf('/');
|
||||
var parent = path.Substring(0, slashindex);
|
||||
if (!parent.EndsWith("/")) parent += '/';
|
||||
return parent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void RaiseMessage(Boolean isError, string message)
|
||||
{
|
||||
if (isError) errorMessage = message; //170920
|
||||
if (Message != null) Message(this, new MessageEventArgs(isError, message));
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
95
Handler/Project/Class/FTP/FTPdirectory.cs
Normal file
95
Handler/Project/Class/FTP/FTPdirectory.cs
Normal file
@@ -0,0 +1,95 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AR.FTPClient
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// ''' Stores a list of files and directories from an FTP result
|
||||
/// ''' </summary>
|
||||
/// ''' <remarks></remarks>
|
||||
public class FTPdirectory : List<FTPfileInfo>
|
||||
{
|
||||
public FTPdirectory()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ''' Constructor: create list from a (detailed) directory string
|
||||
/// ''' </summary>
|
||||
/// ''' <param name="dir">directory listing string</param>
|
||||
/// ''' <param name="path"></param>
|
||||
/// ''' <remarks></remarks>
|
||||
public FTPdirectory(string dir, string path)
|
||||
{
|
||||
var lines = dir.Replace("\n","").Split('\r');
|
||||
foreach (var line in lines)
|
||||
{
|
||||
if (line != "")
|
||||
this.Add(new FTPfileInfo(line, path));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// ''' Filter out only files from directory listing
|
||||
/// ''' </summary>
|
||||
/// ''' <param name="ext">optional file extension filter</param>
|
||||
/// ''' <returns>FTPdirectory listing</returns>
|
||||
public FTPdirectory GetFiles(string ext = "")
|
||||
{
|
||||
return this.GetFileOrDir(FTPfileInfo.DirectoryEntryTypes.File, ext);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ''' Returns a list of only subdirectories
|
||||
/// ''' </summary>
|
||||
/// ''' <returns>FTPDirectory list</returns>
|
||||
/// ''' <remarks></remarks>
|
||||
public FTPdirectory GetDirectories()
|
||||
{
|
||||
return this.GetFileOrDir(FTPfileInfo.DirectoryEntryTypes.Directory);
|
||||
}
|
||||
|
||||
// internal: share use function for GetDirectories/Files
|
||||
private FTPdirectory GetFileOrDir(FTPfileInfo.DirectoryEntryTypes type, string ext = "")
|
||||
{
|
||||
FTPdirectory result = new FTPdirectory();
|
||||
foreach (FTPfileInfo fi in this)
|
||||
{
|
||||
if (fi.FileType == type)
|
||||
{
|
||||
if (ext == "")
|
||||
result.Add(fi);
|
||||
else if (ext == fi.Extension)
|
||||
result.Add(fi);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public bool FileExists(string filename)
|
||||
{
|
||||
foreach (FTPfileInfo ftpfile in this)
|
||||
{
|
||||
if (ftpfile.Filename == filename)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private const char slash = '/';
|
||||
|
||||
public static string GetParentDirectory(string dir)
|
||||
{
|
||||
string tmp = dir.TrimEnd(slash);
|
||||
int i = tmp.LastIndexOf(slash);
|
||||
if (i > 0)
|
||||
return tmp.Substring(0, i - 1);
|
||||
else
|
||||
throw new ApplicationException("No parent for root");
|
||||
}
|
||||
}
|
||||
}
|
||||
216
Handler/Project/Class/FTP/FTPfileInfo.cs
Normal file
216
Handler/Project/Class/FTP/FTPfileInfo.cs
Normal file
@@ -0,0 +1,216 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace AR.FTPClient
|
||||
{
|
||||
/// <summary>
|
||||
/// ''' Represents a file or directory entry from an FTP listing
|
||||
/// ''' </summary>
|
||||
/// ''' <remarks>
|
||||
/// ''' This class is used to parse the results from a detailed
|
||||
/// ''' directory list from FTP. It supports most formats of
|
||||
/// ''' </remarks>
|
||||
public class FTPfileInfo
|
||||
{
|
||||
// Stores extended info about FTP file
|
||||
|
||||
public string FullName
|
||||
{
|
||||
get
|
||||
{
|
||||
var retval = Path + "/" + Filename;
|
||||
return retval.Replace("//", "/");
|
||||
}
|
||||
}
|
||||
public string Filename
|
||||
{
|
||||
get
|
||||
{
|
||||
return _filename;
|
||||
}
|
||||
}
|
||||
public string Path
|
||||
{
|
||||
get
|
||||
{
|
||||
return _path;
|
||||
}
|
||||
}
|
||||
public DirectoryEntryTypes FileType
|
||||
{
|
||||
get
|
||||
{
|
||||
return _fileType;
|
||||
}
|
||||
}
|
||||
public long Size
|
||||
{
|
||||
get
|
||||
{
|
||||
return _size;
|
||||
}
|
||||
}
|
||||
public DateTime FileDateTime
|
||||
{
|
||||
get
|
||||
{
|
||||
return _fileDateTime;
|
||||
}
|
||||
}
|
||||
public string Permission
|
||||
{
|
||||
get
|
||||
{
|
||||
return _permission;
|
||||
}
|
||||
}
|
||||
public string Extension
|
||||
{
|
||||
get
|
||||
{
|
||||
int i = this.Filename.LastIndexOf(".");
|
||||
if (i >= 0 & i < (this.Filename.Length - 1))
|
||||
return this.Filename.Substring(i + 1);
|
||||
else
|
||||
return "";
|
||||
}
|
||||
}
|
||||
public string NameOnly
|
||||
{
|
||||
get
|
||||
{
|
||||
int i = this.Filename.LastIndexOf(".");
|
||||
if (i > 0)
|
||||
return this.Filename.Substring(0, i);
|
||||
else
|
||||
return this.Filename;
|
||||
}
|
||||
}
|
||||
private string _filename;
|
||||
private string _path;
|
||||
private DirectoryEntryTypes _fileType;
|
||||
private long _size;
|
||||
private DateTime _fileDateTime;
|
||||
private string _permission;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// ''' Identifies entry as either File or Directory
|
||||
/// ''' </summary>
|
||||
public enum DirectoryEntryTypes
|
||||
{
|
||||
File,
|
||||
Directory,
|
||||
Link
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ''' Constructor taking a directory listing line and path
|
||||
/// ''' </summary>
|
||||
/// ''' <param name="line">The line returned from the detailed directory list</param>
|
||||
/// ''' <param name="path">Path of the directory</param>
|
||||
/// ''' <remarks></remarks>
|
||||
public FTPfileInfo(string line, string path)
|
||||
{
|
||||
// parse line
|
||||
|
||||
|
||||
|
||||
Match m = GetMatchingRegex(line);
|
||||
if (m == null)
|
||||
// failed
|
||||
throw new ApplicationException("Unable to parse line: " + line);
|
||||
else
|
||||
{
|
||||
_filename = m.Groups["name"].Value;
|
||||
_path = path;
|
||||
|
||||
|
||||
_permission = m.Groups["permission"].Value;
|
||||
string _dir = m.Groups["dir"].Value;
|
||||
if ((_dir != "" & (_dir == "d" || _dir == "D")))
|
||||
{
|
||||
_fileType = DirectoryEntryTypes.Directory;
|
||||
_size = 0; // CLng(m.Groups("size").Value)
|
||||
}
|
||||
else if ((_dir != "" & (_dir == "l" || _dir == "L")))
|
||||
{
|
||||
_fileType = DirectoryEntryTypes.Link;
|
||||
_size = 0; // CLng(m.Groups("size").Value)
|
||||
}
|
||||
else
|
||||
{
|
||||
_fileType = DirectoryEntryTypes.File;
|
||||
_size = System.Convert.ToInt64(m.Groups["size"].Value);
|
||||
}
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
var timestamp = m.Groups["timestamp"].Value;
|
||||
if (timestamp.IndexOf(':') == -1)
|
||||
{
|
||||
_fileDateTime = DateTime.Parse(timestamp);
|
||||
}
|
||||
else
|
||||
{
|
||||
_fileDateTime = DateTime.Parse(DateTime.Now.Year + " " + timestamp);
|
||||
}
|
||||
|
||||
}
|
||||
catch
|
||||
{
|
||||
// MsgBox("datetime err=" & Now.Year & Space(1) & "value=" & m.Groups("timestamp").Value & vbCrLf & ex.Message.ToString)
|
||||
_fileDateTime = DateTime.Parse("1982-11-23");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public FTPfileInfo(string filename, string permission, string dir, int size, DateTime filetime, Boolean isdir, string path)
|
||||
{
|
||||
_filename = filename;// m.Groups["name"].Value;
|
||||
_path = path;
|
||||
_permission = permission; // m.Groups["permission"].Value;
|
||||
string _dir = dir;// m.Groups["dir"].Value;
|
||||
if (isdir == true)
|
||||
{
|
||||
_fileType = DirectoryEntryTypes.Directory;
|
||||
_size = 0; // CLng(m.Groups("size").Value)
|
||||
}
|
||||
else
|
||||
{
|
||||
_fileType = DirectoryEntryTypes.File;
|
||||
_size = size;//
|
||||
}
|
||||
|
||||
_fileDateTime = filetime;
|
||||
}
|
||||
|
||||
private Match GetMatchingRegex(string line)
|
||||
{
|
||||
Regex rx;
|
||||
Match m;
|
||||
for (int i = 0; i <= _ParseFormats.Length - 1; i++)
|
||||
{
|
||||
rx = new Regex(_ParseFormats[i]);
|
||||
m = rx.Match(line);
|
||||
if (m.Success)
|
||||
return m;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ''' List of REGEX formats for different FTP server listing formats
|
||||
/// ''' </summary>
|
||||
/// ''' <remarks>
|
||||
/// ''' The first three are various UNIX/LINUX formats, fourth is for MS FTP
|
||||
/// ''' in detailed mode and the last for MS FTP in 'DOS' mode.
|
||||
/// ''' I wish VB.NET had support for Const arrays like C# but there you go
|
||||
/// ''' </remarks>
|
||||
private static string[] _ParseFormats = new[] { @"(?<dir>[\-dl])(?<permission>([\-r][\-w][\-xs]){3})\s+\d+\s+\w+\s+\w+\s+(?<size>\d+)\s+(?<timestamp>\w+\s+\d+\s+\d{4})\s+(?<name>.+)", @"(?<dir>[\-dl])(?<permission>([\-r][\-w][\-xs]){3})\s+\d+\s+\d+\s+(?<size>\d+)\s+(?<timestamp>\w+\s+\d+\s+\d{4})\s+(?<name>.+)", @"(?<dir>[\-dl])(?<permission>([\-r][\-w][\-xs]){3})\s+\d+\s+\d+\s+(?<size>\d+)\s+(?<timestamp>\w+\s+\d+\s+\d{1,2}:\d{2})\s+(?<name>.+)", @"(?<dir>[\-dl])(?<permission>([\-r][\-w][\-xs]){3})\s+\d+\s+\w+\s+\w+\s+(?<size>\d+)\s+(?<timestamp>\w+\s+\d+\s+\d{1,2}:\d{2})\s+(?<name>.+)", @"(?<dir>[\-dl])(?<permission>([\-r][\-w][\-xs]){3})(\s+)(?<size>(\d+))(\s+)(?<ctbit>(\w+\s\w+))(\s+)(?<size2>(\d+))\s+(?<timestamp>\w+\s+\d+\s+\d{2}:\d{2})\s+(?<name>.+)", @"(?<timestamp>\d{2}\-\d{2}\-\d{2}\s+\d{2}:\d{2}[Aa|Pp][mM])\s+(?<dir>\<\w+\>){0,1}(?<size>\d+){0,1}\s+(?<name>.+)" };
|
||||
}
|
||||
}
|
||||
34
Handler/Project/Class/FTP/IFTPClient.cs
Normal file
34
Handler/Project/Class/FTP/IFTPClient.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AR.FTPClient
|
||||
{
|
||||
public interface IFTPClient
|
||||
{
|
||||
void Dispose();
|
||||
string errorMessage { get; set; }
|
||||
//string Host { get; set; }
|
||||
//string UserID { get; set; }
|
||||
//string UserPassword { get; set; }
|
||||
//int Port { get; set; }
|
||||
System.Text.Encoding TextEncoding { get; set; }
|
||||
Boolean Download(string remoteFile, string localFile,bool overwrite=false);
|
||||
Boolean Upload(string remoteFile, string localFile);
|
||||
Boolean Delete(string remotefile);
|
||||
Boolean rename(string currentFileNameAndPath, string newFileName);
|
||||
bool createDirectory(string newDirectory);
|
||||
bool RemoveDirectory(string Directory);
|
||||
string getFileCreatedDateTime(string fileName);
|
||||
string getFileSize(string fileName);
|
||||
string[] directoryListSimple(string directory);
|
||||
FTPdirectory ListDirectoryDetail(string directory);
|
||||
event EventHandler<MessageEventArgs> Message;
|
||||
event EventHandler<ListProgressEventArgs> ListPrgress;
|
||||
void RaiseMessage(Boolean isError, string message);
|
||||
string PathCombine(string path, string add);
|
||||
string PathFileCombine(string path, string add);
|
||||
string getParent(string path);
|
||||
}
|
||||
}
|
||||
118
Handler/Project/Class/ItemData.cs
Normal file
118
Handler/Project/Class/ItemData.cs
Normal file
@@ -0,0 +1,118 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Project.Class
|
||||
{
|
||||
public class JobData
|
||||
{
|
||||
public enum ErrorCode
|
||||
{
|
||||
None = 0,
|
||||
BarcodeRead,
|
||||
Print,
|
||||
Camera,
|
||||
}
|
||||
public ErrorCode error = ErrorCode.None;
|
||||
public int No { get; set; }
|
||||
public VisionData VisionData;
|
||||
|
||||
public DateTime JobStart
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.VisionData == null) return new DateTime(1982, 11, 23);
|
||||
else return VisionData.STime;
|
||||
}
|
||||
}
|
||||
public DateTime JobEnd;
|
||||
public TimeSpan JobRun
|
||||
{
|
||||
get
|
||||
{
|
||||
if (JobEnd.Year == 1982) return new TimeSpan(0);
|
||||
else if (JobStart.Year == 1982) return new TimeSpan(0);
|
||||
else return JobEnd - JobStart;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 프린터에 명령을 전송한 시간
|
||||
/// </summary>
|
||||
public DateTime PrintTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 라벨을 추가한 시간
|
||||
/// </summary>
|
||||
public DateTime Attachtime { get; set; }
|
||||
|
||||
//작업데이터의 GUID(자료식별)
|
||||
public string guid { get; private set; }
|
||||
|
||||
//언로더포트위치(L/R)
|
||||
public string PortPos;
|
||||
|
||||
|
||||
//동작관련 메세지
|
||||
public string Message;
|
||||
|
||||
int idx;
|
||||
|
||||
|
||||
|
||||
public JobData(int idx_)
|
||||
{
|
||||
this.idx = idx_;
|
||||
Clear("INIT");
|
||||
}
|
||||
|
||||
public bool PrintAttach { get; set; }
|
||||
public bool PrintQRValid { get; set; }
|
||||
public string PrintQRValidResult { get; set; }
|
||||
public void Clear(string source)
|
||||
{
|
||||
|
||||
|
||||
No = 0;
|
||||
//JobStart = new DateTime(1982, 11, 23);
|
||||
JobEnd = new DateTime(1982, 11, 23);
|
||||
Attachtime = new DateTime(1982, 11, 23);
|
||||
PortPos = string.Empty;
|
||||
guid = Guid.NewGuid().ToString();
|
||||
Message = string.Empty;
|
||||
if (VisionData == null)
|
||||
VisionData = new VisionData(source);
|
||||
else
|
||||
VisionData.Clear(source, false);
|
||||
PrintAttach = false;
|
||||
PrintQRValid = false;
|
||||
PrintQRValidResult = string.Empty;
|
||||
PrintTime = new DateTime(1982, 11, 23);
|
||||
PUB.AddDebugLog($"item data {idx} clear by {source} guid={guid}");
|
||||
}
|
||||
|
||||
public void CopyTo(ref JobData obj)
|
||||
{
|
||||
if (obj == null) return;
|
||||
obj.No = this.No;
|
||||
obj.error = this.error;
|
||||
obj.JobEnd = this.JobEnd;
|
||||
obj.guid = this.guid;
|
||||
obj.PortPos = this.PortPos;
|
||||
obj.Message = this.Message;
|
||||
obj.PrintAttach = this.PrintAttach;
|
||||
obj.PrintQRValid = this.PrintQRValid;
|
||||
obj.PrintQRValidResult = this.PrintQRValidResult;
|
||||
obj.Attachtime = this.Attachtime;
|
||||
obj.PrintTime = this.PrintTime;
|
||||
PUB.AddDebugLog("Before item copy rid:" + this.VisionData.RID);
|
||||
this.VisionData.CopyTo(ref obj.VisionData);
|
||||
PUB.AddDebugLog($"After item copy target rid : {obj.VisionData.RID}, guid={obj.guid}");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
105
Handler/Project/Class/KeyenceBarcodeData.cs
Normal file
105
Handler/Project/Class/KeyenceBarcodeData.cs
Normal file
@@ -0,0 +1,105 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Drawing;
|
||||
|
||||
namespace Project.Class
|
||||
{
|
||||
public class KeyenceBarcodeData
|
||||
{
|
||||
public double Angle { get; set; }
|
||||
public StdLabelPrint.CAmkorSTDBarcode AmkorData { get; set; }
|
||||
public Point[] vertex { get; set; }
|
||||
public string Data { get; set; }
|
||||
public Point CenterPX { get; set; }
|
||||
public bool Ignore { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 1:QR, 11:Code 128(like 1D)
|
||||
/// </summary>
|
||||
public string barcodeSymbol { get; set; }
|
||||
public string barcodeSource { get; set; } //230503
|
||||
public Boolean UserActive { get; set; }
|
||||
public Boolean isSTDBarcode
|
||||
{
|
||||
get
|
||||
{
|
||||
if (AmkorData != null && barcodeSymbol == "1" && AmkorData.isValid) return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public Boolean isNewLen15
|
||||
{
|
||||
get
|
||||
{
|
||||
if (AmkorData != null && barcodeSymbol == "1" && AmkorData.isValid && AmkorData.NewLen15Barcode) return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 라벨의 위치를 표시한다. 8방향이며 키패드 유사하게 설정한다 789/4-6/123
|
||||
/// </summary>
|
||||
public byte LabelPosition { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 정규식 분석이 완료되었다면 True를 반환합니다
|
||||
/// </summary>
|
||||
public Boolean RegExConfirm { get; set; }
|
||||
public int RefExApply { get; set; }
|
||||
|
||||
public KeyenceBarcodeData()
|
||||
{
|
||||
LabelPosition = 0;
|
||||
Angle = 0.0;
|
||||
Data = string.Empty;
|
||||
CenterPX = Point.Empty;
|
||||
AmkorData = null;
|
||||
vertex = null;
|
||||
barcodeSymbol = string.Empty;
|
||||
UserActive = false;
|
||||
RegExConfirm = false;
|
||||
Ignore = false;
|
||||
barcodeSource = string.Empty;
|
||||
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("{0},Deg={1},Center={2}x{3}", Data, Angle, CenterPX.X, CenterPX.Y);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 해당 중심점이 겹치는지 확인합니다.
|
||||
/// </summary>
|
||||
/// <param name="Center"></param>
|
||||
/// <returns></returns>
|
||||
public Boolean CheckIntersect(Point Center, string data)
|
||||
{
|
||||
if (data == null) return false;
|
||||
if (data.Equals(this.Data) == false) return false; //자료가 다르면 다른 자료로 처리한다
|
||||
return getInside(Center, vertex);
|
||||
}
|
||||
|
||||
bool getInside(Point pt, Point[] ptArr)
|
||||
{
|
||||
int crosses = 0;
|
||||
for (int i = 0; i < ptArr.Length; i++)
|
||||
{
|
||||
int j = (i + 1) % ptArr.Length;
|
||||
if ((ptArr[i].Y > pt.Y) != (ptArr[j].Y > pt.Y))
|
||||
{
|
||||
//atX는 점 B를 지나는 수평선과 선분 (p[i], p[j])의 교점
|
||||
double atX = (ptArr[j].X - ptArr[i].X) * (pt.Y - ptArr[i].Y) / (ptArr[j].Y - ptArr[i].Y) + ptArr[i].X;
|
||||
//atX가 오른쪽 반직선과의 교점이 맞으면 교점의 개수를 증가시킨다.
|
||||
if (pt.X < atX)
|
||||
crosses++;
|
||||
}
|
||||
}
|
||||
return crosses % 2 > 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
131
Handler/Project/Class/ModelInfoM.cs
Normal file
131
Handler/Project/Class/ModelInfoM.cs
Normal file
@@ -0,0 +1,131 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Drawing;
|
||||
using System.ComponentModel;
|
||||
using AR;
|
||||
|
||||
namespace Project
|
||||
{
|
||||
|
||||
public class ModelInfoM
|
||||
{
|
||||
//스피드 값과, 위치값을 저장하면 된다.
|
||||
public int idx { get; set; }
|
||||
public string Title { get; set; }
|
||||
|
||||
public Dictionary<int, PositionData[]> Position { get; set; }
|
||||
|
||||
|
||||
public ModelInfoM()
|
||||
{
|
||||
idx = -1;
|
||||
Title = string.Empty;
|
||||
ClearDataPosition();
|
||||
}
|
||||
void ClearDataPosition()
|
||||
{
|
||||
Position = new Dictionary<int, PositionData[]>();
|
||||
var motCount = Enum.GetNames(typeof(eAxis)).Length;
|
||||
for (int i = 0; i < motCount; i++)
|
||||
{
|
||||
var datas = new PositionData[64];
|
||||
for (int j = 0; j < datas.Length; j++)
|
||||
datas[j] = new PositionData(-1, string.Empty, 0.0);
|
||||
|
||||
Position.Add(i, datas);
|
||||
}
|
||||
}
|
||||
|
||||
public Boolean isSet
|
||||
{
|
||||
get
|
||||
{
|
||||
if (idx == -1) return false;
|
||||
else return !Title.isEmpty();
|
||||
}
|
||||
}
|
||||
|
||||
public void ReadValue(DataSet1.MCModelRow dr)
|
||||
{
|
||||
idx = dr.idx;
|
||||
Title = dr.Title;
|
||||
ReadValuePosition(idx);
|
||||
}
|
||||
|
||||
public void ReadValue(int index)
|
||||
{
|
||||
var dr = PUB.mdm.dataSet.MCModel.Where(t => t.idx == index).FirstOrDefault();
|
||||
if (dr == null)
|
||||
{
|
||||
idx = -1;
|
||||
Title = string.Empty;
|
||||
ClearDataPosition();
|
||||
}
|
||||
else
|
||||
{
|
||||
idx = dr.idx;
|
||||
Title = dr.Title;
|
||||
ReadValuePosition(idx);
|
||||
}
|
||||
}
|
||||
public Boolean ReadValue(string title)
|
||||
{
|
||||
return ReadValue(title, PUB.mdm.dataSet.MCModel);
|
||||
}
|
||||
public Boolean ReadValue(string title, DataSet1.MCModelDataTable dt)
|
||||
{
|
||||
var dr = dt.Where(t => t.Title == title).FirstOrDefault();
|
||||
if (dr == null)
|
||||
{
|
||||
idx = -1;
|
||||
this.Title= string.Empty;
|
||||
ClearDataPosition();
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
idx = dr.idx;
|
||||
this.Title = dr.Title;
|
||||
ReadValuePosition(idx);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
public void ReadValuePosition(int modelidx)
|
||||
{
|
||||
ReadValuePosition(modelidx, PUB.mdm.dataSet.MCModel);
|
||||
}
|
||||
public void ReadValuePosition(int modelidx, DataSet1.MCModelDataTable dt)
|
||||
{
|
||||
ClearDataPosition();
|
||||
|
||||
//각 모터별로 데이터를 가져온다
|
||||
int cnt = 0;
|
||||
foreach (var data in Position)
|
||||
{
|
||||
//해당 모터의 속도값을 가져온다
|
||||
var drows = dt.Where(t => t.pidx == modelidx && t.PosIndex >= 0 && t.MotIndex == data.Key);
|
||||
foreach (DataSet1.MCModelRow dr in drows)
|
||||
{
|
||||
var item = data.Value[dr.PosIndex];
|
||||
item.index = dr.PosIndex;
|
||||
item.title = dr.PosTitle;
|
||||
item.value = dr.Position;
|
||||
item.speed = dr.Speed;
|
||||
item.acc = dr.SpeedAcc;
|
||||
item.dcc = dr.SpeedDcc;
|
||||
data.Value[dr.PosIndex] = item;
|
||||
cnt += 1;
|
||||
}
|
||||
}
|
||||
|
||||
PUB.log.Add(String.Format("Motion({0}) Data Load : {1}", modelidx, cnt));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
204
Handler/Project/Class/ModelInfoV.cs
Normal file
204
Handler/Project/Class/ModelInfoV.cs
Normal file
@@ -0,0 +1,204 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Drawing;
|
||||
using System.ComponentModel;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Project
|
||||
{
|
||||
|
||||
public class ModelInfoV
|
||||
{
|
||||
[Browsable(false)]
|
||||
public string SPN { get; set; }
|
||||
//[Browsable(false)]
|
||||
//public Boolean SplitSPN { get; set; }
|
||||
[Browsable(false)]
|
||||
public string Title { get; set; }
|
||||
[Browsable(false)]
|
||||
public string Code { get; set; }
|
||||
[Browsable(false)]
|
||||
public int idx { get; set; }
|
||||
|
||||
|
||||
public string Motion { get; set; }
|
||||
public Boolean BCD_1D { get; set; }
|
||||
public Boolean BCD_QR { get; set; }
|
||||
public Boolean BCD_DM { get; set; }
|
||||
|
||||
public UInt16 vOption { get; set; }
|
||||
public UInt16 vWMSInfo { get; set; }
|
||||
public UInt16 vSIDInfo { get; set; }
|
||||
public UInt16 vJobInfo { get; set; }
|
||||
public UInt16 vSIDConv1 { get; set; }
|
||||
|
||||
public string Def_Vname { get; set; }
|
||||
public string Def_MFG { get; set; }
|
||||
|
||||
public Boolean IgnoreOtherBarcode { get; set; }
|
||||
public bool DisableCamera { get; set; }
|
||||
public bool DisablePrinter { get; set; }
|
||||
public bool CheckSIDExsit { get; set; }
|
||||
public bool bOwnZPL { get; set; }
|
||||
public int BSave { get; set; }
|
||||
public bool IgnorePartNo { get; set; }
|
||||
public bool IgnoreBatch { get; set; }
|
||||
public int AutoOutConveyor { get; set; }
|
||||
|
||||
|
||||
public ModelInfoV()
|
||||
{
|
||||
vOption = vWMSInfo = vSIDInfo = vJobInfo = vSIDConv1 = 0;
|
||||
bOwnZPL = false;
|
||||
}
|
||||
|
||||
public void ReadValue(DataSet1.OPModelRow dr)
|
||||
{
|
||||
this.AutoOutConveyor= dr.AutoOutConveyor;
|
||||
this.bOwnZPL = dr.bOwnZPL;
|
||||
this.Title = dr.Title;
|
||||
this.Code = dr.Code;
|
||||
this.idx = dr.idx;
|
||||
this.Motion = dr.Motion;
|
||||
this.BCD_1D = dr.BCD_1D;
|
||||
this.BCD_QR = dr.BCD_QR;
|
||||
this.BCD_DM = dr.BCD_DM;
|
||||
this.vOption = dr.vOption;
|
||||
this.vJobInfo = dr.vJobInfo;
|
||||
this.vWMSInfo = dr.vWMSInfo;
|
||||
this.vSIDInfo = dr.vSIDInfo;
|
||||
this.vSIDConv1 = dr.vSIDConv;
|
||||
this.Def_MFG = dr.Def_MFG;
|
||||
this.Def_Vname = dr.Def_VName;
|
||||
this.IgnoreOtherBarcode = dr.IgnoreOtherBarcode;
|
||||
this.DisableCamera = dr.DisableCamera;
|
||||
this.DisablePrinter = dr.DisablePrinter;
|
||||
this.CheckSIDExsit = dr.CheckSIDExsit;
|
||||
this.BSave = dr.BSave;
|
||||
this.IgnoreBatch = dr.IgnoreBatch;
|
||||
this.IgnorePartNo = dr.IgnorePartNo;
|
||||
}
|
||||
}
|
||||
|
||||
[TypeConverterAttribute(typeof(ExpandableObjectConverter))]
|
||||
public class RoiOffset
|
||||
{
|
||||
[DisplayName("Horizon"), Description("Vertical (Y-axis) change value (+ is downward, - is upward)")]
|
||||
public double Y { get; set; }
|
||||
[DisplayName("Vertical"), Description("Horizontal (X-axis) change value (+ is right, - is left)")]
|
||||
public double X { get; set; }
|
||||
[Browsable(false)]
|
||||
public bool IsEmpty { get { if (Y == 0 && X == 0) return true; else return false; } }
|
||||
|
||||
public RoiOffset(double start = 0.0, double end = 0.0)
|
||||
{
|
||||
this.Y = start;
|
||||
this.X = end;
|
||||
}
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("{0},{1}", Y, X);
|
||||
}
|
||||
public string toPointStr()
|
||||
{
|
||||
return string.Format("{0};{1}", Y, X);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[TypeConverterAttribute(typeof(ExpandableObjectConverter))]
|
||||
public class Range
|
||||
{
|
||||
[DisplayName("Start Value")]
|
||||
public uint Start { get; set; }
|
||||
[DisplayName("End Value")]
|
||||
public uint End { get; set; }
|
||||
[Browsable(false)]
|
||||
public bool IsEmpty { get { if (Start == 0 && End == 0) return true; else return false; } }
|
||||
|
||||
public Range(UInt16 start, UInt16 end) : this((uint)start, (uint)end) { }
|
||||
public Range(uint start = 0, uint end = 0)
|
||||
{
|
||||
this.Start = start;
|
||||
this.End = end;
|
||||
}
|
||||
public static implicit operator RangeF(Range p)
|
||||
{
|
||||
return new RangeF((float)p.Start, (float)p.End);
|
||||
}
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("{0}~{1}", Start, End);
|
||||
}
|
||||
}
|
||||
[TypeConverterAttribute(typeof(ExpandableObjectConverter))]
|
||||
public class RangeF
|
||||
{
|
||||
[DisplayName("Start Value")]
|
||||
public float Start { get; set; }
|
||||
[DisplayName("End Value")]
|
||||
public float End { get; set; }
|
||||
[Browsable(false)]
|
||||
public bool IsEmpty { get { if (Start == 0f && End == 0f) return true; else return false; } }
|
||||
public RangeF(float start = 0f, float end = 0f)
|
||||
{
|
||||
this.Start = start;
|
||||
this.End = end;
|
||||
}
|
||||
public static implicit operator Range(RangeF p)
|
||||
{
|
||||
return new Range((uint)p.Start, (uint)p.End);
|
||||
}
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("{0}~{1}", Start, End);
|
||||
}
|
||||
}
|
||||
|
||||
[TypeConverterAttribute(typeof(ExpandableObjectConverter))]
|
||||
public class CVisionProcess
|
||||
{
|
||||
|
||||
[Category("Special Settings (Developer)"), Description("Unused (was used for DOT recognition)")]
|
||||
public UInt16 halfKernel { get; set; }
|
||||
[Category("Special Settings (Developer)"), Description("Unused (was used for DOT recognition)")]
|
||||
public UInt16 Constant { get; set; }
|
||||
[Category("Special Settings (Developer)"), DisplayName("MP_Dilate"), Description("Unused (was used for DOT recognition)")]
|
||||
public UInt16 dilate { get; set; }
|
||||
[Category("Special Settings (Developer)"), DisplayName("MP_Erode"), Description("Unused (was used for DOT recognition)")]
|
||||
public UInt16 erode { get; set; }
|
||||
[Category("Special Settings (Developer)"), DisplayName("MP_Open"), Description("Unused (was used for DOT recognition)")]
|
||||
public UInt16 open { get; set; }
|
||||
[Category("Special Settings (Developer)"), DisplayName("MP_Open"), Description("Unused (was used for DOT recognition)")]
|
||||
public UInt32 segment_threshold { get; set; }
|
||||
[Category("Special Settings (Developer)"), DisplayName("MP_Open"), Description("Unused (was used for DOT recognition)")]
|
||||
public Boolean isBlack { get; set; }
|
||||
[Category("Special Settings (Developer)"), DisplayName("MP_Open"), Description("Unused (was used for DOT recognition)")]
|
||||
public UInt32 judg_runcount { get; set; }
|
||||
|
||||
|
||||
[Category("Unit Detection"), DisplayName("Brightness Threshold"), Description("Collects data above the entered value. The lower this value, the higher the detection value. Detection is determined by the value detected with this threshold. Since units are determined by looking at bright data, data above this threshold is detected")]
|
||||
public byte detect_threhosld { get; set; }
|
||||
[Category("Unit Detection"), DisplayName("Detection Threshold"), Description("This is the threshold value for detection. If the value detected due to the brightness threshold is 5000, and the value entered in this detection threshold is greater than 5000, it is determined that a unit exists. When it is lower, it is detected as an 'Empty' unit with no unit")]
|
||||
public UInt16 detect_count { get; set; }
|
||||
[Category("Unit Detection"), DisplayName("*Exception Area Detection Threshold"), Description("When an empty unit (=Empty), if light reflection from the shuttle frame is severe, the unit is detected by the reflection value. This value is used to remove such data, and in addition to the white area values used for unit detection, black blob detection is performed. If a black blob within the set value range is detected, it is detected as an 'Empty' unit")]
|
||||
public Point detect_blobrange { get; set; }
|
||||
|
||||
[Category("2D Detection"), DisplayName("Brightness Threshold"), Description("Collects data below the entered value. The lower this value, the lower the detection value. Detection is determined by the value detected with this threshold. Since 2D codes are determined by looking at dark data, data below this threshold is detected")]
|
||||
public byte detectDM_threhosld { get; set; }
|
||||
[Category("2D Detection"), DisplayName("Detection Threshold"), Description("This is the threshold value for detection. If the value detected due to the brightness threshold is 5000, and the value entered in this detection threshold is greater than 5000, it is determined that an ID exists. When it is lower, it is detected as a 'New' unit with no ID")]
|
||||
public UInt16 detectDM_count { get; set; }
|
||||
|
||||
public CVisionProcess()
|
||||
{
|
||||
|
||||
}
|
||||
public override string ToString()
|
||||
{
|
||||
return "Vision Settings";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
34
Handler/Project/Class/PositionData.cs
Normal file
34
Handler/Project/Class/PositionData.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Project
|
||||
{
|
||||
public class PositionData
|
||||
{
|
||||
public int index { get; set; }
|
||||
public string title { get; set; }
|
||||
public double value { get; set; }
|
||||
public double speed { get; set; }
|
||||
public double acc { get; set; }
|
||||
public double dcc { get; set; }
|
||||
public PositionData()
|
||||
{
|
||||
index = -1;
|
||||
title = string.Empty;
|
||||
value = 0.0;
|
||||
this.speed = 0.0;
|
||||
this.acc = 100.0;
|
||||
this.dcc = 0.0;
|
||||
}
|
||||
public PositionData(int idx_, string title_, double value_)
|
||||
{
|
||||
this.index = idx_;
|
||||
this.title = title_;
|
||||
this.value = value_;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
74
Handler/Project/Class/Reel.cs
Normal file
74
Handler/Project/Class/Reel.cs
Normal file
@@ -0,0 +1,74 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Project.Class
|
||||
{
|
||||
public class Reel
|
||||
{
|
||||
public string SID { get; set; }
|
||||
public string venderLot { get; set; }
|
||||
public string mfg { get; set; }
|
||||
public int qty { get; set; }
|
||||
public string id { get; set; }
|
||||
//public string date { get; set; }
|
||||
public string PartNo { get; set; }
|
||||
public string venderName { get; set; }
|
||||
|
||||
public Reel()
|
||||
{
|
||||
Clear();
|
||||
}
|
||||
public void Clear()
|
||||
{
|
||||
SID = string.Empty;
|
||||
venderLot = string.Empty;
|
||||
mfg = string.Empty;
|
||||
venderLot = string.Empty;
|
||||
id = string.Empty;
|
||||
//date = string.Empty;
|
||||
PartNo = string.Empty;
|
||||
venderName = string.Empty;
|
||||
qty = 0;
|
||||
}
|
||||
public Reel(string _sid, string _lot, string _manu, int _qty, string _id, string _mfgdate, string _partnum)
|
||||
{
|
||||
int sidNum = 0;
|
||||
if (int.TryParse(_sid, out sidNum) && sidNum.ToString().Length == 9)
|
||||
SID = sidNum.ToString();
|
||||
else
|
||||
throw new Exception("SID is not a number or not a 9-digit number.");
|
||||
|
||||
venderLot = _lot;
|
||||
mfg = _mfgdate;
|
||||
qty = _qty;
|
||||
id = _id;
|
||||
PartNo = _partnum;
|
||||
venderName = _manu;
|
||||
}
|
||||
public Reel(string qrbarcodestr)
|
||||
{
|
||||
var spData = qrbarcodestr.Split(';');
|
||||
if (spData.Length < 6)
|
||||
throw new Exception("Barcode length is insufficient.");
|
||||
|
||||
SID = spData[0];
|
||||
venderLot = spData[1];
|
||||
venderName = spData[2];
|
||||
|
||||
int _qty = 0;
|
||||
|
||||
if (int.TryParse(spData[3], out _qty))
|
||||
qty = _qty;
|
||||
else
|
||||
throw new Exception("Quantity field does not contain numeric information.");
|
||||
|
||||
id = spData[4];
|
||||
mfg = spData[5];
|
||||
if (spData.Length > 6) PartNo = spData[6];
|
||||
else PartNo = string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
52
Handler/Project/Class/RegexPattern.cs
Normal file
52
Handler/Project/Class/RegexPattern.cs
Normal file
@@ -0,0 +1,52 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Project.Class
|
||||
{
|
||||
|
||||
public class RegexPattern
|
||||
{
|
||||
public string Customer { get; set; }
|
||||
public string Pattern { get; set; }
|
||||
public string Description { get; set; }
|
||||
public bool IsTrust { get; set; }
|
||||
public bool IsAmkStd { get; set; }
|
||||
public Boolean IsEnable { get; set; }
|
||||
public RegexGroupMatch[] Groups { get; set; }
|
||||
public string Symbol { get; set; }
|
||||
public int Seq { get; set; }
|
||||
public RegexPattern()
|
||||
{
|
||||
Seq = 0;
|
||||
Groups = null;
|
||||
Pattern = string.Empty;
|
||||
Description = string.Empty;
|
||||
Customer = string.Empty;
|
||||
IsTrust = false;
|
||||
IsAmkStd = false;
|
||||
Symbol = string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class RegexGroupMatch
|
||||
{
|
||||
/// <summary>
|
||||
/// 1~
|
||||
/// </summary>
|
||||
public int GroupNo { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// RID,SID,VLOT,MFG,PART,QTY,CUST,CUSTCODE,VNAME,
|
||||
/// </summary>
|
||||
public string TargetPos { get; set; }
|
||||
public RegexGroupMatch()
|
||||
{
|
||||
GroupNo = 0;
|
||||
TargetPos = string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
184
Handler/Project/Class/StatusMessage.cs
Normal file
184
Handler/Project/Class/StatusMessage.cs
Normal file
@@ -0,0 +1,184 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Project.Class
|
||||
{
|
||||
public enum eStatusMesage : byte
|
||||
{
|
||||
Front = 0,
|
||||
Rear,
|
||||
TopJig,
|
||||
Main,
|
||||
}
|
||||
public class StatusMessage
|
||||
{
|
||||
|
||||
Dictionary<eStatusMesage, StatusMessageFormat> message;
|
||||
public StatusMessage()
|
||||
{
|
||||
this.message = new Dictionary<eStatusMesage, StatusMessageFormat>();
|
||||
}
|
||||
public StatusMessageFormat get(eStatusMesage msg)
|
||||
{
|
||||
lock (this.message)
|
||||
{
|
||||
if (this.message.ContainsKey(msg) == false)
|
||||
{
|
||||
var nemsg = new StatusMessageFormat
|
||||
{
|
||||
Message = string.Empty
|
||||
};
|
||||
this.message.Add(msg, nemsg);
|
||||
return nemsg;
|
||||
}
|
||||
|
||||
else
|
||||
return this.message[msg];
|
||||
}
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void set(eStatusMesage msg, StatusMessageFormat data)
|
||||
{
|
||||
lock (this.message)
|
||||
{
|
||||
if (this.message.ContainsKey(msg) == false)
|
||||
this.message.Add(msg, data);
|
||||
else
|
||||
this.message[msg] = data;
|
||||
}
|
||||
|
||||
}
|
||||
public void set(eStatusMesage msg, string data, int progval = 0, int progmax = 0)
|
||||
{
|
||||
if (data.StartsWith("[") && data.Contains("]"))
|
||||
{
|
||||
var buf = data.Split(']');
|
||||
var cate = buf[0].Substring(1);
|
||||
var body = string.Join("]", buf, 1, buf.Length - 1);
|
||||
set(msg, cate, body, Color.Black, progval, progmax);
|
||||
}
|
||||
else set(msg, string.Empty, data, Color.Black, progval, progmax);
|
||||
|
||||
}
|
||||
//public void set(eStatusMesage msg, string cate, string data, int progval = 0, int progmax = 0)
|
||||
//{
|
||||
// set(msg, cate, data, Color.Black, progval, progmax);
|
||||
|
||||
//}
|
||||
|
||||
public void set(eStatusMesage msg, string cate, string data, Color fColor, int progval = 0, int progmax = 0)
|
||||
{
|
||||
lock (this.message)
|
||||
{
|
||||
if (this.message.ContainsKey(msg) == false)
|
||||
{
|
||||
var nemsg = new StatusMessageFormat
|
||||
{
|
||||
Category = cate,
|
||||
Message = data,
|
||||
fColor = fColor,
|
||||
ProgressMax = progmax,
|
||||
ProgressValue = progval
|
||||
};
|
||||
this.message.Add(msg, nemsg);
|
||||
}
|
||||
else
|
||||
{
|
||||
var m = this.message[msg];
|
||||
m.Category = cate;
|
||||
m.Message = data;
|
||||
m.fColor = fColor;
|
||||
if (progval != 0 || progmax != 0)
|
||||
{
|
||||
m.ProgressValue = progval;
|
||||
m.ProgressMax = progmax;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
public void set(eStatusMesage msg, string data, Color fColor, Color bColor1, Color bColor2)
|
||||
{
|
||||
lock (this.message)
|
||||
{
|
||||
if (this.message.ContainsKey(msg) == false)
|
||||
{
|
||||
var nemsg = new StatusMessageFormat
|
||||
{
|
||||
Message = data,
|
||||
fColor = fColor,
|
||||
bColor1 = bColor1,
|
||||
bColor2 = bColor2
|
||||
};
|
||||
this.message.Add(msg, nemsg);
|
||||
}
|
||||
else
|
||||
{
|
||||
var m = this.message[msg];
|
||||
m.Message = data;
|
||||
m.fColor = fColor;
|
||||
m.bColor2 = bColor2;
|
||||
m.bColor1 = bColor1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
public class StatusMessageFormat
|
||||
{
|
||||
public string Category { get; set; }
|
||||
public string Message { get; set; }
|
||||
public Color fColor { get; set; }
|
||||
public Color bColor1 { get; set; }
|
||||
public Color bColor2 { get; set; }
|
||||
public int ProgressValue { get; set; }
|
||||
public int ProgressMax { get; set; }
|
||||
public int ProgressPerc
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ProgressMax == 0 || ProgressValue == 0) return 0;
|
||||
return (int)(ProgressValue / (ProgressMax * 1.0));
|
||||
}
|
||||
}
|
||||
public StatusMessageFormat()
|
||||
{
|
||||
Clear();
|
||||
}
|
||||
void setMessage(string t, string m, Color c)
|
||||
{
|
||||
this.Category = t;
|
||||
this.Message = m;
|
||||
this.fColor = c;
|
||||
|
||||
}
|
||||
void setMessage(string m, Color c)
|
||||
{
|
||||
this.Category = string.Empty;
|
||||
this.Message = m;
|
||||
this.fColor = c;
|
||||
|
||||
}
|
||||
public void Clear()
|
||||
{
|
||||
ProgressValue = 0;
|
||||
ProgressMax = 0;
|
||||
Category = string.Empty;
|
||||
Message = string.Empty;
|
||||
fColor = Color.Black;
|
||||
bColor1 = Color.White;
|
||||
bColor2 = Color.White;
|
||||
}
|
||||
}
|
||||
}
|
||||
877
Handler/Project/Class/VisionData.cs
Normal file
877
Handler/Project/Class/VisionData.cs
Normal file
@@ -0,0 +1,877 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Drawing;
|
||||
using System.Collections.Concurrent;
|
||||
using System.ComponentModel;
|
||||
using System.Runtime.CompilerServices;
|
||||
using AR;
|
||||
|
||||
namespace Project.Class
|
||||
{
|
||||
public class VisionData : INotifyPropertyChanged
|
||||
{
|
||||
public int RetryLoader { get; set; }
|
||||
public Dictionary<int,string> bcdMessage { get; set; }
|
||||
public Boolean LightOn { get; set; }
|
||||
public DateTime STime; //비젼시작시간
|
||||
public DateTime ETime; //비젼종료시간
|
||||
public TimeSpan RunTime { get { return ETime - STime; } } //비젼동작시간
|
||||
public DateTime GTime; //이미지수집시간
|
||||
public string FileNameL; //로딩존 촬영
|
||||
public string FileNameU; //언로딩존 촬영
|
||||
public Boolean Complete;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine($"SID:{SID}:{(SID_Trust ? "O" : "X")}");
|
||||
sb.AppendLine($"RID:{RID}:{(RID_Trust ? "O" : "X")}");
|
||||
sb.AppendLine($"LOT:{VLOT}:{(VLOT_Trust ? "O" : "X")}");
|
||||
sb.AppendLine($"QTY:{QTY}:{(QTY_Trust ? "O" : "X")}");
|
||||
sb.AppendLine($"BAT:{BATCH}");
|
||||
sb.AppendLine($"MFG:{MFGDATE}:{(MFGDATE_Trust ? "O" : "X")}");
|
||||
sb.AppendLine($"CPN:{PARTNO}:{(PARTNO_Trust ? "O" : "X")}");
|
||||
|
||||
sb.AppendLine($"RID2:{RID2}");
|
||||
sb.AppendLine($"RIDNew:{RIDNew}");
|
||||
sb.AppendLine($"SID0:{SID0}");
|
||||
return sb.ToString();
|
||||
}
|
||||
//public Boolean AngleQR { get; set; }
|
||||
//public Boolean AngleSTD { get; set; }
|
||||
//public double Angle { get; set; }
|
||||
|
||||
//public Boolean IsAngleSet
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// if (AngleQR == false && AngleSTD == false && Angle == 0.0) return true;
|
||||
// else return false;
|
||||
// }
|
||||
//}
|
||||
|
||||
/// <summary>
|
||||
/// 부착위치에따른 추가회전
|
||||
/// </summary>
|
||||
public double PositionAngle { get; set; }
|
||||
public double ApplyAngle { get; set; } //적용된 회전 각도
|
||||
public Boolean NeedCylinderForward { get; set; } //부착시 실린더를 올려야하는가
|
||||
public Boolean ApplyOffset { get; set; }
|
||||
public Boolean BaseAngle(out string msg, out KeyenceBarcodeData bcd)
|
||||
{
|
||||
|
||||
msg = string.Empty;
|
||||
bcd = null;
|
||||
|
||||
//데이터없다면 회전하지 못한다.
|
||||
if (this.barcodelist == null || this.barcodelist.Count < 1)
|
||||
{
|
||||
msg = "No barcode data";
|
||||
return false;
|
||||
}
|
||||
|
||||
//사용자가 확정한 코드를 우선으로 한다
|
||||
KeyValuePair<string, Class.KeyenceBarcodeData> bcddata;
|
||||
|
||||
var bcdCanList = barcodelist.Where(t => t.Value.Ignore == false).ToList();
|
||||
bcddata = bcdCanList.Where(t => t.Value.UserActive).FirstOrDefault();
|
||||
if (bcddata.Value != null)
|
||||
{
|
||||
bcd = bcddata.Value;
|
||||
msg = "User Active";
|
||||
return true;
|
||||
}
|
||||
|
||||
//표준바코드를 최우선 으로 사용
|
||||
//15자리 기존 바코드는 angle 로 사용하지 않는다.
|
||||
//이것은 각도가 일정치 않게 붙어지기 때문이다
|
||||
bcddata = bcdCanList.Where(t => t.Value.isSTDBarcode && t.Value.isNewLen15 == false).FirstOrDefault();
|
||||
if (bcddata.Value != null)
|
||||
{
|
||||
bcd = bcddata.Value;
|
||||
msg = "STD Barcode";
|
||||
return true;
|
||||
}
|
||||
|
||||
//실제사용한 데이터 우선한다.
|
||||
bcddata = bcdCanList.OrderByDescending(t=>t.Value.RefExApply).FirstOrDefault();
|
||||
if (bcddata.Value != null && bcddata.Value.RefExApply > 0)
|
||||
{
|
||||
bcd = bcddata.Value;
|
||||
msg = $"Used Data({bcddata.Value.RefExApply})";
|
||||
return true;
|
||||
}
|
||||
|
||||
//QR코드를 우선으로 사용 - return 릴은 적용하지 안게한다.
|
||||
//RQ코드가 적용되지 않게한다 210824
|
||||
bcddata = bcdCanList.Where(t => t.Value.barcodeSymbol == "1" && t.Value.isNewLen15 == false && t.Value.Data.EndsWith(";;;") == false && t.Value.Data.StartsWith("RQ") == false).FirstOrDefault();
|
||||
if (bcddata.Value != null)
|
||||
{
|
||||
bcd = bcddata.Value;
|
||||
msg = "QR Code";
|
||||
return true;
|
||||
}
|
||||
|
||||
//datamatrix, pdf417
|
||||
bcddata = bcdCanList.Where(t => t.Value.barcodeSymbol != "11" && t.Value.barcodeSymbol != "6" && t.Value.Data.StartsWith("RQ") == false).FirstOrDefault();
|
||||
if (bcddata.Value != null)
|
||||
{
|
||||
bcd = bcddata.Value;
|
||||
return true;
|
||||
}
|
||||
|
||||
//첫번쨰 아이템을 우선으로 사용
|
||||
if (bcdCanList.Count == 1)
|
||||
{
|
||||
bcd = bcdCanList.First().Value;
|
||||
msg = "Only One Barcode = " + bcd.Data;
|
||||
return true;
|
||||
}
|
||||
else if (bcdCanList.Count > 1)
|
||||
{
|
||||
//여러개가 있음
|
||||
bcddata = bcdCanList.Where(t => t.Value.barcodeSymbol == "0").FirstOrDefault();
|
||||
if (bcd != null)
|
||||
{
|
||||
bcd = bcddata.Value;
|
||||
msg = "1D Data";
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
bcd = bcdCanList.First().Value;//[0];
|
||||
msg = $"first({bcd.barcodeSymbol}:{bcd.Data})";
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
bcd = null;
|
||||
msg = "no data";
|
||||
return false;
|
||||
}
|
||||
|
||||
// angle = bcd.Angle;
|
||||
//return true;
|
||||
} //모션회전각도
|
||||
public Boolean Ready { get; set; }
|
||||
public Boolean ServerUpdate { get; set; }
|
||||
|
||||
public Boolean Confirm
|
||||
{
|
||||
get
|
||||
{
|
||||
return ConfirmAuto || ConfirmUser || ConfirmBypass;
|
||||
}
|
||||
}
|
||||
public Boolean ConfirmUser { get; set; }
|
||||
public Boolean ConfirmAuto { get; set; }
|
||||
public bool ConfirmBypass { get; set; }
|
||||
|
||||
public Boolean ValidSkipbyUser { get; set; }
|
||||
|
||||
private string _rid = string.Empty;
|
||||
private string _qty = string.Empty;
|
||||
private string _qty0 = string.Empty;
|
||||
private string _sid0 = string.Empty;
|
||||
private string _sid = string.Empty;
|
||||
private string _rid0 = string.Empty;
|
||||
private string _vlot = string.Empty;
|
||||
private string _vname = string.Empty;
|
||||
private string _mfgdate = string.Empty;
|
||||
private string _partno = string.Empty;
|
||||
private string _custcode = string.Empty;
|
||||
private string _custname = string.Empty;
|
||||
private string _batch = string.Empty;
|
||||
private string _qtymax = string.Empty;
|
||||
private string _mcn = string.Empty;
|
||||
|
||||
public bool SID_Trust { get; set; }
|
||||
public bool RID_Trust { get; set; }
|
||||
public bool VLOT_Trust { get; set; }
|
||||
public bool MFGDATE_Trust { get; set; }
|
||||
public bool QTY_Trust { get; set; }
|
||||
public bool PARTNO_Trust { get; set; }
|
||||
public bool VNAME_Trust { get; set; }
|
||||
public string Target { get; set; }
|
||||
|
||||
public string MCN
|
||||
{
|
||||
get { return _mcn; }
|
||||
set { _mcn = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Original QTY
|
||||
/// </summary>
|
||||
public string QTY0
|
||||
{
|
||||
get { return _qty0; }
|
||||
set { _qty0 = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Qty
|
||||
/// </summary>
|
||||
public string QTY
|
||||
{
|
||||
get { return _qty; }
|
||||
set { _qty = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// QTY값이 RQ에서 입력된 데이터인가?
|
||||
/// </summary>
|
||||
public Boolean QTYRQ { get; set; }
|
||||
|
||||
public string RID0
|
||||
{
|
||||
get { return _rid0; }
|
||||
set { _rid0 = value; OnPropertyChanged(); }
|
||||
}
|
||||
public string VLOT
|
||||
{
|
||||
get { return _vlot; }
|
||||
set { _vlot = value; OnPropertyChanged(); }
|
||||
}
|
||||
public string VNAME
|
||||
{
|
||||
get { return _vname; }
|
||||
set { _vname = value; OnPropertyChanged(); }
|
||||
}
|
||||
public string MFGDATE
|
||||
{
|
||||
get { return _mfgdate; }
|
||||
set { _mfgdate = value; OnPropertyChanged(); }
|
||||
}
|
||||
public string PARTNO
|
||||
{
|
||||
get { return _partno; }
|
||||
set { _partno = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Original SID
|
||||
/// </summary>
|
||||
public string SID0
|
||||
{
|
||||
get { return _sid0; }
|
||||
set { _sid0 = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
public string BATCH
|
||||
{
|
||||
get
|
||||
{
|
||||
return _batch;
|
||||
}
|
||||
set
|
||||
{
|
||||
_batch = value; OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public string QTYMAX
|
||||
{
|
||||
get
|
||||
{
|
||||
return _qtymax;
|
||||
}
|
||||
set
|
||||
{
|
||||
_qtymax = value; OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public string SID
|
||||
{
|
||||
get { return _sid; }
|
||||
set { _sid = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
private void OnPropertyChanged([CallerMemberName] string caller = "")
|
||||
{
|
||||
PropertyChanged?.Invoke(this,
|
||||
new PropertyChangedEventArgs(caller));
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Reel ID
|
||||
/// </summary>
|
||||
public string RID
|
||||
{
|
||||
get { return _rid; }
|
||||
private set { _rid = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 릴 ID를 설정합니다.trust 상태를 자동으로 true 값으로 전환합니다
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <param name="reason"></param>
|
||||
public void SetRID(string value, string reason)
|
||||
{
|
||||
//값이 변경될때 로그에 변경
|
||||
if (_rid.Equals(value) == false)
|
||||
{
|
||||
PUB.AddDebugLog(string.Format("RID Changed {0} -> {1} by {2}", _rid, value, reason));
|
||||
}
|
||||
RID = value;
|
||||
RID_Trust = true;
|
||||
}
|
||||
|
||||
public Boolean RIDNew { get; set; }
|
||||
public Boolean HASHEADER { get; set; }
|
||||
|
||||
|
||||
|
||||
public string CUSTCODE
|
||||
{
|
||||
get { return _custcode; }
|
||||
set { _custcode = value; OnPropertyChanged(); }
|
||||
}
|
||||
public string CUSTNAME
|
||||
{
|
||||
get { return _custname; }
|
||||
set { _custname = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 데이터가 모두존재하는지 확인
|
||||
/// </summary>
|
||||
public Boolean DataValid
|
||||
{
|
||||
get
|
||||
{
|
||||
if (Confirm == false) return false;
|
||||
return QTY.isEmpty() == false &&
|
||||
SID.isEmpty() == false &&
|
||||
RID.isEmpty() == false &&
|
||||
VLOT.isEmpty() == false &&
|
||||
VNAME.isEmpty() == false &&
|
||||
MFGDATE.isEmpty() == false &&
|
||||
PARTNO.isEmpty();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public Boolean PrintPositionCheck { get; set; }
|
||||
public string PrintPositionData { get; set; }
|
||||
|
||||
//상단위치에 프린트를 할것인가?
|
||||
//프린트위치에 따른다
|
||||
public ePrintPutPos GetPrintPutPosition()
|
||||
{
|
||||
//하단에 찍는경우이다
|
||||
if (PrintPositionData == "1" ||
|
||||
PrintPositionData == "2" ||
|
||||
PrintPositionData == "3")
|
||||
{
|
||||
return ePrintPutPos.Bottom;
|
||||
}
|
||||
else if (PrintPositionData == "7" ||
|
||||
PrintPositionData == "8" ||
|
||||
PrintPositionData == "9")
|
||||
{
|
||||
return ePrintPutPos.Top;
|
||||
}
|
||||
else if (PrintPositionData == "4") //왼쪽
|
||||
{
|
||||
if (ReelSize == eCartSize.Inch7)
|
||||
return ePrintPutPos.Top;
|
||||
else
|
||||
return ePrintPutPos.Middle;
|
||||
}
|
||||
else if (PrintPositionData == "6") //오른쪽
|
||||
{
|
||||
if (ReelSize == eCartSize.Inch7)
|
||||
return ePrintPutPos.Top;
|
||||
else
|
||||
return ePrintPutPos.Middle;
|
||||
}
|
||||
else return ePrintPutPos.None;
|
||||
|
||||
}
|
||||
//public string LabelPos { get; set; }
|
||||
//public Boolean PrintForce { get; set; }
|
||||
|
||||
public eCartSize ReelSize { get; set; }
|
||||
|
||||
public string QTY2 { get; set; } //바코드수량
|
||||
public string SID2 { get; set; } //바코드
|
||||
public string RID2 { get; set; } //바코드
|
||||
public string VLOT2 { get; set; }
|
||||
public string VNAME2 { get; set; }
|
||||
public string MFGDATE2 { get; set; }
|
||||
public string PARTNO2 { get; set; }
|
||||
|
||||
|
||||
|
||||
public System.Drawing.Color GetColorByBarcodeCount(int idx)
|
||||
{
|
||||
if (QRPositionData[idx] > 0) return Color.Gold; //QR데이터가있다면 금색으로 한다
|
||||
|
||||
var Cnt = LabelPositionData[idx];
|
||||
if (Cnt == MaxBarcodePosData) return Color.Purple;
|
||||
else if (Cnt == 0) return Color.FromArgb(32, 32, 32);
|
||||
{
|
||||
//나머진 숫자별로 데이터를 표시한다 (
|
||||
var GValue = Cnt * 10;
|
||||
if (GValue > 255) GValue = 255;
|
||||
return Color.FromArgb(32, 32, GValue);
|
||||
}
|
||||
|
||||
}
|
||||
public Boolean isMaxBarcodePosition(int idx)
|
||||
{
|
||||
return LabelPositionData[idx] == MaxBarcodePosData;
|
||||
}
|
||||
|
||||
public byte[] QRPositionData { get; private set; }
|
||||
public byte[] LabelPositionData { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// keyence barcodeparse 같은데에서 분석한 자료를 이곳에 추가합니다.
|
||||
/// 이 데이터는 SPS에서 처리완료됩니다.
|
||||
/// </summary>
|
||||
public ConcurrentDictionary<String, Class.KeyenceBarcodeData> barcodelist;
|
||||
|
||||
/// <summary>
|
||||
/// keyence 로 부터 신규 바코드가 업데이트되었다
|
||||
/// </summary>
|
||||
public Boolean BarcodeTouched = false;
|
||||
|
||||
public event PropertyChangedEventHandler PropertyChanged;
|
||||
|
||||
//리더기로부터 읽은 자료 모두가 들어잇다
|
||||
//public List<Class.KeyenceBarcodeData> barcodelist
|
||||
//{
|
||||
// get { return _barcodelist; }
|
||||
// set
|
||||
// {
|
||||
// this._barcodelist = value;
|
||||
// UpdateBarcodePositionData();
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
|
||||
public byte MaxBarcodePosData { get; private set; }
|
||||
/// <summary>
|
||||
/// 바코드목록을 이용해서 라벨위치 분포값을 변경합낟.
|
||||
/// 해당 위치값은 labelposdata로 접근가능함
|
||||
/// </summary>
|
||||
public void UpdateBarcodePositionData()
|
||||
{
|
||||
LabelPositionData[0] = (byte)barcodelist.Where(t => t.Value.LabelPosition == 1).Count();
|
||||
LabelPositionData[1] = (byte)barcodelist.Where(t => t.Value.LabelPosition == 2).Count();
|
||||
LabelPositionData[2] = (byte)barcodelist.Where(t => t.Value.LabelPosition == 3).Count();
|
||||
|
||||
LabelPositionData[3] = (byte)barcodelist.Where(t => t.Value.LabelPosition == 4).Count();
|
||||
LabelPositionData[4] = (byte)barcodelist.Where(t => t.Value.LabelPosition == 6).Count();
|
||||
|
||||
LabelPositionData[5] = (byte)barcodelist.Where(t => t.Value.LabelPosition == 7).Count();
|
||||
LabelPositionData[6] = (byte)barcodelist.Where(t => t.Value.LabelPosition == 8).Count();
|
||||
LabelPositionData[7] = (byte)barcodelist.Where(t => t.Value.LabelPosition == 9).Count();
|
||||
|
||||
QRPositionData[0] = (byte)barcodelist.Where(t => t.Value.LabelPosition == 1 && t.Value.AmkorData.isValid).Count();
|
||||
QRPositionData[1] = (byte)barcodelist.Where(t => t.Value.LabelPosition == 2 && t.Value.AmkorData.isValid).Count();
|
||||
QRPositionData[2] = (byte)barcodelist.Where(t => t.Value.LabelPosition == 3 && t.Value.AmkorData.isValid).Count();
|
||||
|
||||
QRPositionData[3] = (byte)barcodelist.Where(t => t.Value.LabelPosition == 4 && t.Value.AmkorData.isValid).Count();
|
||||
QRPositionData[4] = (byte)barcodelist.Where(t => t.Value.LabelPosition == 6 && t.Value.AmkorData.isValid).Count();
|
||||
|
||||
QRPositionData[5] = (byte)barcodelist.Where(t => t.Value.LabelPosition == 7 && t.Value.AmkorData.isValid).Count();
|
||||
QRPositionData[6] = (byte)barcodelist.Where(t => t.Value.LabelPosition == 8 && t.Value.AmkorData.isValid).Count();
|
||||
QRPositionData[7] = (byte)barcodelist.Where(t => t.Value.LabelPosition == 9 && t.Value.AmkorData.isValid).Count();
|
||||
|
||||
MaxBarcodePosData = LabelPositionData.Max(t => t);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Data1(인쇄전 인식데이터) 과 Data2(QR)가 동일한지 비교합니다.
|
||||
/// </summary>
|
||||
public Boolean MatchValidation
|
||||
{
|
||||
get
|
||||
{
|
||||
if (PARTNO == null) this.PARTNO = string.Empty;
|
||||
if (PARTNO2 == null) this.PARTNO2 = string.Empty;
|
||||
if (QTY == null) QTY = string.Empty;
|
||||
if (QTY2 == null) QTY2 = string.Empty;
|
||||
if (SID == null) SID = string.Empty;
|
||||
if (SID2 == null) SID2 = string.Empty;
|
||||
if (VLOT == null) VLOT = string.Empty;
|
||||
if (VLOT2 == null) VLOT2 = string.Empty;
|
||||
if (PARTNO == null) PARTNO = string.Empty;
|
||||
if (PARTNO2 == null) PARTNO2 = string.Empty;
|
||||
|
||||
if (QTY.Equals(QTY2) == false)
|
||||
{
|
||||
PUB.log.AddE(string.Format("QR Validation Failed Quantity:{0} != {1}", QTY, QTY2));
|
||||
return false;
|
||||
}
|
||||
if (RID.Equals(RID2) == false)
|
||||
{
|
||||
PUB.log.AddE(string.Format("QR Validation Failed RID:{0} != {1}", RID, RID2));
|
||||
return false;
|
||||
}
|
||||
if (VLOT.Equals(VLOT2) == false)
|
||||
{
|
||||
PUB.log.AddE(string.Format("QR Validation Failed VLOT:{0} != {1}", VLOT, VLOT2));
|
||||
return false;
|
||||
}
|
||||
if (PARTNO.Equals(PARTNO2) == false)
|
||||
{
|
||||
PUB.log.AddE(string.Format("QR Validation Failed PARTNO:{0} != {1}", PARTNO, PARTNO2));
|
||||
return false;
|
||||
}
|
||||
if (SID.Equals(SID2) == false)
|
||||
{
|
||||
PUB.log.AddE(string.Format("QR Validation Failed SID:{0} != {1}", SID, SID2));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public string QRInputRaw { get; set; } //입력에 사용한 RAW
|
||||
public string QROutRaw { get; set; } //부착된 QR코드의 값
|
||||
public string ZPL { get; set; } //출력시 사용한 ZPL
|
||||
public string PrintQRData { get; set; } //출력시 사용한 ZPL에 포함된 QR데이터
|
||||
public string LastQueryStringSID = string.Empty;
|
||||
public string LastQueryStringWMS = string.Empty;
|
||||
public string LastQueryStringCNV = string.Empty;
|
||||
public string LastQueryStringJOB = string.Empty;
|
||||
|
||||
public VisionData(string reason)
|
||||
{
|
||||
Clear(reason, false);
|
||||
}
|
||||
public Boolean isEmpty()
|
||||
{
|
||||
return RID.isEmpty();
|
||||
}
|
||||
public void Clear(string reason, Boolean timeBackup)
|
||||
{
|
||||
LastQueryStringSID = string.Empty;
|
||||
LastQueryStringWMS = string.Empty;
|
||||
LastQueryStringCNV = string.Empty;
|
||||
LastQueryStringJOB = string.Empty;
|
||||
RetryLoader = 0;
|
||||
ApplyOffset = false;
|
||||
var baktime = new DateTime(1982, 11, 23);
|
||||
if (timeBackup) baktime = this.STime;
|
||||
bcdMessage = new Dictionary<int, string>();
|
||||
|
||||
PositionAngle = 0;
|
||||
HASHEADER = false;
|
||||
CUSTCODE = string.Empty;
|
||||
CUSTNAME = string.Empty;
|
||||
RID0 = string.Empty;
|
||||
RIDNew = false;
|
||||
LightOn = false;
|
||||
//SCODE = string.Empty;
|
||||
ValidSkipbyUser = false;
|
||||
NeedCylinderForward = false;
|
||||
ApplyAngle = 0;
|
||||
MaxBarcodePosData = 0;
|
||||
PrintPositionCheck = false;
|
||||
LabelPositionData = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
QRPositionData = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
ReelSize = eCartSize.None;
|
||||
// PrintForce = false;
|
||||
ConfirmAuto = false;
|
||||
ConfirmUser = false;
|
||||
ConfirmBypass = false;
|
||||
|
||||
ServerUpdate = false;
|
||||
PrintPositionData = "";
|
||||
//LabelPos = "";
|
||||
if (barcodelist != null) barcodelist.Clear();
|
||||
else barcodelist = new ConcurrentDictionary<string, KeyenceBarcodeData>();
|
||||
|
||||
QRInputRaw = string.Empty;
|
||||
QROutRaw = string.Empty;
|
||||
ZPL = string.Empty;
|
||||
PrintQRData = string.Empty;
|
||||
|
||||
STime = baktime;// DateTime.Parse("1982-11-23");
|
||||
ETime = DateTime.Parse("1982-11-23");
|
||||
GTime = DateTime.Parse("1982-11-23");
|
||||
Complete = false;
|
||||
//Angle = 0.0;
|
||||
//AngleQR = false;
|
||||
//AngleSTD = false;
|
||||
MCN = string.Empty;
|
||||
Target = string.Empty;
|
||||
Ready = false;
|
||||
QTY0 = string.Empty;
|
||||
QTY = string.Empty;// string.Empty;
|
||||
QTYRQ = false;
|
||||
//PUB.log.AddI($"비젼개체 CLEAR 로 RQ 상태 초기화(false)");
|
||||
|
||||
BATCH = string.Empty;
|
||||
QTYMAX = string.Empty;
|
||||
|
||||
SID0 = string.Empty;
|
||||
SID = string.Empty;
|
||||
//RID = string.Empty;
|
||||
SetRID(string.Empty, reason);
|
||||
VLOT = string.Empty;
|
||||
MFGDATE = string.Empty;
|
||||
VNAME = string.Empty;
|
||||
PARTNO = string.Empty;
|
||||
|
||||
QTY2 = "0";// string.Empty;
|
||||
SID2 = string.Empty;
|
||||
RID2 = string.Empty;
|
||||
VLOT2 = string.Empty;
|
||||
MFGDATE2 = string.Empty;
|
||||
VNAME2 = string.Empty;
|
||||
PARTNO2 = string.Empty;
|
||||
|
||||
FileNameL = string.Empty;
|
||||
FileNameU = string.Empty;
|
||||
|
||||
MFGDATE_Trust = false;
|
||||
PARTNO_Trust = false;
|
||||
QTY_Trust = false;
|
||||
SID_Trust = false;
|
||||
RID_Trust = false;
|
||||
VLOT_Trust = false;
|
||||
VNAME_Trust = false;
|
||||
|
||||
BarcodeTouched = false;
|
||||
MCN = string.Empty;
|
||||
Target = string.Empty;
|
||||
|
||||
PUB.log.Add($"Vision Data Deleted ({reason})");
|
||||
}
|
||||
|
||||
public void CopyTo(ref VisionData obj)
|
||||
{
|
||||
//바코드메세지 복사
|
||||
obj.bcdMessage = new Dictionary<int, string>();
|
||||
foreach (var item in this.bcdMessage)
|
||||
obj.bcdMessage.Add(item.Key, item.Value);
|
||||
|
||||
obj.ApplyOffset = this.ApplyOffset;
|
||||
obj.ConfirmAuto = this.ConfirmAuto;
|
||||
obj.ConfirmUser = this.ConfirmUser;
|
||||
obj.CUSTCODE = this.CUSTCODE;
|
||||
obj.CUSTNAME = this.CUSTNAME;
|
||||
obj.LightOn = this.LightOn;
|
||||
|
||||
//obj.SCODE = this.SCODE;
|
||||
obj.ValidSkipbyUser = this.ValidSkipbyUser;
|
||||
obj.NeedCylinderForward = this.NeedCylinderForward; //210207
|
||||
obj.ApplyAngle = this.ApplyAngle; //210207
|
||||
obj.STime = this.STime;
|
||||
obj.ETime = this.ETime;
|
||||
obj.GTime = this.GTime;
|
||||
obj.FileNameL = this.FileNameL;
|
||||
obj.FileNameU = this.FileNameU;
|
||||
obj.Complete = this.Complete;
|
||||
//obj.Angle = this.Angle;
|
||||
//obj.AngleQR = this.AngleQR;
|
||||
//obj.AngleSTD = this.AngleSTD;
|
||||
obj.BATCH = this.BATCH;
|
||||
obj.QTYMAX = this.QTYMAX;
|
||||
obj.Ready = this.Ready;
|
||||
obj.QTY = this.QTY;
|
||||
obj.QTYRQ = this.QTYRQ;
|
||||
obj.SID = this.SID;
|
||||
obj.SID0 = this.SID0; //210331
|
||||
obj.SetRID(this.RID, "copy");// obj.RID = this.RID;
|
||||
obj.RID0 = this.RID0;
|
||||
obj.RIDNew = this.RIDNew;
|
||||
obj.VLOT = this.VLOT;
|
||||
obj.VNAME = this.VNAME;
|
||||
obj.MFGDATE = this.MFGDATE;
|
||||
obj.PARTNO = this.PARTNO;
|
||||
obj.MCN = this.MCN;
|
||||
obj.Target = this.Target;
|
||||
|
||||
obj.QTY2 = this.QTY2;
|
||||
obj.SID2 = this.SID2;
|
||||
obj.RID2 = this.RID2;
|
||||
obj.VLOT2 = this.VLOT2;
|
||||
obj.VNAME2 = this.VNAME2;
|
||||
obj.MFGDATE2 = this.MFGDATE;
|
||||
obj.PARTNO2 = this.PARTNO2;
|
||||
|
||||
obj.QRInputRaw = this.QRInputRaw;
|
||||
obj.QROutRaw = this.QROutRaw;
|
||||
obj.ZPL = this.ZPL;
|
||||
obj.PrintQRData = this.PrintQRData;
|
||||
obj.PrintPositionData = this.PrintPositionData;
|
||||
//obj.PrintForce = this.PrintForce;
|
||||
obj.ReelSize = this.ReelSize;
|
||||
obj.PrintPositionCheck = this.PrintPositionCheck;
|
||||
obj.BarcodeTouched = this.BarcodeTouched;
|
||||
|
||||
//라벨위치값 복사
|
||||
for (int i = 0; i < obj.LabelPositionData.Length; i++)
|
||||
obj.LabelPositionData[i] = this.LabelPositionData[i];
|
||||
for (int i = 0; i < obj.QRPositionData.Length; i++)
|
||||
obj.QRPositionData[i] = this.QRPositionData[i];
|
||||
|
||||
//바코드 데이터를 복사해준다.
|
||||
if (obj.barcodelist == null)
|
||||
obj.barcodelist = new ConcurrentDictionary<string, KeyenceBarcodeData>();// List<KeyenceBarcodeData>();
|
||||
else
|
||||
obj.barcodelist.Clear();
|
||||
|
||||
foreach (var item in this.barcodelist)
|
||||
{
|
||||
var bcd = item.Value;
|
||||
var newitema = new KeyenceBarcodeData
|
||||
{
|
||||
Angle = bcd.Angle,
|
||||
CenterPX = new Point(bcd.CenterPX.X, bcd.CenterPX.Y),
|
||||
Data = bcd.Data,
|
||||
LabelPosition = bcd.LabelPosition,
|
||||
UserActive = bcd.UserActive,
|
||||
barcodeSymbol = bcd.barcodeSymbol,
|
||||
};
|
||||
|
||||
newitema.vertex = new Point[bcd.vertex.Length];
|
||||
bcd.vertex.CopyTo(newitema.vertex, 0);
|
||||
|
||||
if (bcd.AmkorData != null) //231006 null error fix
|
||||
bcd.AmkorData.CopyTo(newitema.AmkorData);
|
||||
|
||||
obj.barcodelist.AddOrUpdate(item.Key, newitema,
|
||||
(key, data) =>
|
||||
{
|
||||
data.Angle = newitema.Angle;
|
||||
data.CenterPX = newitema.CenterPX;
|
||||
data.Data = newitema.Data;
|
||||
data.LabelPosition = newitema.LabelPosition;
|
||||
data.UserActive = newitema.UserActive;
|
||||
data.barcodeSymbol = newitema.barcodeSymbol;
|
||||
data.RegExConfirm = newitema.RegExConfirm;
|
||||
return data;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void UpdateTo(ref VisionData obj)
|
||||
{
|
||||
//바코드메세지 복사
|
||||
obj.bcdMessage = new Dictionary<int, string>();
|
||||
foreach (var item in this.bcdMessage)
|
||||
obj.bcdMessage.Add(item.Key, item.Value);
|
||||
|
||||
obj.ApplyOffset = this.ApplyOffset;
|
||||
obj.ConfirmAuto = this.ConfirmAuto;
|
||||
obj.ConfirmUser = this.ConfirmUser;
|
||||
obj.CUSTCODE = this.CUSTCODE;
|
||||
obj.CUSTNAME = this.CUSTNAME;
|
||||
obj.LightOn = this.LightOn;
|
||||
|
||||
//obj.SCODE = this.SCODE;
|
||||
obj.ValidSkipbyUser = this.ValidSkipbyUser;
|
||||
obj.NeedCylinderForward = this.NeedCylinderForward; //210207
|
||||
obj.ApplyAngle = this.ApplyAngle; //210207
|
||||
obj.STime = this.STime;
|
||||
obj.ETime = this.ETime;
|
||||
obj.GTime = this.GTime;
|
||||
obj.FileNameL = this.FileNameL;
|
||||
obj.FileNameU = this.FileNameU;
|
||||
obj.Complete = this.Complete;
|
||||
//obj.Angle = this.Angle;
|
||||
//obj.AngleQR = this.AngleQR;
|
||||
//obj.AngleSTD = this.AngleSTD;
|
||||
obj.Ready = this.Ready;
|
||||
obj.QTY = this.QTY;
|
||||
obj.QTYRQ = this.QTYRQ;
|
||||
obj.SID = this.SID;
|
||||
obj.SID0 = this.SID0; //210331
|
||||
obj.SetRID(this.RID, "copy");// obj.RID = this.RID;
|
||||
obj.RID0 = this.RID0;
|
||||
obj.RIDNew = this.RIDNew;
|
||||
obj.VLOT = this.VLOT;
|
||||
obj.VNAME = this.VNAME;
|
||||
obj.MFGDATE = this.MFGDATE;
|
||||
obj.PARTNO = this.PARTNO;
|
||||
obj.MCN = this.MCN;
|
||||
obj.Target = this.Target;
|
||||
|
||||
obj.BATCH = this.BATCH;
|
||||
obj.QTYMAX = this.QTYMAX;
|
||||
obj.QTY2 = this.QTY2;
|
||||
obj.SID2 = this.SID2;
|
||||
obj.RID2 = this.RID2;
|
||||
obj.VLOT2 = this.VLOT2;
|
||||
obj.VNAME2 = this.VNAME2;
|
||||
obj.MFGDATE2 = this.MFGDATE;
|
||||
obj.PARTNO2 = this.PARTNO2;
|
||||
|
||||
obj.QRInputRaw = this.QRInputRaw;
|
||||
obj.QROutRaw = this.QROutRaw;
|
||||
obj.ZPL = this.ZPL;
|
||||
obj.PrintQRData = this.PrintQRData;
|
||||
obj.PrintPositionData = this.PrintPositionData;
|
||||
//obj.PrintForce = this.PrintForce;
|
||||
obj.ReelSize = this.ReelSize;
|
||||
obj.PrintPositionCheck = this.PrintPositionCheck;
|
||||
obj.BarcodeTouched = this.BarcodeTouched;
|
||||
|
||||
//라벨위치값 복사
|
||||
for (int i = 0; i < obj.LabelPositionData.Length; i++)
|
||||
obj.LabelPositionData[i] = this.LabelPositionData[i];
|
||||
for (int i = 0; i < obj.QRPositionData.Length; i++)
|
||||
obj.QRPositionData[i] = this.QRPositionData[i];
|
||||
|
||||
//바코드 데이터를 복사해준다.
|
||||
if (obj.barcodelist == null)
|
||||
obj.barcodelist = new ConcurrentDictionary<string, KeyenceBarcodeData>();// List<KeyenceBarcodeData>();
|
||||
else
|
||||
obj.barcodelist.Clear();
|
||||
|
||||
foreach (var item in this.barcodelist)
|
||||
{
|
||||
var bcd = item.Value;
|
||||
var newitema = new KeyenceBarcodeData
|
||||
{
|
||||
Angle = bcd.Angle,
|
||||
CenterPX = new Point(bcd.CenterPX.X, bcd.CenterPX.Y),
|
||||
Data = bcd.Data,
|
||||
LabelPosition = bcd.LabelPosition,
|
||||
UserActive = bcd.UserActive,
|
||||
barcodeSymbol = bcd.barcodeSymbol,
|
||||
};
|
||||
|
||||
newitema.vertex = new Point[bcd.vertex.Length];
|
||||
bcd.vertex.CopyTo(newitema.vertex, 0);
|
||||
bcd.AmkorData.CopyTo(newitema.AmkorData);
|
||||
obj.barcodelist.AddOrUpdate(item.Key, newitema,
|
||||
(key, data) =>
|
||||
{
|
||||
data.Angle = newitema.Angle;
|
||||
data.CenterPX = newitema.CenterPX;
|
||||
data.Data = newitema.Data;
|
||||
data.LabelPosition = newitema.LabelPosition;
|
||||
data.UserActive = newitema.UserActive;
|
||||
data.barcodeSymbol = newitema.barcodeSymbol;
|
||||
data.RegExConfirm = newitema.RegExConfirm;
|
||||
return data;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
86
Handler/Project/Class/sPositionData.cs
Normal file
86
Handler/Project/Class/sPositionData.cs
Normal file
@@ -0,0 +1,86 @@
|
||||
using System;
|
||||
|
||||
namespace Project
|
||||
{
|
||||
[Serializable]
|
||||
public class sPositionData
|
||||
{
|
||||
public float inpositionrange { get; set; }
|
||||
public short Axis;
|
||||
public double Position { get; set; }
|
||||
public double Acc;
|
||||
public double _dcc;
|
||||
public double Dcc
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_dcc == 0) return Acc;
|
||||
else return _dcc;
|
||||
}
|
||||
set
|
||||
{
|
||||
_dcc = value;
|
||||
}
|
||||
}
|
||||
public double Speed;
|
||||
public Boolean isError { get { return Speed == 0; } }
|
||||
public string Message;
|
||||
|
||||
public sPositionData(sPositionData baseData)
|
||||
{
|
||||
this.Clear();
|
||||
this.Position = baseData.Position;
|
||||
this.Acc = baseData.Acc;
|
||||
this.Dcc = baseData.Dcc;
|
||||
this._dcc = baseData._dcc;
|
||||
this.Speed = baseData.Speed;
|
||||
this.Axis = baseData.Axis;
|
||||
this.Message = baseData.Message;
|
||||
this.inpositionrange = baseData.inpositionrange;
|
||||
}
|
||||
|
||||
public sPositionData Clone()
|
||||
{
|
||||
return new sPositionData
|
||||
{
|
||||
Position = this.Position,
|
||||
Acc = this.Acc,
|
||||
Dcc = this.Dcc,
|
||||
//isError = this.isError,
|
||||
Message = this.Message,
|
||||
Speed = this.Speed,
|
||||
_dcc = this.Dcc,
|
||||
Axis = this.Axis,
|
||||
inpositionrange = this.inpositionrange,
|
||||
};
|
||||
}
|
||||
|
||||
public sPositionData()
|
||||
{
|
||||
Clear();
|
||||
}
|
||||
public sPositionData(double pos)
|
||||
{
|
||||
Clear();
|
||||
this.Position = pos;
|
||||
}
|
||||
|
||||
//public void SetPosition(double pos) { this.Position = pos; }
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
Axis = -1;
|
||||
inpositionrange = 0f;
|
||||
Position = 0;
|
||||
Acc = 500;
|
||||
_dcc = 0;
|
||||
Speed = 0;
|
||||
Message = "Not Set";
|
||||
}
|
||||
public override string ToString()
|
||||
{
|
||||
return $"Pos:{Position},Spd:{Speed}";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
2556
Handler/Project/DSList.Designer.cs
generated
Normal file
2556
Handler/Project/DSList.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
8
Handler/Project/DSList.cs
Normal file
8
Handler/Project/DSList.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace Project
|
||||
{
|
||||
|
||||
|
||||
partial class DSList
|
||||
{
|
||||
}
|
||||
}
|
||||
9
Handler/Project/DSList.xsc
Normal file
9
Handler/Project/DSList.xsc
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--<autogenerated>
|
||||
This code was generated by a tool.
|
||||
Changes to this file may cause incorrect behavior and will be lost if
|
||||
the code is regenerated.
|
||||
</autogenerated>-->
|
||||
<DataSetUISetting Version="1.00" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
|
||||
<TableUISettings />
|
||||
</DataSetUISetting>
|
||||
183
Handler/Project/DSList.xsd
Normal file
183
Handler/Project/DSList.xsd
Normal file
@@ -0,0 +1,183 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xs:schema id="DSList" targetNamespace="http://tempuri.org/DSList.xsd" xmlns:mstns="http://tempuri.org/DSList.xsd" xmlns="http://tempuri.org/DSList.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" attributeFormDefault="qualified" elementFormDefault="qualified">
|
||||
<xs:annotation>
|
||||
<xs:appinfo source="urn:schemas-microsoft-com:xml-msdatasource">
|
||||
<DataSource DefaultConnectionIndex="0" FunctionsComponentName="QueriesTableAdapter" Modifier="AutoLayout, AnsiClass, Class, Public" SchemaSerializationMode="IncludeSchema" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
|
||||
<Connections>
|
||||
<Connection AppSettingsObjectName="Settings" AppSettingsPropertyName="CS" ConnectionStringObject="" IsAppSettingsProperty="true" Modifier="Assembly" Name="CS (Settings)" ParameterPrefix="@" PropertyReference="ApplicationSettings.Project.Properties.Settings.GlobalReference.Default.CS" Provider="System.Data.SqlClient" />
|
||||
</Connections>
|
||||
<Tables>
|
||||
<TableAdapter BaseClass="System.ComponentModel.Component" DataAccessorModifier="AutoLayout, AnsiClass, Class, Public" DataAccessorName="K4EE_Component_Reel_CustRuleTableAdapter" GeneratorDataComponentClassName="K4EE_Component_Reel_CustRuleTableAdapter" Name="K4EE_Component_Reel_CustRule" UserDataComponentName="K4EE_Component_Reel_CustRuleTableAdapter">
|
||||
<MainSource>
|
||||
<DbSource ConnectionRef="CS (Settings)" DbObjectName="WMS.dbo.K4EE_Component_Reel_CustRule" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="Fill" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetData" GeneratorSourceName="Fill" GetMethodModifier="Public" GetMethodName="GetData" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetData" UserSourceName="Fill">
|
||||
<DeleteCommand>
|
||||
<DbCommand CommandType="Text" ModifiedByUser="true">
|
||||
<CommandText>DELETE FROM [K4EE_Component_Reel_CustRule] WHERE (([code] = @Original_code) AND ((@IsNull_pre = 1 AND [pre] IS NULL) OR ([pre] = @Original_pre)) AND ((@IsNull_pos = 1 AND [pos] IS NULL) OR ([pos] = @Original_pos)) AND ((@IsNull_len = 1 AND [len] IS NULL) OR ([len] = @Original_len)) AND ((@IsNull_exp = 1 AND [exp] IS NULL) OR ([exp] = @Original_exp)))</CommandText>
|
||||
<Parameters>
|
||||
<Parameter AllowDbNull="false" AutogeneratedName="Original_code" ColumnName="code" DataSourceName="WMS.dbo.K4EE_Component_Reel_CustRule" DataTypeServer="varchar(10)" DbType="AnsiString" Direction="Input" ParameterName="@Original_code" Precision="0" ProviderType="VarChar" Scale="0" Size="10" SourceColumn="code" SourceColumnNullMapping="false" SourceVersion="Original" />
|
||||
<Parameter AllowDbNull="true" AutogeneratedName="IsNull_pre" ColumnName="" DataSourceName="" DataTypeServer="int" DbType="Int32" Direction="Input" ParameterName="@IsNull_pre" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="" SourceColumnNullMapping="true" SourceVersion="Original" />
|
||||
<Parameter AllowDbNull="false" AutogeneratedName="Original_pre" ColumnName="" DataSourceName="" DataTypeServer="unknown" DbType="Object" Direction="Input" ParameterName="@Original_pre" Precision="0" Scale="0" Size="1024" SourceColumn="" SourceColumnNullMapping="false" SourceVersion="Original" />
|
||||
<Parameter AllowDbNull="true" AutogeneratedName="IsNull_pos" ColumnName="" DataSourceName="" DataTypeServer="int" DbType="Int32" Direction="Input" ParameterName="@IsNull_pos" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="" SourceColumnNullMapping="true" SourceVersion="Original" />
|
||||
<Parameter AllowDbNull="false" AutogeneratedName="Original_pos" ColumnName="" DataSourceName="" DataTypeServer="unknown" DbType="Object" Direction="Input" ParameterName="@Original_pos" Precision="0" Scale="0" Size="1024" SourceColumn="" SourceColumnNullMapping="false" SourceVersion="Original" />
|
||||
<Parameter AllowDbNull="true" AutogeneratedName="IsNull_len" ColumnName="" DataSourceName="" DataTypeServer="int" DbType="Int32" Direction="Input" ParameterName="@IsNull_len" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="" SourceColumnNullMapping="true" SourceVersion="Original" />
|
||||
<Parameter AllowDbNull="false" AutogeneratedName="Original_len" ColumnName="" DataSourceName="" DataTypeServer="unknown" DbType="Object" Direction="Input" ParameterName="@Original_len" Precision="0" Scale="0" Size="1024" SourceColumn="" SourceColumnNullMapping="false" SourceVersion="Original" />
|
||||
<Parameter AllowDbNull="true" AutogeneratedName="IsNull_exp" ColumnName="" DataSourceName="" DataTypeServer="int" DbType="Int32" Direction="Input" ParameterName="@IsNull_exp" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="" SourceColumnNullMapping="true" SourceVersion="Original" />
|
||||
<Parameter AllowDbNull="false" AutogeneratedName="Original_exp" ColumnName="" DataSourceName="" DataTypeServer="unknown" DbType="Object" Direction="Input" ParameterName="@Original_exp" Precision="0" Scale="0" Size="1024" SourceColumn="" SourceColumnNullMapping="false" SourceVersion="Original" />
|
||||
</Parameters>
|
||||
</DbCommand>
|
||||
</DeleteCommand>
|
||||
<InsertCommand>
|
||||
<DbCommand CommandType="Text" ModifiedByUser="false">
|
||||
<CommandText>INSERT INTO [K4EE_Component_Reel_CustRule] ([code], [MatchEx], [MatchIndex], [GroupIndex], [ReplaceEx], [ReplaceStr], [varName], [Remark]) VALUES (@code, @MatchEx, @MatchIndex, @GroupIndex, @ReplaceEx, @ReplaceStr, @varName, @Remark);
|
||||
SELECT idx, code, MatchEx, MatchIndex, GroupIndex, ReplaceEx, ReplaceStr, varName, Remark FROM K4EE_Component_Reel_CustRule WHERE (idx = SCOPE_IDENTITY())</CommandText>
|
||||
<Parameters>
|
||||
<Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@code" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="code" SourceColumnNullMapping="false" SourceVersion="Current" />
|
||||
<Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@MatchEx" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="MatchEx" SourceColumnNullMapping="false" SourceVersion="Current" />
|
||||
<Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@MatchIndex" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="MatchIndex" SourceColumnNullMapping="false" SourceVersion="Current" />
|
||||
<Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@GroupIndex" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="GroupIndex" SourceColumnNullMapping="false" SourceVersion="Current" />
|
||||
<Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@ReplaceEx" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="ReplaceEx" SourceColumnNullMapping="false" SourceVersion="Current" />
|
||||
<Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@ReplaceStr" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="ReplaceStr" SourceColumnNullMapping="false" SourceVersion="Current" />
|
||||
<Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@varName" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="varName" SourceColumnNullMapping="false" SourceVersion="Current" />
|
||||
<Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Remark" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Remark" SourceColumnNullMapping="false" SourceVersion="Current" />
|
||||
</Parameters>
|
||||
</DbCommand>
|
||||
</InsertCommand>
|
||||
<SelectCommand>
|
||||
<DbCommand CommandType="Text" ModifiedByUser="false">
|
||||
<CommandText>SELECT idx, code, MatchEx, MatchIndex, GroupIndex, ReplaceEx, ReplaceStr, varName, Remark
|
||||
FROM K4EE_Component_Reel_CustRule</CommandText>
|
||||
<Parameters />
|
||||
</DbCommand>
|
||||
</SelectCommand>
|
||||
<UpdateCommand>
|
||||
<DbCommand CommandType="Text" ModifiedByUser="true">
|
||||
<CommandText>UPDATE [K4EE_Component_Reel_CustRule] SET [code] = @code, [pre] = @pre, [pos] = @pos, [len] = @len, [exp] = @exp WHERE (([code] = @Original_code) AND ((@IsNull_pre = 1 AND [pre] IS NULL) OR ([pre] = @Original_pre)) AND ((@IsNull_pos = 1 AND [pos] IS NULL) OR ([pos] = @Original_pos)) AND ((@IsNull_len = 1 AND [len] IS NULL) OR ([len] = @Original_len)) AND ((@IsNull_exp = 1 AND [exp] IS NULL) OR ([exp] = @Original_exp)));
|
||||
SELECT code, pre, pos, len, exp FROM K4EE_Component_Reel_CustRule WHERE (code = @code)</CommandText>
|
||||
<Parameters>
|
||||
<Parameter AllowDbNull="false" AutogeneratedName="code" ColumnName="code" DataSourceName="WMS.dbo.K4EE_Component_Reel_CustRule" DataTypeServer="varchar(10)" DbType="AnsiString" Direction="Input" ParameterName="@code" Precision="0" ProviderType="VarChar" Scale="0" Size="10" SourceColumn="code" SourceColumnNullMapping="false" SourceVersion="Current" />
|
||||
<Parameter AllowDbNull="false" AutogeneratedName="pre" ColumnName="pre" DataSourceName="" DataTypeServer="unknown" DbType="Object" Direction="Input" ParameterName="@pre" Precision="0" Scale="0" Size="1024" SourceColumn="pre" SourceColumnNullMapping="false" SourceVersion="Current" />
|
||||
<Parameter AllowDbNull="false" AutogeneratedName="pos" ColumnName="pos" DataSourceName="" DataTypeServer="unknown" DbType="Object" Direction="Input" ParameterName="@pos" Precision="0" Scale="0" Size="1024" SourceColumn="pos" SourceColumnNullMapping="false" SourceVersion="Current" />
|
||||
<Parameter AllowDbNull="false" AutogeneratedName="len" ColumnName="len" DataSourceName="" DataTypeServer="unknown" DbType="Object" Direction="Input" ParameterName="@len" Precision="0" Scale="0" Size="1024" SourceColumn="len" SourceColumnNullMapping="false" SourceVersion="Current" />
|
||||
<Parameter AllowDbNull="false" AutogeneratedName="exp" ColumnName="exp" DataSourceName="" DataTypeServer="unknown" DbType="Object" Direction="Input" ParameterName="@exp" Precision="0" Scale="0" Size="1024" SourceColumn="exp" SourceColumnNullMapping="false" SourceVersion="Current" />
|
||||
<Parameter AllowDbNull="false" AutogeneratedName="Original_code" ColumnName="code" DataSourceName="WMS.dbo.K4EE_Component_Reel_CustRule" DataTypeServer="varchar(10)" DbType="AnsiString" Direction="Input" ParameterName="@Original_code" Precision="0" ProviderType="VarChar" Scale="0" Size="10" SourceColumn="code" SourceColumnNullMapping="false" SourceVersion="Original" />
|
||||
<Parameter AllowDbNull="true" AutogeneratedName="IsNull_pre" ColumnName="" DataSourceName="" DataTypeServer="int" DbType="Int32" Direction="Input" ParameterName="@IsNull_pre" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="pre" SourceColumnNullMapping="true" SourceVersion="Original" />
|
||||
<Parameter AllowDbNull="false" AutogeneratedName="Original_pre" ColumnName="pre" DataSourceName="" DataTypeServer="unknown" DbType="Object" Direction="Input" ParameterName="@Original_pre" Precision="0" Scale="0" Size="1024" SourceColumn="pre" SourceColumnNullMapping="false" SourceVersion="Original" />
|
||||
<Parameter AllowDbNull="true" AutogeneratedName="IsNull_pos" ColumnName="" DataSourceName="" DataTypeServer="int" DbType="Int32" Direction="Input" ParameterName="@IsNull_pos" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="pos" SourceColumnNullMapping="true" SourceVersion="Original" />
|
||||
<Parameter AllowDbNull="false" AutogeneratedName="Original_pos" ColumnName="pos" DataSourceName="" DataTypeServer="unknown" DbType="Object" Direction="Input" ParameterName="@Original_pos" Precision="0" Scale="0" Size="1024" SourceColumn="pos" SourceColumnNullMapping="false" SourceVersion="Original" />
|
||||
<Parameter AllowDbNull="true" AutogeneratedName="IsNull_len" ColumnName="" DataSourceName="" DataTypeServer="int" DbType="Int32" Direction="Input" ParameterName="@IsNull_len" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="len" SourceColumnNullMapping="true" SourceVersion="Original" />
|
||||
<Parameter AllowDbNull="false" AutogeneratedName="Original_len" ColumnName="len" DataSourceName="" DataTypeServer="unknown" DbType="Object" Direction="Input" ParameterName="@Original_len" Precision="0" Scale="0" Size="1024" SourceColumn="len" SourceColumnNullMapping="false" SourceVersion="Original" />
|
||||
<Parameter AllowDbNull="true" AutogeneratedName="IsNull_exp" ColumnName="" DataSourceName="" DataTypeServer="int" DbType="Int32" Direction="Input" ParameterName="@IsNull_exp" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="exp" SourceColumnNullMapping="true" SourceVersion="Original" />
|
||||
<Parameter AllowDbNull="false" AutogeneratedName="Original_exp" ColumnName="exp" DataSourceName="" DataTypeServer="unknown" DbType="Object" Direction="Input" ParameterName="@Original_exp" Precision="0" Scale="0" Size="1024" SourceColumn="exp" SourceColumnNullMapping="false" SourceVersion="Original" />
|
||||
</Parameters>
|
||||
</DbCommand>
|
||||
</UpdateCommand>
|
||||
</DbSource>
|
||||
</MainSource>
|
||||
<Mappings>
|
||||
<Mapping SourceColumn="code" DataSetColumn="code" />
|
||||
<Mapping SourceColumn="idx" DataSetColumn="idx" />
|
||||
<Mapping SourceColumn="MatchEx" DataSetColumn="MatchEx" />
|
||||
<Mapping SourceColumn="MatchIndex" DataSetColumn="MatchIndex" />
|
||||
<Mapping SourceColumn="GroupIndex" DataSetColumn="GroupIndex" />
|
||||
<Mapping SourceColumn="ReplaceEx" DataSetColumn="ReplaceEx" />
|
||||
<Mapping SourceColumn="ReplaceStr" DataSetColumn="ReplaceStr" />
|
||||
<Mapping SourceColumn="varName" DataSetColumn="varName" />
|
||||
<Mapping SourceColumn="Remark" DataSetColumn="Remark" />
|
||||
</Mappings>
|
||||
<Sources />
|
||||
</TableAdapter>
|
||||
</Tables>
|
||||
<Sources />
|
||||
</DataSource>
|
||||
</xs:appinfo>
|
||||
</xs:annotation>
|
||||
<xs:element name="DSList" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:Generator_UserDSName="DSList" msprop:EnableTableAdapterManager="true" msprop:Generator_DataSetName="DSList">
|
||||
<xs:complexType>
|
||||
<xs:choice minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:element name="Supply" msprop:Generator_RowEvHandlerName="SupplyRowChangeEventHandler" msprop:Generator_RowDeletedName="SupplyRowDeleted" msprop:Generator_RowDeletingName="SupplyRowDeleting" msprop:Generator_RowEvArgName="SupplyRowChangeEvent" msprop:Generator_TablePropName="Supply" msprop:Generator_RowChangedName="SupplyRowChanged" msprop:Generator_UserTableName="Supply" msprop:Generator_RowChangingName="SupplyRowChanging" msprop:Generator_RowClassName="SupplyRow" msprop:Generator_TableClassName="SupplyDataTable" msprop:Generator_TableVarName="tableSupply">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="TITLE" msprop:Generator_ColumnPropNameInTable="TITLEColumn" msprop:Generator_ColumnPropNameInRow="TITLE" msprop:Generator_UserColumnName="TITLE" msprop:Generator_ColumnVarNameInTable="columnTITLE" type="xs:string" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="SIDConvert" msprop:Generator_RowEvHandlerName="SIDConvertRowChangeEventHandler" msprop:Generator_RowDeletedName="SIDConvertRowDeleted" msprop:Generator_RowDeletingName="SIDConvertRowDeleting" msprop:Generator_RowEvArgName="SIDConvertRowChangeEvent" msprop:Generator_TablePropName="SIDConvert" msprop:Generator_RowChangedName="SIDConvertRowChanged" msprop:Generator_UserTableName="SIDConvert" msprop:Generator_RowChangingName="SIDConvertRowChanging" msprop:Generator_RowClassName="SIDConvertRow" msprop:Generator_TableClassName="SIDConvertDataTable" msprop:Generator_TableVarName="tableSIDConvert">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="SID101" msprop:Generator_ColumnPropNameInTable="SID101Column" msprop:Generator_ColumnPropNameInRow="SID101" msprop:Generator_UserColumnName="SID101" msprop:Generator_ColumnVarNameInTable="columnSID101" type="xs:string" />
|
||||
<xs:element name="SID103" msprop:Generator_ColumnPropNameInTable="SID103Column" msprop:Generator_ColumnPropNameInRow="SID103" msprop:Generator_UserColumnName="SID103" msprop:Generator_ColumnVarNameInTable="columnSID103" type="xs:string" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="K4EE_Component_Reel_CustRule" msprop:Generator_RowEvHandlerName="K4EE_Component_Reel_CustRuleRowChangeEventHandler" msprop:Generator_RowDeletedName="K4EE_Component_Reel_CustRuleRowDeleted" msprop:Generator_RowDeletingName="K4EE_Component_Reel_CustRuleRowDeleting" msprop:Generator_RowEvArgName="K4EE_Component_Reel_CustRuleRowChangeEvent" msprop:Generator_TablePropName="K4EE_Component_Reel_CustRule" msprop:Generator_RowChangedName="K4EE_Component_Reel_CustRuleRowChanged" msprop:Generator_UserTableName="K4EE_Component_Reel_CustRule" msprop:Generator_RowChangingName="K4EE_Component_Reel_CustRuleRowChanging" msprop:Generator_RowClassName="K4EE_Component_Reel_CustRuleRow" msprop:Generator_TableClassName="K4EE_Component_Reel_CustRuleDataTable" msprop:Generator_TableVarName="tableK4EE_Component_Reel_CustRule">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="code" msprop:Generator_ColumnPropNameInTable="codeColumn" msprop:Generator_ColumnPropNameInRow="code" msprop:Generator_UserColumnName="code" msprop:Generator_ColumnVarNameInTable="columncode">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="10" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="idx" msdata:ReadOnly="true" msdata:AutoIncrement="true" msdata:AutoIncrementSeed="-1" msdata:AutoIncrementStep="-1" msprop:Generator_ColumnPropNameInTable="idxColumn" msprop:Generator_ColumnPropNameInRow="idx" msprop:Generator_UserColumnName="idx" msprop:Generator_ColumnVarNameInTable="columnidx" type="xs:int" />
|
||||
<xs:element name="MatchEx" msprop:Generator_ColumnPropNameInTable="MatchExColumn" msprop:Generator_ColumnPropNameInRow="MatchEx" msprop:Generator_UserColumnName="MatchEx" msprop:Generator_ColumnVarNameInTable="columnMatchEx" minOccurs="0">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="200" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="MatchIndex" msprop:Generator_ColumnPropNameInTable="MatchIndexColumn" msprop:Generator_ColumnPropNameInRow="MatchIndex" msprop:Generator_UserColumnName="MatchIndex" msprop:Generator_ColumnVarNameInTable="columnMatchIndex" type="xs:int" minOccurs="0" />
|
||||
<xs:element name="GroupIndex" msprop:Generator_ColumnPropNameInTable="GroupIndexColumn" msprop:Generator_ColumnPropNameInRow="GroupIndex" msprop:Generator_UserColumnName="GroupIndex" msprop:Generator_ColumnVarNameInTable="columnGroupIndex" type="xs:int" minOccurs="0" />
|
||||
<xs:element name="ReplaceEx" msprop:Generator_ColumnPropNameInTable="ReplaceExColumn" msprop:Generator_ColumnPropNameInRow="ReplaceEx" msprop:Generator_UserColumnName="ReplaceEx" msprop:Generator_ColumnVarNameInTable="columnReplaceEx" minOccurs="0">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="200" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="ReplaceStr" msprop:Generator_ColumnPropNameInTable="ReplaceStrColumn" msprop:Generator_ColumnPropNameInRow="ReplaceStr" msprop:Generator_UserColumnName="ReplaceStr" msprop:Generator_ColumnVarNameInTable="columnReplaceStr" minOccurs="0">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="200" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="varName" msprop:Generator_ColumnPropNameInTable="varNameColumn" msprop:Generator_ColumnPropNameInRow="varName" msprop:Generator_UserColumnName="varName" msprop:Generator_ColumnVarNameInTable="columnvarName" minOccurs="0">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="50" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="Remark" msprop:Generator_ColumnPropNameInTable="RemarkColumn" msprop:Generator_ColumnPropNameInRow="Remark" msprop:Generator_UserColumnName="Remark" msprop:Generator_ColumnVarNameInTable="columnRemark" minOccurs="0">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="255" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:choice>
|
||||
</xs:complexType>
|
||||
<xs:unique name="Constraint1" msdata:PrimaryKey="true">
|
||||
<xs:selector xpath=".//mstns:Supply" />
|
||||
<xs:field xpath="mstns:TITLE" />
|
||||
</xs:unique>
|
||||
<xs:unique name="SIDConvert_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
|
||||
<xs:selector xpath=".//mstns:SIDConvert" />
|
||||
<xs:field xpath="mstns:SID101" />
|
||||
<xs:field xpath="mstns:SID103" />
|
||||
</xs:unique>
|
||||
<xs:unique name="K4EE_Component_Reel_CustRule_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
|
||||
<xs:selector xpath=".//mstns:K4EE_Component_Reel_CustRule" />
|
||||
<xs:field xpath="mstns:code" />
|
||||
</xs:unique>
|
||||
<xs:unique name="Constraint2">
|
||||
<xs:selector xpath=".//mstns:K4EE_Component_Reel_CustRule" />
|
||||
<xs:field xpath="mstns:idx" />
|
||||
</xs:unique>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
14
Handler/Project/DSList.xss
Normal file
14
Handler/Project/DSList.xss
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--<autogenerated>
|
||||
This code was generated by a tool to store the dataset designer's layout information.
|
||||
Changes to this file may cause incorrect behavior and will be lost if
|
||||
the code is regenerated.
|
||||
</autogenerated>-->
|
||||
<DiagramLayout xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ex:showrelationlabel="False" ViewPortX="0" ViewPortY="28" xmlns:ex="urn:schemas-microsoft-com:xml-msdatasource-layout-extended" xmlns="urn:schemas-microsoft-com:xml-msdatasource-layout">
|
||||
<Shapes>
|
||||
<Shape ID="DesignTable:K4EE_Component_Reel_CustRule" ZOrder="1" X="511" Y="141" Height="172" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="121" />
|
||||
<Shape ID="DesignTable:Supply" ZOrder="3" X="120" Y="87" Height="48" Width="150" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="44" />
|
||||
<Shape ID="DesignTable:SIDConvert" ZOrder="2" X="316" Y="82" Height="67" Width="150" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="63" />
|
||||
</Shapes>
|
||||
<Connectors />
|
||||
</DiagramLayout>
|
||||
1099
Handler/Project/DSSetup.Designer.cs
generated
Normal file
1099
Handler/Project/DSSetup.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
9
Handler/Project/DSSetup.xsc
Normal file
9
Handler/Project/DSSetup.xsc
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--<autogenerated>
|
||||
This code was generated by a tool.
|
||||
Changes to this file may cause incorrect behavior and will be lost if
|
||||
the code is regenerated.
|
||||
</autogenerated>-->
|
||||
<DataSetUISetting Version="1.00" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
|
||||
<TableUISettings />
|
||||
</DataSetUISetting>
|
||||
41
Handler/Project/DSSetup.xsd
Normal file
41
Handler/Project/DSSetup.xsd
Normal file
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xs:schema id="DSSetup" targetNamespace="http://tempuri.org/DSSetup.xsd" xmlns:mstns="http://tempuri.org/DSSetup.xsd" xmlns="http://tempuri.org/DSSetup.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" attributeFormDefault="qualified" elementFormDefault="qualified">
|
||||
<xs:annotation>
|
||||
<xs:appinfo source="urn:schemas-microsoft-com:xml-msdatasource">
|
||||
<DataSource DefaultConnectionIndex="0" FunctionsComponentName="QueriesTableAdapter" Modifier="AutoLayout, AnsiClass, Class, Public" SchemaSerializationMode="IncludeSchema" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
|
||||
<Connections />
|
||||
<Tables />
|
||||
<Sources />
|
||||
</DataSource>
|
||||
</xs:appinfo>
|
||||
</xs:annotation>
|
||||
<xs:element name="DSSetup" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:EnableTableAdapterManager="true" msprop:Generator_DataSetName="DSSetup" msprop:Generator_UserDSName="DSSetup">
|
||||
<xs:complexType>
|
||||
<xs:choice minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:element name="MotionParam" msprop:Generator_TableClassName="MotionParamDataTable" msprop:Generator_TableVarName="tableMotionParam" msprop:Generator_TablePropName="MotionParam" msprop:Generator_RowDeletingName="MotionParamRowDeleting" msprop:Generator_RowChangingName="MotionParamRowChanging" msprop:Generator_RowEvHandlerName="MotionParamRowChangeEventHandler" msprop:Generator_RowDeletedName="MotionParamRowDeleted" msprop:Generator_UserTableName="MotionParam" msprop:Generator_RowChangedName="MotionParamRowChanged" msprop:Generator_RowEvArgName="MotionParamRowChangeEvent" msprop:Generator_RowClassName="MotionParamRow">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="idx" msprop:Generator_ColumnVarNameInTable="columnidx" msprop:Generator_ColumnPropNameInRow="idx" msprop:nullValue="0" msprop:Generator_ColumnPropNameInTable="idxColumn" msprop:Generator_UserColumnName="idx" type="xs:short" />
|
||||
<xs:element name="Enable" msprop:Generator_ColumnVarNameInTable="columnEnable" msprop:Generator_ColumnPropNameInRow="Enable" msprop:nullValue="1" msprop:Generator_ColumnPropNameInTable="EnableColumn" msprop:Generator_UserColumnName="Enable" type="xs:boolean" minOccurs="0" />
|
||||
<xs:element name="UseOrigin" msprop:Generator_ColumnVarNameInTable="columnUseOrigin" msprop:Generator_ColumnPropNameInRow="UseOrigin" msprop:nullValue="1" msprop:Generator_ColumnPropNameInTable="UseOriginColumn" msprop:Generator_UserColumnName="UseOrigin" type="xs:boolean" minOccurs="0" />
|
||||
<xs:element name="UseEStop" msprop:Generator_ColumnVarNameInTable="columnUseEStop" msprop:Generator_ColumnPropNameInRow="UseEStop" msprop:nullValue="1" msprop:Generator_ColumnPropNameInTable="UseEStopColumn" msprop:Generator_UserColumnName="UseEStop" type="xs:boolean" minOccurs="0" />
|
||||
<xs:element name="HomeAcc" msprop:Generator_ColumnVarNameInTable="columnHomeAcc" msprop:Generator_ColumnPropNameInRow="HomeAcc" msprop:nullValue="100" msprop:Generator_ColumnPropNameInTable="HomeAccColumn" msprop:Generator_UserColumnName="HomeAcc" type="xs:double" minOccurs="0" />
|
||||
<xs:element name="HomeDcc" msprop:Generator_ColumnVarNameInTable="columnHomeDcc" msprop:Generator_ColumnPropNameInRow="HomeDcc" msprop:nullValue="50" msprop:Generator_ColumnPropNameInTable="HomeDccColumn" msprop:Generator_UserColumnName="HomeDcc" type="xs:double" minOccurs="0" />
|
||||
<xs:element name="HomeHigh" msprop:Generator_ColumnVarNameInTable="columnHomeHigh" msprop:Generator_ColumnPropNameInRow="HomeHigh" msprop:nullValue="100" msprop:Generator_ColumnPropNameInTable="HomeHighColumn" msprop:Generator_UserColumnName="HomeHigh" type="xs:double" minOccurs="0" />
|
||||
<xs:element name="HomeLow" msprop:Generator_ColumnVarNameInTable="columnHomeLow" msprop:Generator_ColumnPropNameInRow="HomeLow" msprop:nullValue="50" msprop:Generator_ColumnPropNameInTable="HomeLowColumn" msprop:Generator_UserColumnName="HomeLow" type="xs:double" minOccurs="0" />
|
||||
<xs:element name="SWLimitP" msprop:Generator_ColumnVarNameInTable="columnSWLimitP" msprop:Generator_ColumnPropNameInRow="SWLimitP" msprop:nullValue="0" msprop:Generator_ColumnPropNameInTable="SWLimitPColumn" msprop:Generator_UserColumnName="SWLimitP" type="xs:double" minOccurs="0" />
|
||||
<xs:element name="Title" msprop:Generator_ColumnVarNameInTable="columnTitle" msprop:Generator_ColumnPropNameInRow="Title" msprop:nullValue="_empty" msprop:Generator_ColumnPropNameInTable="TitleColumn" msprop:Generator_UserColumnName="Title" type="xs:string" minOccurs="0" />
|
||||
<xs:element name="InpositionAccr" msprop:Generator_ColumnVarNameInTable="columnInpositionAccr" msprop:Generator_ColumnPropNameInRow="InpositionAccr" msprop:nullValue="0.1" msprop:Generator_ColumnPropNameInTable="InpositionAccrColumn" msprop:Generator_UserColumnName="InpositionAccr" type="xs:float" minOccurs="0" />
|
||||
<xs:element name="MaxSpeed" msprop:Generator_ColumnVarNameInTable="columnMaxSpeed" msprop:Generator_ColumnPropNameInRow="MaxSpeed" msprop:nullValue="0" msprop:Generator_ColumnPropNameInTable="MaxSpeedColumn" msprop:Generator_UserColumnName="MaxSpeed" type="xs:double" minOccurs="0" />
|
||||
<xs:element name="MaxAcc" msprop:Generator_ColumnVarNameInTable="columnMaxAcc" msprop:Generator_ColumnPropNameInRow="MaxAcc" msprop:nullValue="0" msprop:Generator_ColumnPropNameInTable="MaxAccColumn" msprop:Generator_UserColumnName="MaxAcc" type="xs:double" minOccurs="0" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:choice>
|
||||
</xs:complexType>
|
||||
<xs:unique name="Constraint1" msdata:PrimaryKey="true">
|
||||
<xs:selector xpath=".//mstns:MotionParam" />
|
||||
<xs:field xpath="mstns:idx" />
|
||||
</xs:unique>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
12
Handler/Project/DSSetup.xss
Normal file
12
Handler/Project/DSSetup.xss
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--<autogenerated>
|
||||
This code was generated by a tool to store the dataset designer's layout information.
|
||||
Changes to this file may cause incorrect behavior and will be lost if
|
||||
the code is regenerated.
|
||||
</autogenerated>-->
|
||||
<DiagramLayout xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ex:showrelationlabel="False" ViewPortX="-10" ViewPortY="-10" xmlns:ex="urn:schemas-microsoft-com:xml-msdatasource-layout-extended" xmlns="urn:schemas-microsoft-com:xml-msdatasource-layout">
|
||||
<Shapes>
|
||||
<Shape ID="DesignTable:MotionParam" ZOrder="1" X="198" Y="21" Height="257" Width="150" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="86" />
|
||||
</Shapes>
|
||||
<Connectors />
|
||||
</DiagramLayout>
|
||||
23
Handler/Project/DataSet1.cs
Normal file
23
Handler/Project/DataSet1.cs
Normal file
@@ -0,0 +1,23 @@
|
||||
namespace Project
|
||||
{
|
||||
|
||||
|
||||
public partial class DataSet1
|
||||
{
|
||||
partial class ResultDataDataTable
|
||||
{
|
||||
}
|
||||
|
||||
partial class OPModelDataTable
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
namespace Project.DataSet1TableAdapters {
|
||||
|
||||
|
||||
public partial class K4EE_Component_Reel_RegExRuleTableAdapter {
|
||||
}
|
||||
}
|
||||
9
Handler/Project/DataSet1.xsc
Normal file
9
Handler/Project/DataSet1.xsc
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--<autogenerated>
|
||||
This code was generated by a tool.
|
||||
Changes to this file may cause incorrect behavior and will be lost if
|
||||
the code is regenerated.
|
||||
</autogenerated>-->
|
||||
<DataSetUISetting Version="1.00" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
|
||||
<TableUISettings />
|
||||
</DataSetUISetting>
|
||||
2009
Handler/Project/DataSet1.xsd
Normal file
2009
Handler/Project/DataSet1.xsd
Normal file
File diff suppressed because it is too large
Load Diff
36
Handler/Project/DataSet1.xss
Normal file
36
Handler/Project/DataSet1.xss
Normal file
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--<autogenerated>
|
||||
This code was generated by a tool to store the dataset designer's layout information.
|
||||
Changes to this file may cause incorrect behavior and will be lost if
|
||||
the code is regenerated.
|
||||
</autogenerated>-->
|
||||
<DiagramLayout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ex:showrelationlabel="False" ViewPortX="138" ViewPortY="125" xmlns:ex="urn:schemas-microsoft-com:xml-msdatasource-layout-extended" xmlns="urn:schemas-microsoft-com:xml-msdatasource-layout">
|
||||
<Shapes>
|
||||
<Shape ID="DesignTable:K4EE_Component_Reel_Result" ZOrder="22" X="256" Y="216" Height="533" Width="313" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="292" />
|
||||
<Shape ID="DesignTable:K4EE_Component_Reel_RegExRule" ZOrder="1" X="989" Y="120" Height="343" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="216" />
|
||||
<Shape ID="DesignTable:K4EE_Component_Reel_SID_Convert" ZOrder="17" X="523" Y="187" Height="191" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="140" />
|
||||
<Shape ID="DesignTable:K4EE_Component_Reel_SID_Information" ZOrder="20" X="510" Y="176" Height="381" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="197" SplitterPosition="254" />
|
||||
<Shape ID="DesignTable:K4EE_Component_Reel_PreSet" ZOrder="2" X="622" Y="154" Height="305" Width="287" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="254" />
|
||||
<Shape ID="DesignTable:K4EE_Component_Reel_CustInfo" ZOrder="5" X="658" Y="45" Height="115" Width="299" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="64" />
|
||||
<Shape ID="DesignTable:ResultSummary" ZOrder="18" X="-124" Y="28" Height="153" Width="293" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="102" />
|
||||
<Shape ID="DesignTable:K4EE_Component_Reel_Print_Information" ZOrder="16" X="560" Y="83" Height="210" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="140" />
|
||||
<Shape ID="DesignTable:CustCodeList" ZOrder="19" X="932" Y="62" Height="96" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="46" />
|
||||
<Shape ID="DesignTable:SidinfoCustGroup" ZOrder="15" X="747" Y="496" Height="96" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="46" />
|
||||
<Shape ID="DesignTable:Users" ZOrder="8" X="791" Y="379" Height="87" Width="150" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="83" />
|
||||
<Shape ID="DesignTable:MCModel" ZOrder="10" X="919" Y="476" Height="410" Width="150" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="406" />
|
||||
<Shape ID="DesignTable:language" ZOrder="24" X="912" Y="519" Height="239" Width="134" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="235" />
|
||||
<Shape ID="DesignTable:OPModel" ZOrder="3" X="1026" Y="230" Height="486" Width="152" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="482" />
|
||||
<Shape ID="DesignTable:BCDData" ZOrder="11" X="877" Y="455" Height="163" Width="150" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="159" />
|
||||
<Shape ID="DesignTable:UserSID" ZOrder="25" X="872" Y="524" Height="68" Width="150" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="64" />
|
||||
<Shape ID="DesignTable:MailFormat" ZOrder="21" X="806" Y="428" Height="49" Width="150" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="45" />
|
||||
<Shape ID="DesignTable:MailRecipient" ZOrder="6" X="860" Y="495" Height="68" Width="150" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="64" />
|
||||
<Shape ID="DesignTable:SIDHistory" ZOrder="13" X="841" Y="350" Height="182" Width="150" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="178" />
|
||||
<Shape ID="DesignTable:InputDescription" ZOrder="12" X="744" Y="350" Height="143" Width="164" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="139" />
|
||||
<Shape ID="DesignTable:OutputDescription" ZOrder="7" X="864" Y="466" Height="182" Width="174" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="178" />
|
||||
<Shape ID="DesignTable:UserTable" ZOrder="14" X="734" Y="246" Height="86" Width="150" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="82" />
|
||||
<Shape ID="DesignTable:ErrorDescription" ZOrder="9" X="831" Y="439" Height="105" Width="161" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="101" />
|
||||
<Shape ID="DesignTable:ModelList" ZOrder="23" X="901" Y="509" Height="48" Width="150" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="44" />
|
||||
<Shape ID="DesignSources:QueriesTableAdapter" ZOrder="4" X="745" Y="74" Height="315" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="311" />
|
||||
</Shapes>
|
||||
<Connectors />
|
||||
</DiagramLayout>
|
||||
22727
Handler/Project/DataSet11.Designer.cs
generated
Normal file
22727
Handler/Project/DataSet11.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
479
Handler/Project/Device/KeyenceBarcode.cs
Normal file
479
Handler/Project/Device/KeyenceBarcode.cs
Normal file
@@ -0,0 +1,479 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Runtime.InteropServices;
|
||||
using AR;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace Project.Device
|
||||
{
|
||||
public class KeyenceBarcode : IDisposable
|
||||
{
|
||||
public string IP { get; set; }
|
||||
public int Port { get; set; }
|
||||
private Winsock_Orcas.Winsock ws;
|
||||
public event EventHandler<RecvDataEvent> BarcodeRecv;
|
||||
public event EventHandler<RecvImageEvent> ImageRecv;
|
||||
RecvDataEvent LastData = null;
|
||||
RecvImageEvent LastImage = null;
|
||||
|
||||
public Boolean IsTriggerOn { get; set; } = false;
|
||||
private DateTime LastTrigOnTime = DateTime.Now;
|
||||
private System.Threading.Thread thliveimage = null;
|
||||
public int LiveImagetDelay = 500;
|
||||
public bool disposed = false;
|
||||
bool bRunConnectionK = true;
|
||||
public string Tag { get; set; }
|
||||
|
||||
|
||||
public string baseZPL { get; set; }
|
||||
|
||||
public class RecvDataEvent : EventArgs
|
||||
{
|
||||
public string RawData { get; set; }
|
||||
public RecvDataEvent(string rawdata)
|
||||
{
|
||||
this.RawData = rawdata;
|
||||
}
|
||||
}
|
||||
public class RecvImageEvent : EventArgs
|
||||
{
|
||||
public Image Image { get; set; }
|
||||
public RecvImageEvent(Image rawdata)
|
||||
{
|
||||
this.Image = rawdata;
|
||||
}
|
||||
}
|
||||
|
||||
public KeyenceBarcode(string ip = "192.168.100.100", int port = 9004)
|
||||
{
|
||||
this.IP = ip;
|
||||
this.Port = port;
|
||||
ws = new Winsock_Orcas.Winsock();
|
||||
ws.LegacySupport = true;
|
||||
ws.DataArrival += Ws_DataArrival;
|
||||
ws.Connected += Ws_Connected;
|
||||
thliveimage = new Thread(new ThreadStart(GetLiveImage));
|
||||
thliveimage.IsBackground = false;
|
||||
thliveimage.Start();
|
||||
Console.WriteLine($"{ip} / Port:{port}");
|
||||
}
|
||||
|
||||
~KeyenceBarcode()
|
||||
{
|
||||
Dispose(disposing: false);
|
||||
}
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(disposing: true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
#region "Image Utility"
|
||||
|
||||
/// <summary>
|
||||
/// 8bpp 이미지의 팔레트를 설정합니다
|
||||
/// </summary>
|
||||
/// <param name="bmp"></param>
|
||||
public void UpdateGrayPallete(ref Bitmap bmp)
|
||||
{
|
||||
if (bmp.PixelFormat == System.Drawing.Imaging.PixelFormat.Format8bppIndexed)
|
||||
{
|
||||
System.Drawing.Imaging.ColorPalette pal = bmp.Palette;
|
||||
for (int i = 0; i < 256; i++)
|
||||
{
|
||||
pal.Entries[i] = Color.FromArgb(i, i, i);
|
||||
}
|
||||
bmp.Palette = pal;
|
||||
}
|
||||
}
|
||||
public void GetImagePtr(Bitmap bmp, out IntPtr ptr, out int stride)
|
||||
{
|
||||
stride = 0;
|
||||
ptr = IntPtr.Zero;
|
||||
try
|
||||
{
|
||||
BitmapData bmpdata = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, bmp.PixelFormat);
|
||||
ptr = bmpdata.Scan0;
|
||||
stride = bmpdata.Stride;
|
||||
bmp.UnlockBits(bmpdata);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsCompatible(Bitmap source, Bitmap target)
|
||||
{
|
||||
if (source == null) return false;
|
||||
try
|
||||
{
|
||||
if (source.Height != target.Height ||
|
||||
source.Width != target.Width ||
|
||||
source.PixelFormat != target.PixelFormat) return false;
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE("keyence compatiable : " + ex.Message);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
public bool IsCompatible(Bitmap source, int w, int h, PixelFormat pf)
|
||||
{
|
||||
if (source == null) return false;
|
||||
if (source.Height != h ||
|
||||
source.Width != w ||
|
||||
source.PixelFormat != pf) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public Bitmap CreateBitmap(int w, int h)
|
||||
{
|
||||
|
||||
Bitmap bmp = new Bitmap(w, h, PixelFormat.Format8bppIndexed);
|
||||
UpdateGrayPallete(ref bmp);
|
||||
return bmp;
|
||||
}
|
||||
|
||||
byte[] memorybuffer;
|
||||
public void UpdateBitmap(Bitmap source, Bitmap target)
|
||||
{
|
||||
if (source.Width < 10 || source.Height < 10) return;
|
||||
if (target == null || target.Width < 10 || target.Height < 10)
|
||||
{
|
||||
target = CreateBitmap(source.Width, source.Height);
|
||||
}
|
||||
|
||||
var bitmaperrcnt = AR.VAR.I32[eVarInt32.BitmapCompatErr];
|
||||
if (IsCompatible(source, target) == false)
|
||||
{
|
||||
PUB.log.AddE($"Keyence bitmap compatibility error Source:{source.Width}x{source.Height} => Target:{target.Width}x{target.Height}");
|
||||
|
||||
if (bitmaperrcnt > 5)
|
||||
{
|
||||
var o = target;
|
||||
target = CreateBitmap(source.Width, source.Height);
|
||||
if (o != null) o.Dispose();
|
||||
bitmaperrcnt = 0;
|
||||
}
|
||||
else AR.VAR.I32[eVarInt32.BitmapCompatErr] += 1;
|
||||
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bitmaperrcnt > 0)
|
||||
AR.VAR.I32[eVarInt32.BitmapCompatErr] = 0;
|
||||
}
|
||||
|
||||
//get image pointer
|
||||
BitmapData bmpdatas = source.LockBits(new Rectangle(0, 0, source.Width, source.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, source.PixelFormat);
|
||||
var ptrs = bmpdatas.Scan0;
|
||||
var strides = bmpdatas.Stride;
|
||||
|
||||
BitmapData bmpdatat = target.LockBits(new Rectangle(0, 0, target.Width, target.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, target.PixelFormat);
|
||||
var ptrt = bmpdatat.Scan0;
|
||||
var stridet = bmpdatat.Stride;
|
||||
|
||||
//read source data
|
||||
var sourcesize = Math.Abs(bmpdatas.Stride) * source.Height;
|
||||
if (memorybuffer == null || memorybuffer.Length != sourcesize)
|
||||
{
|
||||
memorybuffer = new byte[sourcesize];
|
||||
}
|
||||
|
||||
Marshal.Copy(ptrs, memorybuffer, 0, sourcesize);
|
||||
|
||||
//write target data
|
||||
Marshal.Copy(memorybuffer, 0, ptrt, sourcesize);
|
||||
|
||||
source.UnlockBits(bmpdatas);
|
||||
target.UnlockBits(bmpdatat);
|
||||
|
||||
}
|
||||
|
||||
public void UpdateBitmap(Bitmap target, byte[] buffer, int w, int h)
|
||||
{
|
||||
if (IsCompatible(target, w, h, target.PixelFormat) == false)
|
||||
{
|
||||
throw new Exception("cannot udate incompatible bitmap.");
|
||||
}
|
||||
|
||||
//get image pointer
|
||||
BitmapData bmpdata = target.LockBits(new Rectangle(0, 0, target.Width, target.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, target.PixelFormat);
|
||||
var ptr = bmpdata.Scan0;
|
||||
var stride = bmpdata.Stride;
|
||||
|
||||
|
||||
if (stride == w) //image x4
|
||||
{
|
||||
Marshal.Copy(buffer, 0, ptr, stride * h);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < target.Height; ++i)
|
||||
{
|
||||
Marshal.Copy(buffer, i * w, new IntPtr(ptr.ToInt64() + i * stride), w);
|
||||
}
|
||||
}
|
||||
|
||||
target.UnlockBits(bmpdata);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (!this.disposed)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
//dipose managed resources;
|
||||
bRunConnectionK = false;
|
||||
Trigger(false);
|
||||
ws.DataArrival -= Ws_DataArrival;
|
||||
ws.Connected -= Ws_Connected;
|
||||
Disconnect();
|
||||
if (thliveimage != null && thliveimage.IsAlive) thliveimage.Abort();
|
||||
}
|
||||
|
||||
//dispose unmmanged resources;
|
||||
}
|
||||
|
||||
disposed = true;
|
||||
}
|
||||
|
||||
void GetLiveImage()
|
||||
{
|
||||
while (bRunConnectionK)
|
||||
{
|
||||
if (IsConnect && IsTriggerOn)
|
||||
{
|
||||
var tagname = this.Tag;
|
||||
var img = GetImage();
|
||||
this.LastImage = new RecvImageEvent(img);
|
||||
ImageRecv?.Invoke(this, this.LastImage);
|
||||
System.Threading.Thread.Sleep(LiveImagetDelay);
|
||||
}
|
||||
else System.Threading.Thread.Sleep(1000);
|
||||
}
|
||||
}
|
||||
|
||||
private void Ws_Connected(object sender, Winsock_Orcas.WinsockConnectedEventArgs e)
|
||||
{
|
||||
this.Trigger(true);
|
||||
}
|
||||
|
||||
public void Connect()
|
||||
{
|
||||
if (this.ws.State == Winsock_Orcas.WinsockStates.Closed)
|
||||
{
|
||||
this.ws.RemoteHost = this.IP;
|
||||
this.ws.RemotePort = this.Port;
|
||||
this.ws.Connect();
|
||||
}
|
||||
|
||||
}
|
||||
public void Disconnect()
|
||||
{
|
||||
if (this.ws.State != Winsock_Orcas.WinsockStates.Closed)
|
||||
this.ws.Close();
|
||||
}
|
||||
|
||||
private void Ws_DataArrival(object sender, Winsock_Orcas.WinsockDataArrivalEventArgs e)
|
||||
{
|
||||
var data = ws.Get<string>();
|
||||
this.LastData = new RecvDataEvent(data);
|
||||
BarcodeRecv?.Invoke(this, LastData);
|
||||
}
|
||||
|
||||
public bool Reset()
|
||||
{
|
||||
//if (IsTriggerOn) return;
|
||||
string cmd = "RESET";
|
||||
if (IsConnect == false)
|
||||
{
|
||||
PUB.log.AddE("Keyence Not Connected : RESET");
|
||||
return false;
|
||||
}
|
||||
try
|
||||
{
|
||||
ws.Send(cmd + "\r");
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE(ex.Message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public bool BSave(int no)
|
||||
{
|
||||
var cmd = $"BSAVE,{no}";
|
||||
try
|
||||
{
|
||||
ws.Send(cmd + "\r");
|
||||
return true;
|
||||
}
|
||||
catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public bool BLoad(int no)
|
||||
{
|
||||
var cmd = $"BLOAD,{no}";
|
||||
try
|
||||
{
|
||||
ws.Send(cmd + "\r");
|
||||
return true;
|
||||
}
|
||||
catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public void Trigger(bool bOn)
|
||||
{
|
||||
//if (IsTriggerOn) return;
|
||||
string cmd = bOn ? "LON" : "LOFF";
|
||||
|
||||
if (bOn) LastTrigOnTime = DateTime.Now;
|
||||
|
||||
try
|
||||
{
|
||||
ws.Send(cmd + "\r");
|
||||
IsTriggerOn = bOn;
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
public void ExecCommand(string cmd)
|
||||
{
|
||||
try
|
||||
{
|
||||
ws.Send(cmd + "\r");
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
public bool IsConnect
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ws == null) return false;
|
||||
return ws.State == Winsock_Orcas.WinsockStates.Connected;
|
||||
}
|
||||
}
|
||||
|
||||
private bool readimage = false;
|
||||
ManualResetEvent mre = new ManualResetEvent(true);
|
||||
bool mreSetOK = true;
|
||||
bool mreResetOK = true;
|
||||
|
||||
public Image GetImage()
|
||||
{
|
||||
Image oimg = null;
|
||||
if (mreResetOK && mre.WaitOne(1000) == false)
|
||||
{
|
||||
mreResetOK = false;
|
||||
return oimg;
|
||||
}
|
||||
else
|
||||
{
|
||||
mreResetOK = mre.Reset();
|
||||
try
|
||||
{
|
||||
var url = $"http://{this.IP}/liveimage.jpg";
|
||||
var data = UTIL.DownloadImagefromUrl(url);
|
||||
var ms = new System.IO.MemoryStream(data);
|
||||
oimg = Image.FromStream(ms);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE("Keyence GetImage:" + ex.Message);
|
||||
}
|
||||
|
||||
if (mreResetOK)
|
||||
{
|
||||
mreSetOK = mre.Set();
|
||||
}
|
||||
}
|
||||
return oimg;
|
||||
}
|
||||
|
||||
public bool SaveImage(string fn)
|
||||
{
|
||||
var fi = new System.IO.FileInfo(fn);
|
||||
if (fi.Directory.Exists == false)
|
||||
fi.Directory.Create();
|
||||
|
||||
|
||||
|
||||
if (mreResetOK && mre.WaitOne(1000) == false)
|
||||
{
|
||||
mreResetOK = false;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
bool retval = false;
|
||||
mreResetOK = mre.Reset();
|
||||
try
|
||||
{
|
||||
var url = $"http://{this.IP}/liveimage.jpg";
|
||||
var data = UTIL.DownloadImagefromUrl(url);
|
||||
using (var ms = new System.IO.MemoryStream(data))
|
||||
{
|
||||
using (var oimg = Image.FromStream(ms))
|
||||
oimg.Save(fi.FullName);
|
||||
}
|
||||
retval = true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
}
|
||||
if (mreResetOK)
|
||||
mre.Set();
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
|
||||
public bool UpdateKeyenceImage(ref System.Windows.Forms.PictureBox pic)
|
||||
{
|
||||
bool retval = false;
|
||||
if (readimage)
|
||||
{
|
||||
PUB.log.AddAT("Keyence is receiving image, command not processed");
|
||||
}
|
||||
else
|
||||
{
|
||||
readimage = true;
|
||||
var oimg = pic.Image;
|
||||
|
||||
var newimage = GetImage();
|
||||
|
||||
pic.Image = newimage;
|
||||
retval = newimage != null;
|
||||
if (oimg != null) oimg.Dispose();
|
||||
|
||||
}
|
||||
readimage = false;
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
}
|
||||
127
Handler/Project/Device/SATOPrinter.cs
Normal file
127
Handler/Project/Device/SATOPrinter.cs
Normal file
@@ -0,0 +1,127 @@
|
||||
using AR;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Project.Device
|
||||
{
|
||||
public class SATOPrinter : arDev.RS232
|
||||
{
|
||||
public string LastPrintZPL = string.Empty;
|
||||
public string qrData = string.Empty;
|
||||
public string ZPLFileName { get; set; } = UTIL.MakePath("data","zpl.txt");
|
||||
public string baseZPL
|
||||
{
|
||||
get
|
||||
{
|
||||
var fi = new System.IO.FileInfo(ZPLFileName);
|
||||
if (fi.Exists == false || fi.Length == 0)
|
||||
{
|
||||
PUB.log.AddE($"{ZPLFileName} does not exist or has no data. Changed to default zpl.txt");
|
||||
fi = new System.IO.FileInfo( UTIL.MakePath("data", "zpl.txt"));
|
||||
if (fi.Exists == false) PUB.log.AddE("Print template file (zpl.txt) does not exist");
|
||||
}
|
||||
if (fi.Exists && fi.Length > 1)
|
||||
return System.IO.File.ReadAllText(fi.FullName, System.Text.Encoding.Default);
|
||||
else
|
||||
{
|
||||
PUB.log.AddAT("No ZPL file found, using ZPL code from settings");
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public SATOPrinter()
|
||||
{
|
||||
//this.baseZPL = Properties.Settings.Default.ZPL7;
|
||||
this.Terminal = eTerminal.CR;
|
||||
this.ReceiveData += SATOPrinter_ReceiveData;
|
||||
this.ReceiveData_Raw += SATOPrinter_ReceiveData_Raw;
|
||||
}
|
||||
|
||||
private void SATOPrinter_ReceiveData_Raw(object sender, ReceiveDataEventArgs e)
|
||||
{
|
||||
PUB.log.Add($"SATO Recv(RAW) : " + e.StrValue);
|
||||
}
|
||||
|
||||
private void SATOPrinter_ReceiveData(object sender, ReceiveDataEventArgs e)
|
||||
{
|
||||
PUB.log.Add($"SATO Recv : " + e.StrValue);
|
||||
}
|
||||
|
||||
public Boolean TestPrint(Boolean drawbox, string manu = "", string mfgdate = "")
|
||||
{
|
||||
var dtstr = DateTime.Now.ToShortDateString();
|
||||
var printcode = "103077807;Z577603504;105-35282-1105;15000;RC00004A219001W;20210612";
|
||||
var reel = new Class.Reel(printcode);
|
||||
//reel.id = "RLID" + DateTime.Now.ToString("MMHHmmssfff");
|
||||
reel.SID = "103000000";
|
||||
reel.PartNo = "PARTNO".PadRight(20, '0'); //20자리
|
||||
|
||||
if (mfgdate == "") reel.mfg = dtstr;
|
||||
else reel.mfg = mfgdate;
|
||||
|
||||
reel.venderLot = "LOT000000000";
|
||||
if (manu == "") reel.venderName = "ATK4EET1";
|
||||
else reel.venderName = manu;
|
||||
|
||||
reel.qty = 15000;
|
||||
var rlt = Print(reel, true, drawbox);
|
||||
var fi = new System.IO.FileInfo(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "temp_zpl.txt"));
|
||||
System.IO.File.WriteAllText(fi.FullName, LastPrintZPL, System.Text.Encoding.Default);
|
||||
return rlt;
|
||||
}
|
||||
|
||||
|
||||
public Boolean Print(Class.Reel reel, Boolean display1drid, Boolean drawOUtBox)
|
||||
{
|
||||
string prtData;
|
||||
prtData = makeZPL_210908(reel, drawOUtBox, out qrData);
|
||||
|
||||
return Print(prtData);
|
||||
}
|
||||
|
||||
public bool Print(string _zpl)
|
||||
{
|
||||
this.LastPrintZPL = _zpl;
|
||||
if (this.IsOpen() == false) return false;
|
||||
|
||||
try
|
||||
{
|
||||
this.Write(_zpl);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public string makeZPL_210908(Class.Reel reel, Boolean drawbox, out string qrData)
|
||||
{
|
||||
string m_strSend = string.Empty;
|
||||
qrData = string.Format("{0};{1};{2};{3};{4};{5};{6}", reel.SID, reel.venderLot, reel.venderName, reel.qty, reel.id, reel.mfg, reel.PartNo);
|
||||
|
||||
var reeid = reel.id;
|
||||
if (reeid.Length > 20)
|
||||
reeid = "..." + reeid.Substring(reeid.Length - 20);
|
||||
|
||||
m_strSend = this.baseZPL;
|
||||
m_strSend = m_strSend.Replace("{qrData}", qrData);
|
||||
m_strSend = m_strSend.Replace("{sid}", reel.SID);
|
||||
m_strSend = m_strSend.Replace("{lot}", reel.venderLot);
|
||||
m_strSend = m_strSend.Replace("{partnum}", reel.PartNo);
|
||||
m_strSend = m_strSend.Replace("{rid}", reeid);
|
||||
m_strSend = m_strSend.Replace("{qty}", reel.qty.ToString());
|
||||
m_strSend = m_strSend.Replace("{mfg}", reel.mfg);
|
||||
m_strSend = m_strSend.Replace("{supply}", reel.venderName);
|
||||
|
||||
//줄바꿈제거
|
||||
m_strSend = m_strSend.Replace("\r", "").Replace("\n", "");
|
||||
return m_strSend;
|
||||
}
|
||||
}
|
||||
}
|
||||
307
Handler/Project/Device/SATOPrinterAPI.cs
Normal file
307
Handler/Project/Device/SATOPrinterAPI.cs
Normal file
@@ -0,0 +1,307 @@
|
||||
using AR;
|
||||
using arCtl;
|
||||
using SATOPrinterAPI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Project.Device
|
||||
{
|
||||
public class SATOPrinterAPI : IDisposable
|
||||
{
|
||||
private bool disposed = false;
|
||||
Printer SATOPrinter = null;
|
||||
public string LastPrintZPL = string.Empty;
|
||||
public string qrData = string.Empty;
|
||||
public string PortName { get; set; }
|
||||
public int BaudRate { get; set; }
|
||||
|
||||
public string ZPLFileName { get; set; } = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Data", "zpl.txt");
|
||||
public string baseZPL
|
||||
{
|
||||
get
|
||||
{
|
||||
var fi = new System.IO.FileInfo(ZPLFileName);
|
||||
if (fi.Exists == false || fi.Length == 0)
|
||||
{
|
||||
PUB.log.AddE($"{ZPLFileName} does not exist or has no data. Changed to default zpl.txt");
|
||||
fi = new System.IO.FileInfo(UTIL.MakePath("Data", "zpl.txt"));
|
||||
if (fi.Exists == false) PUB.log.AddE("Print template file (zpl.txt) does not exist");
|
||||
}
|
||||
if (fi.Exists && fi.Length > 1)
|
||||
return System.IO.File.ReadAllText(fi.FullName, System.Text.Encoding.Default);
|
||||
else
|
||||
{
|
||||
PUB.log.AddAT("No ZPL file found, using ZPL code from settings");
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public SATOPrinterAPI()
|
||||
{
|
||||
SATOPrinter = new Printer();
|
||||
SATOPrinter.Timeout = 2500;
|
||||
SATOPrinter.Interface = Printer.InterfaceType.COM;
|
||||
SATOPrinter.ByteAvailable += SATOPrinter_ByteAvailable;
|
||||
}
|
||||
|
||||
|
||||
bool _isopen = false;
|
||||
public bool Open()
|
||||
{
|
||||
try
|
||||
{
|
||||
SATOPrinter.COMPort = this.PortName;
|
||||
SATOPrinter.COMSetting.Baudrate = this.BaudRate;
|
||||
SATOPrinter.Connect();
|
||||
_isopen = true;
|
||||
return _isopen;
|
||||
}
|
||||
catch(Exception ex) { _isopen = false; return false; }
|
||||
|
||||
}
|
||||
private string ControlCharReplace(string data)
|
||||
{
|
||||
Dictionary<string, char> chrList = ControlCharList();
|
||||
foreach (string key in chrList.Keys)
|
||||
{
|
||||
data = data.Replace(key, chrList[key].ToString());
|
||||
}
|
||||
return data;
|
||||
}
|
||||
private Dictionary<string, char> ControlCharList()
|
||||
{
|
||||
Dictionary<string, char> ctr = new Dictionary<string, char>();
|
||||
ctr.Add("[NUL]", '\u0000');
|
||||
ctr.Add("[SOH]", '\u0001');
|
||||
ctr.Add("[STX]", '\u0002');
|
||||
ctr.Add("[ETX]", '\u0003');
|
||||
ctr.Add("[EOT]", '\u0004');
|
||||
ctr.Add("[ENQ]", '\u0005');
|
||||
ctr.Add("[ACK]", '\u0006');
|
||||
ctr.Add("[BEL]", '\u0007');
|
||||
ctr.Add("[BS]", '\u0008');
|
||||
ctr.Add("[HT]", '\u0009');
|
||||
ctr.Add("[LF]", '\u000A');
|
||||
ctr.Add("[VT]", '\u000B');
|
||||
ctr.Add("[FF]", '\u000C');
|
||||
ctr.Add("[CR]", '\u000D');
|
||||
ctr.Add("[SO]", '\u000E');
|
||||
ctr.Add("[SI]", '\u000F');
|
||||
ctr.Add("[DLE]", '\u0010');
|
||||
ctr.Add("[DC1]", '\u0011');
|
||||
ctr.Add("[DC2]", '\u0012');
|
||||
ctr.Add("[DC3]", '\u0013');
|
||||
ctr.Add("[DC4]", '\u0014');
|
||||
ctr.Add("[NAK]", '\u0015');
|
||||
ctr.Add("[SYN]", '\u0016');
|
||||
ctr.Add("[ETB]", '\u0017');
|
||||
ctr.Add("[CAN]", '\u0018');
|
||||
ctr.Add("[EM]", '\u0019');
|
||||
ctr.Add("[SUB]", '\u001A');
|
||||
ctr.Add("[ESC]", '\u001B');
|
||||
ctr.Add("[FS]", '\u001C');
|
||||
ctr.Add("[GS]", '\u001D');
|
||||
ctr.Add("[RS]", '\u001E');
|
||||
ctr.Add("[US]", '\u001F');
|
||||
ctr.Add("[DEL]", '\u007F');
|
||||
return ctr;
|
||||
}
|
||||
|
||||
|
||||
private bool Query(string cmd, out string errmsg)
|
||||
{
|
||||
errmsg = string.Empty;
|
||||
if (string.IsNullOrEmpty(cmd))
|
||||
{
|
||||
errmsg = "No Command";
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
byte[] cmddata = Utils.StringToByteArray(ControlCharReplace(cmd));
|
||||
byte[] receiveData = SATOPrinter.Query(cmddata);
|
||||
|
||||
if (receiveData != null)
|
||||
{
|
||||
errmsg = ControlCharConvert(Utils.ByteArrayToString(receiveData));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
errmsg = ex.Message;
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
private string ControlCharConvert(string data)
|
||||
{
|
||||
Dictionary<char, string> chrList = ControlCharList().ToDictionary(x => x.Value, x => x.Key);
|
||||
foreach (char key in chrList.Keys)
|
||||
{
|
||||
data = data.Replace(key.ToString(), chrList[key]);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
~SATOPrinterAPI()
|
||||
{
|
||||
Dispose(disposing: false);
|
||||
}
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(disposing: true);
|
||||
// This object will be cleaned up by the Dispose method.
|
||||
// Therefore, you should call GC.SuppressFinalize to
|
||||
// take this object off the finalization queue
|
||||
// and prevent finalization code for this object
|
||||
// from executing a second time.
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
// Check to see if Dispose has already been called.
|
||||
if (!this.disposed)
|
||||
{
|
||||
// If disposing equals true, dispose all managed
|
||||
// and unmanaged resources.
|
||||
if (disposing)
|
||||
{
|
||||
// Dispose managed resources.
|
||||
//component.Dispose();
|
||||
|
||||
}
|
||||
SATOPrinter.Disconnect();
|
||||
// Note disposing has been done.
|
||||
disposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsOpen
|
||||
{
|
||||
get
|
||||
{
|
||||
|
||||
if (_isopen == false || SATOPrinter == null) return false;
|
||||
try
|
||||
{
|
||||
return true;// return SATOPrinter.IsBusy;
|
||||
//var prn = this.SATOPrinter.GetPrinterStatus();
|
||||
//return prn.IsOnline;
|
||||
}
|
||||
catch { return false; }
|
||||
|
||||
}
|
||||
}
|
||||
private void SATOPrinter_ByteAvailable(object sender, Printer.ByteAvailableEventArgs e)
|
||||
{
|
||||
byte[] rawData = e.Data;
|
||||
var msg = Utils.ByteArrayToString(rawData);// System.Text.Encoding.Default.GetString(rawData);
|
||||
PUB.log.Add($"SATO Recv : " + msg);
|
||||
}
|
||||
|
||||
|
||||
// private void SATOPrinter_ReceiveData_Raw(object sender, ReceiveDataEventArgs e)
|
||||
//{
|
||||
// PUB.log.Add($"SATO Recv(RAW) : " + e.StrValue);
|
||||
//}
|
||||
|
||||
//private void SATOPrinter_ReceiveData(object sender, ReceiveDataEventArgs e)
|
||||
//{
|
||||
// PUB.log.Add($"SATO Recv : " + e.StrValue);
|
||||
//}
|
||||
|
||||
public (Boolean result, string errmessage) TestPrint(Boolean drawbox, string manu = "", string mfgdate = "")
|
||||
{
|
||||
var dtstr = DateTime.Now.ToShortDateString();
|
||||
var printcode = "103077807;Z577603504;105-35282-1105;15000;RC00004A219001W;20210612";
|
||||
var reel = new Class.Reel(printcode);
|
||||
//reel.id = "RLID" + DateTime.Now.ToString("MMHHmmssfff");
|
||||
reel.SID = "103000000";
|
||||
reel.PartNo = "PARTNO".PadRight(20, '0'); //20자리
|
||||
|
||||
if (mfgdate == "") reel.mfg = dtstr;
|
||||
else reel.mfg = mfgdate;
|
||||
|
||||
reel.venderLot = "LOT000000000";
|
||||
if (manu == "") reel.venderName = "ATK4EET1";
|
||||
else reel.venderName = manu;
|
||||
|
||||
reel.qty = 15000;
|
||||
var rlt = Print(reel, true, drawbox);
|
||||
var fi = new System.IO.FileInfo(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "temp_zpl.txt"));
|
||||
System.IO.File.WriteAllText(fi.FullName, LastPrintZPL, System.Text.Encoding.Default);
|
||||
return rlt;
|
||||
}
|
||||
|
||||
|
||||
public (Boolean result, string errmessage) Print(Class.Reel reel, Boolean display1drid, Boolean drawOUtBox)
|
||||
{
|
||||
string prtData;
|
||||
prtData = makeZPL_210908(reel, drawOUtBox, out qrData);
|
||||
|
||||
return Print(prtData);
|
||||
}
|
||||
|
||||
public (Boolean result, string errmessage) Print(string _zpl)
|
||||
{
|
||||
this.LastPrintZPL = _zpl;
|
||||
try
|
||||
{
|
||||
byte[] cmddata = Utils.StringToByteArray(ControlCharReplace(_zpl));
|
||||
SATOPrinter.Send(cmddata);
|
||||
return (true,"");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return (false,ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public string makeZPL_210908(Class.Reel reel, Boolean drawbox, out string qrData)
|
||||
{
|
||||
string m_strSend = string.Empty;
|
||||
|
||||
if(reel.PartNo.isEmpty())
|
||||
qrData = string.Format("{0};{1};{2};{3};{4};{5}", reel.SID, reel.venderLot, reel.venderName, reel.qty, reel.id, reel.mfg);
|
||||
else
|
||||
qrData = string.Format("{0};{1};{2};{3};{4};{5};{6}", reel.SID, reel.venderLot, reel.venderName, reel.qty, reel.id, reel.mfg, reel.PartNo);
|
||||
|
||||
var reeid = reel.id;
|
||||
if (reeid.Length > 20)
|
||||
reeid = "..." + reeid.Substring(reeid.Length - 20);
|
||||
|
||||
m_strSend = this.baseZPL;
|
||||
m_strSend = m_strSend.Replace("{qrdata}", qrData);
|
||||
m_strSend = m_strSend.Replace("{sid}", reel.SID);
|
||||
m_strSend = m_strSend.Replace("{lot}", reel.venderLot);
|
||||
m_strSend = m_strSend.Replace("{partnum}", reel.PartNo);
|
||||
m_strSend = m_strSend.Replace("{rid}", reeid);
|
||||
m_strSend = m_strSend.Replace("{qty}", reel.qty.ToString());
|
||||
m_strSend = m_strSend.Replace("{mfg}", reel.mfg);
|
||||
|
||||
var supply1 = reel.venderName;
|
||||
string supply2 = "";
|
||||
if (supply1.Length > 30)
|
||||
{
|
||||
supply2 = supply1.Substring(30);
|
||||
supply1 = supply1.Substring(0, 30);
|
||||
}
|
||||
|
||||
m_strSend = m_strSend.Replace("{supply}", supply1);
|
||||
m_strSend = m_strSend.Replace("{supply2}", supply2);
|
||||
|
||||
//줄바꿈제거
|
||||
m_strSend = m_strSend.Replace("\r", "").Replace("\n", "");
|
||||
return m_strSend;
|
||||
}
|
||||
}
|
||||
}
|
||||
91
Handler/Project/Device/StateMachine.cs
Normal file
91
Handler/Project/Device/StateMachine.cs
Normal file
@@ -0,0 +1,91 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Project.Device
|
||||
{
|
||||
public class CSequence : AR.StateMachineSequence
|
||||
{
|
||||
public CSequence(int stepLen = 255) : base(stepLen) { }
|
||||
|
||||
public void Clear(eSMStep idx)
|
||||
{
|
||||
base.Clear((int)idx);
|
||||
}
|
||||
public int Get(eSMStep idx)
|
||||
{
|
||||
return base.Get((int)idx);
|
||||
}
|
||||
|
||||
public void Set(eSMStep idx, byte value)
|
||||
{
|
||||
base.Set((int)idx, value);
|
||||
}
|
||||
|
||||
|
||||
public void Update(eSMStep idx, int incValue = 1)
|
||||
{
|
||||
base.Update((int)idx, incValue);
|
||||
}
|
||||
public TimeSpan GetTime(eSMStep idx = 0)
|
||||
{
|
||||
return base.GetTime((int)idx);
|
||||
}
|
||||
public int GetData(eSMStep idx)
|
||||
{
|
||||
return base.GetData((int)idx);
|
||||
}
|
||||
public void ClearData(eSMStep idx) { base.ClearData((int)idx); }
|
||||
public void AddData(eSMStep idx, byte value = 1)
|
||||
{
|
||||
base.AddData((int)idx, value);
|
||||
}
|
||||
public void SetData(eSMStep idx, byte value)
|
||||
{
|
||||
_runseqdata[(int)idx] = value;
|
||||
}
|
||||
|
||||
public void UpdateTime(eSMStep idx)
|
||||
{
|
||||
_runseqtime[(int)idx] = DateTime.Now;
|
||||
}
|
||||
}
|
||||
|
||||
public class CStateMachine : AR.StateMachine
|
||||
{
|
||||
/// <summary>
|
||||
/// Sequece Value / data
|
||||
/// </summary>
|
||||
public CSequence seq;
|
||||
public eSMStep PrePauseStep = eSMStep.NOTSET;
|
||||
public CStateMachine()
|
||||
{
|
||||
seq = new CSequence(255);
|
||||
}
|
||||
|
||||
public new eSMStep Step { get { return (eSMStep)base.Step; } }
|
||||
public void SetNewStep(eSMStep newstep_, Boolean force = false)
|
||||
{
|
||||
//일시중지라면 중지전의 상태를 백업한다
|
||||
if (newstep_ == eSMStep.PAUSE && this.Step != eSMStep.PAUSE && this.Step != eSMStep.WAITSTART) PrePauseStep = this.Step;
|
||||
base.SetNewStep((byte)newstep_, force);
|
||||
}
|
||||
|
||||
public new eSMStep getNewStep
|
||||
{
|
||||
get
|
||||
{
|
||||
return (eSMStep)newstep_;
|
||||
}
|
||||
}
|
||||
public new eSMStep getOldStep
|
||||
{
|
||||
get
|
||||
{
|
||||
return (eSMStep)oldstep_;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
154
Handler/Project/Device/TowerLamp.cs
Normal file
154
Handler/Project/Device/TowerLamp.cs
Normal file
@@ -0,0 +1,154 @@
|
||||
//#define OLD
|
||||
|
||||
using Project;
|
||||
using Project.Device;
|
||||
using System;
|
||||
|
||||
#if OLD
|
||||
using static Project.StateMachine;
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// 타워램프조작
|
||||
/// </summary>
|
||||
public static class TowerLamp
|
||||
{
|
||||
static bool enable = true;
|
||||
#if OLD
|
||||
static arDev.AzinAxt.DIO DIO = null;
|
||||
#else
|
||||
static arDev.DIO.IDIO DIO = null;
|
||||
#endif
|
||||
static int R = -1;
|
||||
static int G = -1;
|
||||
static int Y = -1;
|
||||
static DateTime updatetime = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 타워램프 사용여부 false 가 입력되면 모든 램프가 꺼집니다
|
||||
/// </summary>
|
||||
public static Boolean Enable
|
||||
{
|
||||
get { return enable; }
|
||||
set
|
||||
{
|
||||
enable = value;
|
||||
if (enable == false)
|
||||
{
|
||||
RED = false;
|
||||
YEL = false;
|
||||
GRN = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 갱신주기 250ms 기본설정
|
||||
/// </summary>
|
||||
public static int UpdateInterval = 250;
|
||||
|
||||
#if OLD
|
||||
|
||||
public static void Init(arDev.AzinAxt.DIO dio_, int R_, int G_, int Y_)
|
||||
#else
|
||||
public static void Init(arDev.DIO.IDIO dio_, int R_, int G_, int Y_)
|
||||
#endif
|
||||
|
||||
|
||||
{
|
||||
DIO = dio_;
|
||||
R = R_;
|
||||
G = G_;
|
||||
Y = Y_;
|
||||
}
|
||||
public static void Update(eSMStep Step)
|
||||
{
|
||||
if (Enable == false) return;
|
||||
if (DIO == null) return; ;// throw new Exception("DIO가 설정되지 않았습니다. Init 함수를 호출 하세요");
|
||||
|
||||
var ts = DateTime.Now - updatetime;
|
||||
if (ts.TotalMilliseconds < UpdateInterval) return;
|
||||
|
||||
if (Step == eSMStep.RUN) //동작중에는 녹색을 점등
|
||||
{
|
||||
if (GRN == false) GRN = true;
|
||||
if (RED == true) RED = false;
|
||||
if (YEL == true) YEL = false;
|
||||
}
|
||||
else if (Step < eSMStep.IDLE || Step.ToString().StartsWith("HOME")) //초기화관련
|
||||
{
|
||||
GRN = false;
|
||||
var cur = YEL;
|
||||
RED = !cur;
|
||||
YEL = !cur;
|
||||
}
|
||||
else if (Step == eSMStep.FINISH) //작업종료
|
||||
{
|
||||
var cur = GRN;
|
||||
GRN = !cur;
|
||||
YEL = !cur;
|
||||
RED = false;
|
||||
}
|
||||
else if (Step == eSMStep.WAITSTART) //사용자대기
|
||||
{
|
||||
var cur = YEL;
|
||||
YEL = !cur;
|
||||
GRN = false;
|
||||
RED = false;
|
||||
}
|
||||
else if (Step == eSMStep.ERROR || Step == eSMStep.EMERGENCY)
|
||||
{
|
||||
RED = !RED;
|
||||
YEL = false;
|
||||
GRN = false;
|
||||
}
|
||||
else if (Step == eSMStep.PAUSE)
|
||||
{
|
||||
if (RED == false) RED = true;
|
||||
if (YEL == true) YEL = false;
|
||||
if (GRN == true) GRN = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
//나머지 모든 상황은 대기로 한다
|
||||
if (YEL == false) YEL = true;
|
||||
if (GRN == true) GRN = false;
|
||||
if (RED == true) RED = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void SetLamp(int port, bool value)
|
||||
{
|
||||
if (DIO == null || !DIO.IsInit || port < 0) return;
|
||||
DIO.SetOutput(port, value);
|
||||
}
|
||||
static bool GetLamp(int port)
|
||||
{
|
||||
if (DIO == null || !DIO.IsInit || port < 0) return false;
|
||||
#if OLD
|
||||
return DIO.OUTPUT(port);
|
||||
#else
|
||||
return DIO.GetDOValue(port);
|
||||
#endif
|
||||
}
|
||||
|
||||
public static Boolean GRN
|
||||
{
|
||||
get { return GetLamp(G); }
|
||||
set { SetLamp(G, value); }
|
||||
}
|
||||
public static Boolean YEL
|
||||
{
|
||||
get { return GetLamp(Y); }
|
||||
set { SetLamp(Y, value); }
|
||||
}
|
||||
public static Boolean RED
|
||||
{
|
||||
get { return GetLamp(R); }
|
||||
set { SetLamp(R, value); }
|
||||
}
|
||||
}
|
||||
|
||||
//230619 chi PAUSE 상태추가 => RED ON
|
||||
// 전처리추가
|
||||
357
Handler/Project/Device/_CONNECTION.cs
Normal file
357
Handler/Project/Device/_CONNECTION.cs
Normal file
@@ -0,0 +1,357 @@
|
||||
using AR;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using UIControl;
|
||||
|
||||
namespace Project
|
||||
{
|
||||
public partial class FMain : Form
|
||||
{
|
||||
DateTime CameraConTimeL = DateTime.Now;
|
||||
DateTime CameraConTimeR = DateTime.Now;
|
||||
DateTime BarcodeConTime = DateTime.Now;
|
||||
DateTime KeyenceConTimeF = DateTime.Now;
|
||||
DateTime KeyenceConTimeR = DateTime.Now;
|
||||
DateTime PrintLConTime = DateTime.Now;
|
||||
DateTime PrintRConTime = DateTime.Now;
|
||||
DateTime swPLCConTime = DateTime.Now;
|
||||
Boolean bRunConnection = true;
|
||||
|
||||
|
||||
void bwDeviceConnection()
|
||||
{
|
||||
while (bRunConnection && this.Disposing == false && this.Disposing == false)
|
||||
{
|
||||
//초기혹은 파괴상태는 처리안함
|
||||
if (PUB.keyenceF != null && PUB.keyenceF.disposed &&
|
||||
PUB.keyenceR != null && PUB.keyenceR.disposed)
|
||||
{
|
||||
System.Threading.Thread.Sleep(1000);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ConnectSeq == 0) //키엔스
|
||||
{
|
||||
var tscam = DateTime.Now - KeyenceConTimeF;
|
||||
if (tscam.TotalSeconds > 5 && PUB.flag.get(eVarBool.FG_KEYENCE_OFFF) == false)
|
||||
{
|
||||
if (AR.SETTING.Data.Keyence_IPF.isEmpty() == false)
|
||||
{
|
||||
if (PUB.keyenceF != null && PUB.keyenceF.IsConnect == false)
|
||||
{
|
||||
PUB.keyenceF.Connect();
|
||||
KeyenceConTimeF = DateTime.Now;
|
||||
}
|
||||
else
|
||||
{
|
||||
//연결이 되어있다면 상태값을 요청한다
|
||||
KeyenceConTimeF = DateTime.Now.AddSeconds(-4);
|
||||
}
|
||||
}
|
||||
else KeyenceConTimeF = DateTime.Now.AddSeconds(-4);
|
||||
}
|
||||
ConnectSeq += 1;
|
||||
}
|
||||
else if (ConnectSeq == 1) //키엔스
|
||||
{
|
||||
var tscam = DateTime.Now - KeyenceConTimeR;
|
||||
if (tscam.TotalSeconds > 5 && PUB.flag.get(eVarBool.FG_KEYENCE_OFFR) == false)
|
||||
{
|
||||
if (AR.SETTING.Data.Keyence_IPR.isEmpty() == false)
|
||||
{
|
||||
if (PUB.keyenceR != null && PUB.keyenceR.IsConnect == false)
|
||||
{
|
||||
PUB.keyenceR.Connect();
|
||||
KeyenceConTimeR = DateTime.Now;
|
||||
}
|
||||
else
|
||||
{
|
||||
//연결이 되어있다면 상태값을 요청한다
|
||||
KeyenceConTimeR = DateTime.Now.AddSeconds(-4);
|
||||
}
|
||||
}
|
||||
else KeyenceConTimeR = DateTime.Now.AddSeconds(-4);
|
||||
}
|
||||
ConnectSeq += 1;
|
||||
}
|
||||
else if (ConnectSeq == 2) //카메라(왼)
|
||||
{
|
||||
var tscam = DateTime.Now - CameraConTimeL;
|
||||
if (tscam.TotalSeconds > 7)
|
||||
{
|
||||
//if (COMM.SETTING.Data.EnableExtVision)
|
||||
if (PUB.wsL == null || PUB.wsL.Connected == false)
|
||||
{
|
||||
if (AR.SETTING.Data.Log_CameraConn)
|
||||
PUB.log.Add($"Camera(L) connection attempt ({AR.SETTING.Data.HostIPL}:{AR.SETTING.Data.HostPortL})");
|
||||
if (PUB.wsL != null)
|
||||
{
|
||||
DetachCameraEventL(); //이벤트 종료
|
||||
PUB.wsL.Dispose();
|
||||
}
|
||||
|
||||
PUB.wsL = new WatsonWebsocket.WatsonWsClient(AR.SETTING.Data.HostIPL, AR.SETTING.Data.HostPortL, false);
|
||||
AttachCameraEventL();
|
||||
try
|
||||
{
|
||||
PUB.wsL.StartWithTimeout();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE(ex.Message); //220214
|
||||
}
|
||||
|
||||
CameraConTimeL = DateTime.Now;
|
||||
}
|
||||
else
|
||||
{
|
||||
//연결이 되어있다면 상태값을 요청한다
|
||||
//if (PUB.flag.get(eVarBool.FG_RDY_CAMERA_L) == false)
|
||||
{
|
||||
//마지막 수신시간으로 부터 5초가 지나면 전송한다
|
||||
//var tsRecv = DateTime.Now - lastRecvWSL;
|
||||
//if (tsRecv.TotalSeconds >= 15)
|
||||
//{
|
||||
// PUB.wsL.Dispose();
|
||||
//}
|
||||
//else if (tsRecv.TotalSeconds >= 5)
|
||||
{
|
||||
WS_Send(eWorkPort.Left, PUB.wsL, string.Empty, "STATUS", "");
|
||||
}
|
||||
CameraConTimeL = DateTime.Now.AddSeconds(-4);
|
||||
}
|
||||
}
|
||||
}
|
||||
ConnectSeq += 1;
|
||||
}
|
||||
else if (ConnectSeq == 3) //카메라(우)
|
||||
{
|
||||
var tscam = DateTime.Now - CameraConTimeR;
|
||||
if (tscam.TotalSeconds > 7)
|
||||
{
|
||||
//if (COMM.SETTING.Data.EnableExtVision)
|
||||
if (PUB.wsR == null || PUB.wsR.Connected == false)
|
||||
{
|
||||
if (AR.SETTING.Data.Log_CameraConn)
|
||||
PUB.log.Add($"Camera(R) connection attempt ({AR.SETTING.Data.HostIPR}:{AR.SETTING.Data.HostPortR})");
|
||||
if (PUB.wsR != null)
|
||||
{
|
||||
DetachCameraEventR(); //이벤트 종료
|
||||
PUB.wsR.Dispose();
|
||||
}
|
||||
|
||||
PUB.wsR = new WatsonWebsocket.WatsonWsClient(AR.SETTING.Data.HostIPR, AR.SETTING.Data.HostPortR, false);
|
||||
AttachCameraEventR();
|
||||
|
||||
try
|
||||
{
|
||||
PUB.wsR.Start();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE(ex.Message); //220214
|
||||
}
|
||||
|
||||
|
||||
CameraConTimeR = DateTime.Now;
|
||||
}
|
||||
else
|
||||
{
|
||||
//연결이 되어있다면 상태값을 요청한다
|
||||
//if (PUB.flag.get(eVarBool.FG_RDY_CAMERA_R) == false)
|
||||
{
|
||||
//마지막 수신시간으로 부터 5초가 지나면 전송한다
|
||||
//var tsRecv = DateTime.Now - lastRecvWSR;
|
||||
//if (tsRecv.TotalSeconds >= 15)
|
||||
//{
|
||||
// PUB.wsR.Dispose();
|
||||
//}
|
||||
//else if (tsRecv.TotalSeconds >= 5)
|
||||
{
|
||||
WS_Send(eWorkPort.Right, PUB.wsR, string.Empty, "STATUS", "");
|
||||
}
|
||||
CameraConTimeR = DateTime.Now.AddSeconds(-4);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
ConnectSeq += 1;
|
||||
}
|
||||
else if (ConnectSeq == 4) //바코드연결
|
||||
{
|
||||
var tscam = DateTime.Now - BarcodeConTime;
|
||||
if (tscam.TotalSeconds > 5)
|
||||
{
|
||||
if (AR.SETTING.Data.Barcode_Port.isEmpty() == false)
|
||||
{
|
||||
if (PUB.BarcodeFix == null || PUB.BarcodeFix.IsOpen() == false)
|
||||
{
|
||||
PUB.BarcodeFix.PortName = AR.SETTING.Data.Barcode_Port;
|
||||
PUB.BarcodeFix.BaudRate = AR.SETTING.Data.Barcode_Baud;
|
||||
PUB.BarcodeFix.Open();
|
||||
BarcodeConTime = DateTime.Now;
|
||||
}
|
||||
else
|
||||
{
|
||||
//연결이 되어있다면 상태값을 요청한다
|
||||
BarcodeConTime = DateTime.Now.AddSeconds(-4);
|
||||
}
|
||||
}
|
||||
else BarcodeConTime = DateTime.Now.AddSeconds(-4);
|
||||
}
|
||||
ConnectSeq += 1;
|
||||
}
|
||||
else if (ConnectSeq == 5) //프린터(좌)
|
||||
{
|
||||
var tscam = DateTime.Now - PrintLConTime;
|
||||
if (tscam.TotalSeconds > 5)
|
||||
{
|
||||
if (AR.SETTING.Data.PrintL_Port.isEmpty() == false)
|
||||
{
|
||||
if (PUB.PrinterL == null || PUB.PrinterL.IsOpen == false)
|
||||
{
|
||||
try
|
||||
{
|
||||
PUB.PrinterL.PortName = AR.SETTING.Data.PrintL_Port;
|
||||
PUB.PrinterL.BaudRate = AR.SETTING.Data.PrintL_Baud;
|
||||
PUB.PrinterL.Open();
|
||||
PrintLConTime = DateTime.Now;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE($"Printer(L) {ex.Message}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//연결이 되어있다면 상태값을 요청한다
|
||||
PrintLConTime = DateTime.Now.AddSeconds(-4);
|
||||
}
|
||||
}
|
||||
else PrintLConTime = DateTime.Now.AddSeconds(-4);
|
||||
}
|
||||
ConnectSeq += 1;
|
||||
}
|
||||
else if (ConnectSeq == 6) //프린터(우)
|
||||
{
|
||||
var tscam = DateTime.Now - PrintRConTime;
|
||||
if (tscam.TotalSeconds > 5)
|
||||
{
|
||||
if (AR.SETTING.Data.PrintR_Port.isEmpty() == false)
|
||||
{
|
||||
if (PUB.PrinterR == null || PUB.PrinterR.IsOpen == false)
|
||||
{
|
||||
try
|
||||
{
|
||||
PUB.PrinterR.PortName = AR.SETTING.Data.PrintR_Port;
|
||||
PUB.PrinterR.BaudRate = AR.SETTING.Data.PrintR_Baud;
|
||||
PUB.PrinterR.Open();
|
||||
PrintRConTime = DateTime.Now;
|
||||
}
|
||||
catch (Exception ex) {
|
||||
PUB.log.AddE($"Printer(R) {ex.Message}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//연결이 되어있다면 상태값을 요청한다
|
||||
PrintRConTime = DateTime.Now.AddSeconds(-4);
|
||||
}
|
||||
}
|
||||
else PrintRConTime = DateTime.Now.AddSeconds(-4);
|
||||
}
|
||||
ConnectSeq = 7;
|
||||
}
|
||||
else if (ConnectSeq == 7) //swPLC 230725
|
||||
{
|
||||
var tscam = DateTime.Now - swPLCConTime;
|
||||
if (tscam.TotalSeconds > 5)
|
||||
{
|
||||
if (PUB.plc != null && PUB.plc.Init == false)
|
||||
{
|
||||
PUB.plc.Start();
|
||||
}
|
||||
swPLCConTime = DateTime.Now;
|
||||
}
|
||||
ConnectSeq = 0;
|
||||
}
|
||||
System.Threading.Thread.Sleep(2000);
|
||||
|
||||
}
|
||||
Console.WriteLine("Close : bwDeviceConnection");
|
||||
}
|
||||
|
||||
|
||||
public string PostFromUrl(string url, string jsonStr, out Boolean isError, string authid = "", string authpw = "", int _timeout = 0)
|
||||
{
|
||||
isError = false;
|
||||
string result = "";
|
||||
try
|
||||
{
|
||||
var timeout = 1000;
|
||||
//RaiseMessage(false, "POST : " + url);
|
||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url));
|
||||
if (_timeout == 0)
|
||||
{
|
||||
request.Timeout = timeout;
|
||||
request.ReadWriteTimeout = timeout;
|
||||
}
|
||||
else
|
||||
{
|
||||
request.Timeout = _timeout;
|
||||
request.ReadWriteTimeout = _timeout;
|
||||
}
|
||||
|
||||
|
||||
if (string.IsNullOrEmpty(authid) == false && string.IsNullOrEmpty(authpw) == false)
|
||||
{
|
||||
string authInfo = $"{authid}:{authpw}";
|
||||
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
|
||||
request.Headers["Authorization"] = "Basic " + authInfo;
|
||||
}
|
||||
|
||||
request.Method = "POST";
|
||||
request.ContentType = "application/json";
|
||||
request.ContentLength = jsonStr.Length;
|
||||
request.MaximumAutomaticRedirections = 4;
|
||||
request.MaximumResponseHeadersLength = 4;
|
||||
request.Credentials = CredentialCache.DefaultCredentials;
|
||||
|
||||
using (StreamWriter sw = new StreamWriter(request.GetRequestStream()))
|
||||
{
|
||||
sw.Write(jsonStr);
|
||||
sw.Flush();
|
||||
sw.Close();
|
||||
|
||||
var response = request.GetResponse() as HttpWebResponse;
|
||||
using (var txtReader = new StreamReader(response.GetResponseStream()))
|
||||
{
|
||||
result = txtReader.ReadToEnd();
|
||||
}
|
||||
}
|
||||
|
||||
// LastQueryBUF = result;
|
||||
//LastQueryURL = url;
|
||||
//RaiseRawMessage(url, "RESULT\n" + result); //181026 - show data
|
||||
}
|
||||
catch (WebException wex)
|
||||
{
|
||||
isError = true;
|
||||
result = wex.ToString();// new StreamReader(wex.Response.GetResponseStream()).ReadToEnd();
|
||||
//RaiseMessage(true, "POST-ERROR\n" + result);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
1746
Handler/Project/Dialog/DIOMonitor.Designer.cs
generated
Normal file
1746
Handler/Project/Dialog/DIOMonitor.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
432
Handler/Project/Dialog/DIOMonitor.cs
Normal file
432
Handler/Project/Dialog/DIOMonitor.cs
Normal file
@@ -0,0 +1,432 @@
|
||||
#pragma warning disable IDE1006 // 명명 스타일
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using arDev.DIO;
|
||||
using arDev.AjinEXTEK;
|
||||
using AR;
|
||||
using AR;
|
||||
|
||||
namespace Project.Dialog
|
||||
{
|
||||
public partial class fIOMonitor : Form
|
||||
{
|
||||
arCtl.GridView.GridView[] gvIlog;
|
||||
Label[] lbILog;
|
||||
|
||||
public fIOMonitor()
|
||||
{
|
||||
InitializeComponent();
|
||||
this.FormClosed += fIOMonitor_FormClosed;
|
||||
|
||||
this.Opacity = 1.0;
|
||||
|
||||
gvIlog = new arCtl.GridView.GridView[] {
|
||||
gbi00,gbi01,gbi02,gbi03,gbi04,gbi05,
|
||||
gbi06,gbi07,gbi08,gbi09,gbi10,gbi11,
|
||||
gbi12,gbi13,gbi14,gbi15,gbi16,gbi17,
|
||||
};
|
||||
lbILog = new Label[] {
|
||||
lbi00,lbi01,lbi02,lbi03,lbi04,lbi05,
|
||||
lbi06,lbi07,lbi08,lbi09,lbi10,lbi11,
|
||||
lbi12,lbi13,lbi14,lbi15,lbi16,lbi17,
|
||||
};
|
||||
|
||||
//DI,DO,
|
||||
var dinames = DIO.Pin.GetDIName;
|
||||
var donames = DIO.Pin.GetDOName;
|
||||
tblDI.setTitle(dinames);
|
||||
tblDO.setTitle(donames);
|
||||
//tblFG.setTitle(PUB.flag.Name);
|
||||
var pinNameI = DIO.Pin.GetDIPinName;// new string[dinames.Length];
|
||||
var pinNameO = DIO.Pin.GetDOPinName;// new string[donames.Length];
|
||||
//for (int i = 0; i < pinNameI.Length; i++) pinNameI[i] = Enum.GetName(typeof(eDIPin), i);
|
||||
//for (int i = 0; i < pinNameO.Length; i++) pinNameO[i] = Enum.GetName(typeof(eDOPin), i);
|
||||
tblDI.setNames(pinNameI);
|
||||
tblDO.setNames(pinNameO);
|
||||
|
||||
tblDI.setItemTextAlign(ContentAlignment.MiddleLeft);
|
||||
tblDO.setItemTextAlign(ContentAlignment.MiddleLeft);
|
||||
|
||||
// tblFG.setItemTextAlign(ContentAlignment.BottomLeft);
|
||||
tblDI.ColorList = new arDev.AjinEXTEK.UI.ColorListItem[] {
|
||||
new arDev.AjinEXTEK.UI.ColorListItem{ BackColor1 = Color.DimGray, BackColor2 = Color.FromArgb(30,30,30), Remark="False" },
|
||||
new arDev.AjinEXTEK.UI.ColorListItem{ BackColor1 = Color.Lime, BackColor2 = Color.Green, Remark="True" },
|
||||
};
|
||||
tblDO.ColorList = new arDev.AjinEXTEK.UI.ColorListItem[] {
|
||||
new arDev.AjinEXTEK.UI.ColorListItem{ BackColor1 = Color.DimGray, BackColor2 = Color.FromArgb(30,30,30), Remark="False" },
|
||||
new arDev.AjinEXTEK.UI.ColorListItem{ BackColor1 = Color.Tomato, BackColor2 = Color.Red, Remark="True" },
|
||||
};
|
||||
|
||||
//인터락이름
|
||||
//var ILNameEV = new string[Pub.iLock.Length];
|
||||
for (int i = 0; i < PUB.iLock.Length; i++)
|
||||
{
|
||||
var axisname = ((eAxis)i).ToString();
|
||||
var nonaxis = false;
|
||||
if (i >= 7) //이름이없는경우
|
||||
{
|
||||
axisname = PUB.iLock[i].Tag.ToString();
|
||||
nonaxis = true;
|
||||
}
|
||||
string[] ILNameEV;
|
||||
|
||||
//if (axisname.StartsWith("X")) ILNameEV = Enum.GetNames(typeof(eILockPKX));
|
||||
//else if (axisname.StartsWith("Y")) ILNameEV = Enum.GetNames(typeof(eILockPKY));
|
||||
//else if (axisname.StartsWith("Z")) ILNameEV = Enum.GetNames(typeof(eILockPKZ));
|
||||
//else if (axisname.StartsWith("U")) ILNameEV = Enum.GetNames(typeof(eILockEV));
|
||||
//else if (axisname.StartsWith("L")) ILNameEV = Enum.GetNames(typeof(eILockEV));
|
||||
//else
|
||||
if (i == 7) ILNameEV = Enum.GetNames(typeof(eILockPRL));
|
||||
else if (i == 8) ILNameEV = Enum.GetNames(typeof(eILockPRR));
|
||||
else if (i == 9) ILNameEV = Enum.GetNames(typeof(eILockVS0));
|
||||
else if (i == 10) ILNameEV = Enum.GetNames(typeof(eILockVS1));
|
||||
else if (i == 11) ILNameEV = Enum.GetNames(typeof(eILockVS2));
|
||||
else if (i == 12) ILNameEV = Enum.GetNames(typeof(eILockCV));
|
||||
else if (i == 13) ILNameEV = Enum.GetNames(typeof(eILockCV));
|
||||
else ILNameEV = Enum.GetNames(typeof(eILock));
|
||||
|
||||
this.lbILog[i].Text = axisname;
|
||||
this.gvIlog[i].setTitle(ILNameEV);
|
||||
this.gvIlog[i].setItemTextAlign(ContentAlignment.MiddleCenter);
|
||||
this.gvIlog[i].ColorList[1].BackColor1 = Color.IndianRed;
|
||||
this.gvIlog[i].ColorList[1].BackColor2 = Color.LightCoral;
|
||||
|
||||
if (nonaxis)
|
||||
{
|
||||
lbILog[i].ForeColor = Color.Gold;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (axisname.StartsWith("PX")) this.lbILog[i].ForeColor = Color.Gold;
|
||||
else if (axisname.StartsWith("PY")) this.lbILog[i].ForeColor = Color.Tomato;
|
||||
else if (axisname.StartsWith("PZ")) this.lbILog[i].ForeColor = Color.Lime;
|
||||
else if (axisname.StartsWith("PU")) this.lbILog[i].ForeColor = Color.SkyBlue;
|
||||
else if (axisname.StartsWith("PL")) this.lbILog[i].ForeColor = Color.Magenta;
|
||||
else this.lbILog[i].ForeColor = Color.DimGray;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//값확인
|
||||
List<Boolean> diValue = new List<bool>();
|
||||
for (int i = 0; i < PUB.dio.GetDICount; i++)
|
||||
diValue.Add(PUB.dio.GetDIValue(i));
|
||||
|
||||
List<Boolean> doValue = new List<bool>();
|
||||
for (int i = 0; i < PUB.dio.GetDOCount; i++)
|
||||
doValue.Add(PUB.dio.GetDOValue(i));
|
||||
//List<Boolean> fgValue = new List<bool>();
|
||||
//for (int i = 0; i < PUB.flag.Length; i++)
|
||||
// fgValue.Add(PUB.flag.get(i));
|
||||
|
||||
tblDI.setValue(diValue.ToArray());
|
||||
tblDO.setValue(doValue.ToArray());
|
||||
// tblFG.setValue(fgValue.ToArray());
|
||||
|
||||
PUB.dio.IOValueChanged += dio_IOValueChanged;
|
||||
//PUB.flag.ValueChanged += flag_ValueChanged;
|
||||
|
||||
//interlock
|
||||
var axislist = Enum.GetNames(typeof(eAxis));
|
||||
|
||||
|
||||
|
||||
for (int i = 0; i < PUB.iLock.Length; i++)
|
||||
{
|
||||
List<Boolean> PKValues = new List<bool>();
|
||||
|
||||
//인터락에는 값이 몇개 있지?
|
||||
for (int j = 0; j < 64; j++)
|
||||
{
|
||||
PKValues.Add(PUB.iLock[i].get(j));
|
||||
}
|
||||
|
||||
gvIlog[i].setValue(PKValues.ToArray());
|
||||
gvIlog[i].Tag = i;
|
||||
|
||||
PUB.iLock[i].ValueChanged += LockXF_ValueChanged;
|
||||
|
||||
if (PUB.sm.isRunning == false)
|
||||
{
|
||||
gvIlog[i].ItemClick += gvILXF_ItemClick;
|
||||
}
|
||||
gvIlog[i].Invalidate();
|
||||
}
|
||||
|
||||
|
||||
if (PUB.sm.isRunning == false)
|
||||
{
|
||||
this.tblDI.ItemClick += tblDI_ItemClick;
|
||||
this.tblDO.ItemClick += tblDO_ItemClick;
|
||||
//this.tblFG.ItemClick += tblFG_ItemClick;
|
||||
}
|
||||
|
||||
this.tblDI.Invalidate();
|
||||
this.tblDO.Invalidate();
|
||||
// this.tblFG.Invalidate();
|
||||
|
||||
this.KeyDown += fIOMonitor_KeyDown;
|
||||
this.WindowState = FormWindowState.Maximized;
|
||||
}
|
||||
|
||||
|
||||
void fIOMonitor_FormClosed(object sender, FormClosedEventArgs e)
|
||||
{
|
||||
PUB.dio.IOValueChanged -= dio_IOValueChanged;
|
||||
// PUB.flag.ValueChanged -= flag_ValueChanged;
|
||||
|
||||
for (int i = 0; i < PUB.iLock.Length; i++)
|
||||
{
|
||||
PUB.iLock[i].ValueChanged -= LockXF_ValueChanged;
|
||||
}
|
||||
|
||||
|
||||
if (PUB.sm.isRunning == false)
|
||||
{
|
||||
this.tblDI.ItemClick -= tblDI_ItemClick;
|
||||
this.tblDO.ItemClick -= tblDO_ItemClick;
|
||||
// this.tblFG.ItemClick -= tblFG_ItemClick;
|
||||
|
||||
for (int i = 0; i < PUB.iLock.Length; i++)
|
||||
{
|
||||
gvIlog[i].ItemClick -= gvILXF_ItemClick;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
this.KeyDown -= fIOMonitor_KeyDown;
|
||||
}
|
||||
|
||||
void LockXF_ValueChanged(object sender, AR.InterfaceValueEventArgs e)
|
||||
{
|
||||
var item = sender as CInterLock;
|
||||
//var tagStr = item.Tag.ToString();
|
||||
//var axis = (eAxis)Enum.Parse(typeof(eAxis), tagStr);
|
||||
var axisno = item.idx;// (int)axis;
|
||||
|
||||
if (this.gvIlog[axisno].setValue((int)e.ArrIDX, e.NewValue))
|
||||
this.gvIlog[axisno].Invalidate();
|
||||
|
||||
}
|
||||
|
||||
void gvILXF_ItemClick(object sender, arCtl.GridView.GridView.ItemClickEventArgs e)
|
||||
{
|
||||
var gv = sender as arCtl.GridView.GridView;
|
||||
var tagStr = gv.Tag.ToString();
|
||||
|
||||
var axis = (eAxis)Enum.Parse(typeof(eAxis), tagStr);
|
||||
var axisno = (int)axis;
|
||||
|
||||
var curValue = PUB.iLock[axisno].get((int)e.idx);
|
||||
PUB.iLock[axisno].set((int)e.idx, !curValue, "IOMONITOR");
|
||||
}
|
||||
|
||||
void fIOMonitor_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.KeyCode == Keys.Escape) this.Close();
|
||||
else if (e.KeyCode == Keys.D && e.Control)
|
||||
{
|
||||
this.tblDO.showDebugInfo = !this.tblDO.showDebugInfo;
|
||||
this.tblDI.showDebugInfo = this.tblDO.showDebugInfo;
|
||||
// this.tblFG.showDebugInfo = this.tblDO.showDebugInfo;
|
||||
}
|
||||
}
|
||||
|
||||
private void fIOMonitor_Load(object sender, EventArgs e)
|
||||
{
|
||||
this.Text = "I/O Monitor";
|
||||
this.Show();
|
||||
//'Application.DoEvents();
|
||||
|
||||
|
||||
|
||||
Dialog.Quick_Control fctl = new Quick_Control
|
||||
{
|
||||
TopLevel = false,
|
||||
Visible = true
|
||||
};
|
||||
this.panel3.Controls.Add(fctl);
|
||||
fctl.Dock = DockStyle.Top;
|
||||
fctl.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
|
||||
fctl.panBG.BackColor = this.BackColor;
|
||||
fctl.panBG.BorderStyle = BorderStyle.None;
|
||||
fctl.Show();
|
||||
fctl.Dock = DockStyle.Fill;
|
||||
|
||||
this.tmDisplay.Start();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//void tblFG_ItemClick(object sender, arCtl.GridView.GridView.ItemClickEventArgs e)
|
||||
//{
|
||||
// var curValue = PUB.flag.get((int)e.idx);
|
||||
// PUB.flag.set((int)e.idx, !curValue, "IOMONITOR");
|
||||
//}
|
||||
|
||||
void tblDO_ItemClick(object sender, arDev.AjinEXTEK.UI.IOPanel.ItemClickEventArgs e)
|
||||
{
|
||||
var newValue = !PUB.dio.GetDOValue(e.idx);
|
||||
if (PUB.dio.IsInit == false)
|
||||
{
|
||||
//임시시그널
|
||||
var dlg = UTIL.MsgQ("Do you want to create a virtual signal?");
|
||||
if (dlg == System.Windows.Forms.DialogResult.Yes)
|
||||
{
|
||||
PUB.dio.RaiseEvent(eIOPINDIR.OUTPUT, e.idx, newValue);
|
||||
PUB.log.Add("fake do : " + e.idx.ToString() + ",val=" + newValue.ToString());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PUB.dio.SetOutput(e.idx, newValue);
|
||||
PUB.log.Add(string.Format("set output(iomonitor-userclick) idx={0},val={1}", e.idx, newValue));
|
||||
}
|
||||
}
|
||||
|
||||
void tblDI_ItemClick(object sender, arDev.AjinEXTEK.UI.IOPanel.ItemClickEventArgs e)
|
||||
{
|
||||
var newValue = !PUB.dio.GetDIValue(e.idx);
|
||||
if (PUB.dio.IsInit == false || PUB.flag.get(eVarBool.FG_DEBUG) == true)
|
||||
{
|
||||
//임시시그널
|
||||
var dlg = UTIL.MsgQ("Do you want to create a virtual signal?");
|
||||
if (dlg == System.Windows.Forms.DialogResult.Yes)
|
||||
{
|
||||
PUB.dio.RaiseEvent(eIOPINDIR.INPUT, e.idx, newValue);
|
||||
PUB.log.Add("fake di : " + e.idx.ToString() + ",val=" + newValue.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//void flag_ValueChanged(object sender, AR.InterfaceValueEventArgs e)
|
||||
//{
|
||||
// //var butIndex = getControlIndex(e.ArrIDX);
|
||||
// //if (butIndex >= this.tblFG.Controls.Count) return;
|
||||
|
||||
// //해당 아이템의 값을 변경하고 다시 그린다.
|
||||
// if (tblFG.setValue((int)e.ArrIDX, e.NewValue))
|
||||
// tblFG.Invalidate();//.drawItem(e.ArrIDX);
|
||||
//}
|
||||
|
||||
|
||||
void dio_IOValueChanged(object sender, arDev.DIO.IOValueEventArgs e)
|
||||
{
|
||||
//var butIndex = getControlIndex(e.ArrIDX);
|
||||
if (e.Direction == eIOPINDIR.INPUT)
|
||||
{
|
||||
//해당 아이템의 값을 변경하고 다시 그린다.
|
||||
if (tblDI.setValue(e.ArrIDX, e.NewValue))
|
||||
tblDI.Invalidate();//.drawItem(e.ArrIDX);
|
||||
}
|
||||
else
|
||||
{
|
||||
//해당 아이템의 값을 변경하고 다시 그린다.
|
||||
if (tblDO.setValue(e.ArrIDX, e.NewValue))
|
||||
tblDO.Invalidate();//.drawItem(e.ArrIDX);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void tmDisplay_Tick(object sender, EventArgs e)
|
||||
{
|
||||
if (this.tabControl1.SelectedIndex == 2)
|
||||
{
|
||||
//flag
|
||||
//var fvalue = PUB.flag.Value();
|
||||
//lbTitle3.Text = "FLAG(" + fvalue.HexString() + ")";
|
||||
//for (int i = 0; i < 128; i++)
|
||||
// tblFG.setValue((int)i, PUB.flag.get(i));
|
||||
//tblFG.Invalidate();
|
||||
}
|
||||
else if (this.tabControl1.SelectedIndex == 3)
|
||||
{
|
||||
//inter lock
|
||||
for (uint i = 0; i < PUB.iLock.Length; i++)
|
||||
{
|
||||
var axis = (eAxis)i;
|
||||
var axisname = axis.ToString();
|
||||
if (axisname.Equals(i.ToString()))
|
||||
{
|
||||
axisname = PUB.iLock[i].Tag.ToString();
|
||||
}
|
||||
this.lbILog[i].Text = string.Format("{0}({1})", axisname, PUB.iLock[i].Value().HexString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void lbTitle1_Click(object sender, EventArgs e)
|
||||
{
|
||||
//input list
|
||||
var fn = "descin.txt";
|
||||
var sb = new System.Text.StringBuilder();
|
||||
sb.AppendLine("No\tTitle\tDesc");
|
||||
foreach (var item in Enum.GetValues(typeof(eDIName)))
|
||||
{
|
||||
var em = (eDIName)item;
|
||||
var dr = PUB.mdm.dataSet.InputDescription.Where(t => t.Idx == (int)em).FirstOrDefault();
|
||||
var pinNo = $"X{(int)em:X2}";
|
||||
var pinTitle = item.ToString();
|
||||
var Desc = dr == null ? "" : dr.Description;
|
||||
sb.Append(pinNo);
|
||||
sb.Append("\t");
|
||||
sb.Append(pinTitle);
|
||||
sb.Append("\t");
|
||||
sb.Append(Desc);
|
||||
sb.AppendLine();
|
||||
}
|
||||
System.IO.File.WriteAllText(fn, sb.ToString(), System.Text.Encoding.Default);
|
||||
UTIL.RunExplorer(fn);
|
||||
}
|
||||
|
||||
private void arLabel2_Click(object sender, EventArgs e)
|
||||
{
|
||||
//oputput list
|
||||
var fn = "descout.txt";
|
||||
var sb = new System.Text.StringBuilder();
|
||||
sb.AppendLine("No\tTitle\tDesc");
|
||||
foreach (var item in Enum.GetValues(typeof(eDOName)))
|
||||
{
|
||||
var em = (eDOName)item;
|
||||
var itemidx = (int)em;
|
||||
var dr = PUB.mdm.dataSet.OutputDescription.Where(t => t.Idx == itemidx).FirstOrDefault();
|
||||
var pinNo = $"Y{(int)em:X2}";
|
||||
var pinTitle = item.ToString();
|
||||
var Desc = dr == null ? "" : dr.Description;
|
||||
sb.Append(pinNo);
|
||||
sb.Append("\t");
|
||||
sb.Append(pinTitle);
|
||||
sb.Append("\t");
|
||||
sb.Append(Desc);
|
||||
sb.AppendLine();
|
||||
}
|
||||
System.IO.File.WriteAllText(fn, sb.ToString(), System.Text.Encoding.Default);
|
||||
UTIL.RunExplorer(fn);
|
||||
}
|
||||
|
||||
private void pinDefineToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
var f = new fSetting_IOMessage();
|
||||
f.ShowDialog();
|
||||
|
||||
|
||||
tblDI.setTitle(DIO.Pin.GetDIName);
|
||||
tblDO.setTitle(DIO.Pin.GetDOName);
|
||||
tblDI.setNames(DIO.Pin.GetDIPinName);
|
||||
tblDO.setNames(DIO.Pin.GetDOPinName);
|
||||
tblDI.Invalidate();
|
||||
tblDO.Invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
126
Handler/Project/Dialog/DIOMonitor.resx
Normal file
126
Handler/Project/Dialog/DIOMonitor.resx
Normal file
@@ -0,0 +1,126 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>124, 17</value>
|
||||
</metadata>
|
||||
<metadata name="tmDisplay.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
||||
395
Handler/Project/Dialog/Debug/fSendInboutData.Designer.cs
generated
Normal file
395
Handler/Project/Dialog/Debug/fSendInboutData.Designer.cs
generated
Normal file
@@ -0,0 +1,395 @@
|
||||
|
||||
namespace Project.Dialog.Debug
|
||||
{
|
||||
partial class fSendInboutData
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.tbsid = new System.Windows.Forms.TextBox();
|
||||
this.tbrid = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.tbvname = new System.Windows.Forms.TextBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.tblot = new System.Windows.Forms.TextBox();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.tbpart = new System.Windows.Forms.TextBox();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.tbbatch = new System.Windows.Forms.TextBox();
|
||||
this.tbbadge = new System.Windows.Forms.TextBox();
|
||||
this.label7 = new System.Windows.Forms.Label();
|
||||
this.tbinch = new System.Windows.Forms.TextBox();
|
||||
this.label8 = new System.Windows.Forms.Label();
|
||||
this.label9 = new System.Windows.Forms.Label();
|
||||
this.tbmfg = new System.Windows.Forms.TextBox();
|
||||
this.label10 = new System.Windows.Forms.Label();
|
||||
this.tbqty = new System.Windows.Forms.TextBox();
|
||||
this.tbeqid = new System.Windows.Forms.TextBox();
|
||||
this.label11 = new System.Windows.Forms.Label();
|
||||
this.tbeqname = new System.Windows.Forms.TextBox();
|
||||
this.label12 = new System.Windows.Forms.Label();
|
||||
this.tboper = new System.Windows.Forms.TextBox();
|
||||
this.button1 = new System.Windows.Forms.Button();
|
||||
this.dv1 = new arCtl.arDatagridView();
|
||||
this.button2 = new System.Windows.Forms.Button();
|
||||
((System.ComponentModel.ISupportInitialize)(this.dv1)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(37, 28);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(22, 12);
|
||||
this.label1.TabIndex = 0;
|
||||
this.label1.Text = "sid";
|
||||
//
|
||||
// tbsid
|
||||
//
|
||||
this.tbsid.Location = new System.Drawing.Point(69, 25);
|
||||
this.tbsid.Name = "tbsid";
|
||||
this.tbsid.Size = new System.Drawing.Size(261, 21);
|
||||
this.tbsid.TabIndex = 1;
|
||||
this.tbsid.Text = "103000000";
|
||||
this.tbsid.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
//
|
||||
// tbrid
|
||||
//
|
||||
this.tbrid.Location = new System.Drawing.Point(69, 131);
|
||||
this.tbrid.Name = "tbrid";
|
||||
this.tbrid.Size = new System.Drawing.Size(261, 21);
|
||||
this.tbrid.TabIndex = 3;
|
||||
this.tbrid.Text = "RCTEST000000000";
|
||||
this.tbrid.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(40, 134);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(19, 12);
|
||||
this.label2.TabIndex = 2;
|
||||
this.label2.Text = "rid";
|
||||
//
|
||||
// tbvname
|
||||
//
|
||||
this.tbvname.Location = new System.Drawing.Point(69, 77);
|
||||
this.tbvname.Name = "tbvname";
|
||||
this.tbvname.Size = new System.Drawing.Size(261, 21);
|
||||
this.tbvname.TabIndex = 7;
|
||||
this.tbvname.Text = "v.name";
|
||||
this.tbvname.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Location = new System.Drawing.Point(16, 80);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(43, 12);
|
||||
this.label3.TabIndex = 6;
|
||||
this.label3.Text = "vname";
|
||||
//
|
||||
// tblot
|
||||
//
|
||||
this.tblot.Location = new System.Drawing.Point(69, 52);
|
||||
this.tblot.Name = "tblot";
|
||||
this.tblot.Size = new System.Drawing.Size(261, 21);
|
||||
this.tblot.TabIndex = 5;
|
||||
this.tblot.Text = "v.lot";
|
||||
this.tblot.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
//
|
||||
// label4
|
||||
//
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Location = new System.Drawing.Point(41, 55);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(18, 12);
|
||||
this.label4.TabIndex = 4;
|
||||
this.label4.Text = "lot";
|
||||
//
|
||||
// tbpart
|
||||
//
|
||||
this.tbpart.Location = new System.Drawing.Point(69, 185);
|
||||
this.tbpart.Name = "tbpart";
|
||||
this.tbpart.Size = new System.Drawing.Size(261, 21);
|
||||
this.tbpart.TabIndex = 9;
|
||||
this.tbpart.Text = "part";
|
||||
this.tbpart.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
//
|
||||
// label5
|
||||
//
|
||||
this.label5.AutoSize = true;
|
||||
this.label5.Location = new System.Drawing.Point(33, 188);
|
||||
this.label5.Name = "label5";
|
||||
this.label5.Size = new System.Drawing.Size(26, 12);
|
||||
this.label5.TabIndex = 8;
|
||||
this.label5.Text = "part";
|
||||
//
|
||||
// label6
|
||||
//
|
||||
this.label6.AutoSize = true;
|
||||
this.label6.Location = new System.Drawing.Point(23, 223);
|
||||
this.label6.Name = "label6";
|
||||
this.label6.Size = new System.Drawing.Size(36, 12);
|
||||
this.label6.TabIndex = 8;
|
||||
this.label6.Text = "batch";
|
||||
//
|
||||
// tbbatch
|
||||
//
|
||||
this.tbbatch.Location = new System.Drawing.Point(69, 220);
|
||||
this.tbbatch.Name = "tbbatch";
|
||||
this.tbbatch.Size = new System.Drawing.Size(261, 21);
|
||||
this.tbbatch.TabIndex = 9;
|
||||
this.tbbatch.Text = "batch";
|
||||
this.tbbatch.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
//
|
||||
// tbbadge
|
||||
//
|
||||
this.tbbadge.Location = new System.Drawing.Point(69, 247);
|
||||
this.tbbadge.Name = "tbbadge";
|
||||
this.tbbadge.Size = new System.Drawing.Size(261, 21);
|
||||
this.tbbadge.TabIndex = 11;
|
||||
this.tbbadge.Text = "badge";
|
||||
this.tbbadge.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
//
|
||||
// label7
|
||||
//
|
||||
this.label7.AutoSize = true;
|
||||
this.label7.Location = new System.Drawing.Point(19, 250);
|
||||
this.label7.Name = "label7";
|
||||
this.label7.Size = new System.Drawing.Size(40, 12);
|
||||
this.label7.TabIndex = 10;
|
||||
this.label7.Text = "badge";
|
||||
//
|
||||
// tbinch
|
||||
//
|
||||
this.tbinch.Location = new System.Drawing.Point(69, 274);
|
||||
this.tbinch.Name = "tbinch";
|
||||
this.tbinch.Size = new System.Drawing.Size(261, 21);
|
||||
this.tbinch.TabIndex = 13;
|
||||
this.tbinch.Text = "7";
|
||||
this.tbinch.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
//
|
||||
// label8
|
||||
//
|
||||
this.label8.AutoSize = true;
|
||||
this.label8.Location = new System.Drawing.Point(30, 277);
|
||||
this.label8.Name = "label8";
|
||||
this.label8.Size = new System.Drawing.Size(29, 12);
|
||||
this.label8.TabIndex = 12;
|
||||
this.label8.Text = "inch";
|
||||
//
|
||||
// label9
|
||||
//
|
||||
this.label9.AutoSize = true;
|
||||
this.label9.Location = new System.Drawing.Point(33, 161);
|
||||
this.label9.Name = "label9";
|
||||
this.label9.Size = new System.Drawing.Size(26, 12);
|
||||
this.label9.TabIndex = 8;
|
||||
this.label9.Text = "mfg";
|
||||
//
|
||||
// tbmfg
|
||||
//
|
||||
this.tbmfg.Location = new System.Drawing.Point(69, 158);
|
||||
this.tbmfg.Name = "tbmfg";
|
||||
this.tbmfg.Size = new System.Drawing.Size(261, 21);
|
||||
this.tbmfg.TabIndex = 9;
|
||||
this.tbmfg.Text = "2325";
|
||||
this.tbmfg.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
//
|
||||
// label10
|
||||
//
|
||||
this.label10.AutoSize = true;
|
||||
this.label10.Location = new System.Drawing.Point(37, 107);
|
||||
this.label10.Name = "label10";
|
||||
this.label10.Size = new System.Drawing.Size(22, 12);
|
||||
this.label10.TabIndex = 8;
|
||||
this.label10.Text = "qty";
|
||||
//
|
||||
// tbqty
|
||||
//
|
||||
this.tbqty.Location = new System.Drawing.Point(69, 104);
|
||||
this.tbqty.Name = "tbqty";
|
||||
this.tbqty.Size = new System.Drawing.Size(261, 21);
|
||||
this.tbqty.TabIndex = 9;
|
||||
this.tbqty.Text = "1000";
|
||||
this.tbqty.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
//
|
||||
// tbeqid
|
||||
//
|
||||
this.tbeqid.Location = new System.Drawing.Point(69, 301);
|
||||
this.tbeqid.Name = "tbeqid";
|
||||
this.tbeqid.Size = new System.Drawing.Size(100, 21);
|
||||
this.tbeqid.TabIndex = 15;
|
||||
this.tbeqid.Text = "R0";
|
||||
this.tbeqid.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
//
|
||||
// label11
|
||||
//
|
||||
this.label11.AutoSize = true;
|
||||
this.label11.Location = new System.Drawing.Point(40, 304);
|
||||
this.label11.Name = "label11";
|
||||
this.label11.Size = new System.Drawing.Size(19, 12);
|
||||
this.label11.TabIndex = 14;
|
||||
this.label11.Text = "eq";
|
||||
//
|
||||
// tbeqname
|
||||
//
|
||||
this.tbeqname.Location = new System.Drawing.Point(175, 301);
|
||||
this.tbeqname.Name = "tbeqname";
|
||||
this.tbeqname.Size = new System.Drawing.Size(155, 21);
|
||||
this.tbeqname.TabIndex = 15;
|
||||
this.tbeqname.Text = "eq name";
|
||||
this.tbeqname.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
//
|
||||
// label12
|
||||
//
|
||||
this.label12.AutoSize = true;
|
||||
this.label12.Location = new System.Drawing.Point(29, 331);
|
||||
this.label12.Name = "label12";
|
||||
this.label12.Size = new System.Drawing.Size(30, 12);
|
||||
this.label12.TabIndex = 12;
|
||||
this.label12.Text = "oper";
|
||||
//
|
||||
// tboper
|
||||
//
|
||||
this.tboper.Location = new System.Drawing.Point(69, 328);
|
||||
this.tboper.Name = "tboper";
|
||||
this.tboper.Size = new System.Drawing.Size(261, 21);
|
||||
this.tboper.TabIndex = 13;
|
||||
this.tboper.Text = "chi";
|
||||
this.tboper.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
//
|
||||
// button1
|
||||
//
|
||||
this.button1.Location = new System.Drawing.Point(350, 25);
|
||||
this.button1.Name = "button1";
|
||||
this.button1.Size = new System.Drawing.Size(98, 324);
|
||||
this.button1.TabIndex = 16;
|
||||
this.button1.Text = "post";
|
||||
this.button1.UseVisualStyleBackColor = true;
|
||||
this.button1.Click += new System.EventHandler(this.button1_Click);
|
||||
//
|
||||
// dv1
|
||||
//
|
||||
this.dv1.A_DelCurrentCell = true;
|
||||
this.dv1.A_EnterToTab = true;
|
||||
this.dv1.A_KoreanField = null;
|
||||
this.dv1.A_UpperField = null;
|
||||
this.dv1.A_ViewRownumOnHeader = true;
|
||||
this.dv1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
||||
this.dv1.Location = new System.Drawing.Point(474, 25);
|
||||
this.dv1.Name = "dv1";
|
||||
this.dv1.RowTemplate.Height = 23;
|
||||
this.dv1.Size = new System.Drawing.Size(496, 324);
|
||||
this.dv1.TabIndex = 17;
|
||||
//
|
||||
// button2
|
||||
//
|
||||
this.button2.Location = new System.Drawing.Point(474, 355);
|
||||
this.button2.Name = "button2";
|
||||
this.button2.Size = new System.Drawing.Size(496, 44);
|
||||
this.button2.TabIndex = 18;
|
||||
this.button2.Text = "Read";
|
||||
this.button2.UseVisualStyleBackColor = true;
|
||||
this.button2.Click += new System.EventHandler(this.button2_Click);
|
||||
//
|
||||
// fSendInboutData
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(997, 407);
|
||||
this.Controls.Add(this.button2);
|
||||
this.Controls.Add(this.dv1);
|
||||
this.Controls.Add(this.button1);
|
||||
this.Controls.Add(this.tbeqname);
|
||||
this.Controls.Add(this.tbeqid);
|
||||
this.Controls.Add(this.label11);
|
||||
this.Controls.Add(this.tboper);
|
||||
this.Controls.Add(this.label12);
|
||||
this.Controls.Add(this.tbinch);
|
||||
this.Controls.Add(this.label8);
|
||||
this.Controls.Add(this.tbbadge);
|
||||
this.Controls.Add(this.label7);
|
||||
this.Controls.Add(this.tbbatch);
|
||||
this.Controls.Add(this.label6);
|
||||
this.Controls.Add(this.tbqty);
|
||||
this.Controls.Add(this.label10);
|
||||
this.Controls.Add(this.tbmfg);
|
||||
this.Controls.Add(this.label9);
|
||||
this.Controls.Add(this.tbpart);
|
||||
this.Controls.Add(this.label5);
|
||||
this.Controls.Add(this.tbvname);
|
||||
this.Controls.Add(this.label3);
|
||||
this.Controls.Add(this.tblot);
|
||||
this.Controls.Add(this.label4);
|
||||
this.Controls.Add(this.tbrid);
|
||||
this.Controls.Add(this.label2);
|
||||
this.Controls.Add(this.tbsid);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Name = "fSendInboutData";
|
||||
this.Text = "fSendInboutData";
|
||||
this.Load += new System.EventHandler(this.fSendInboutData_Load);
|
||||
((System.ComponentModel.ISupportInitialize)(this.dv1)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.TextBox tbsid;
|
||||
private System.Windows.Forms.TextBox tbrid;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.TextBox tbvname;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.TextBox tblot;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.TextBox tbpart;
|
||||
private System.Windows.Forms.Label label5;
|
||||
private System.Windows.Forms.Label label6;
|
||||
private System.Windows.Forms.TextBox tbbatch;
|
||||
private System.Windows.Forms.TextBox tbbadge;
|
||||
private System.Windows.Forms.Label label7;
|
||||
private System.Windows.Forms.TextBox tbinch;
|
||||
private System.Windows.Forms.Label label8;
|
||||
private System.Windows.Forms.Label label9;
|
||||
private System.Windows.Forms.TextBox tbmfg;
|
||||
private System.Windows.Forms.Label label10;
|
||||
private System.Windows.Forms.TextBox tbqty;
|
||||
private System.Windows.Forms.TextBox tbeqid;
|
||||
private System.Windows.Forms.Label label11;
|
||||
private System.Windows.Forms.TextBox tbeqname;
|
||||
private System.Windows.Forms.Label label12;
|
||||
private System.Windows.Forms.TextBox tboper;
|
||||
private System.Windows.Forms.Button button1;
|
||||
private arCtl.arDatagridView dv1;
|
||||
private System.Windows.Forms.Button button2;
|
||||
}
|
||||
}
|
||||
69
Handler/Project/Dialog/Debug/fSendInboutData.cs
Normal file
69
Handler/Project/Dialog/Debug/fSendInboutData.cs
Normal file
@@ -0,0 +1,69 @@
|
||||
using AR;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Project.Dialog.Debug
|
||||
{
|
||||
public partial class fSendInboutData : Form
|
||||
{
|
||||
public fSendInboutData()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public class reelinfo
|
||||
{
|
||||
public string ReelId { get; set; }
|
||||
public string C { get; set; }
|
||||
public reelinfo()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
private void button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
//post
|
||||
|
||||
var reelinfo = new
|
||||
{
|
||||
AMKOR_SID = tbsid.Text,
|
||||
AMKOR_BATCH = tbbatch.Text,
|
||||
REEL_ID = tbrid.Text,
|
||||
REEL_VENDOR_LOT = tblot.Text,
|
||||
REEL_AMKOR_SID = tbsid.Text,
|
||||
REEL_QTY = tbqty.Text,
|
||||
REEL_MANUFACTURER = tbvname.Text,
|
||||
REEL_PRODUCTION_DATE = tbmfg.Text,
|
||||
REEL_INCH_INFO = tbinch.Text,
|
||||
REEL_PART_NUM = tbpart.Text,
|
||||
EQP_ID = tbeqid.Text,
|
||||
EQP_NAME = tbeqname.Text,
|
||||
BADGE = tbbadge.Text,
|
||||
OPER_NAME = tboper.Text,
|
||||
HOST_NAME = System.Net.Dns.GetHostEntry("").HostName,
|
||||
};
|
||||
UTIL.MsgE("Not supported");
|
||||
//var rlt = Amkor.RestfulService.Inbound_label_attach_reel_info(reelinfo, out string errmsg);
|
||||
//if (rlt == false) UTIL.MsgE(errmsg);
|
||||
|
||||
}
|
||||
|
||||
private void button2_Click(object sender, EventArgs e)
|
||||
{
|
||||
//read
|
||||
}
|
||||
|
||||
private void fSendInboutData_Load(object sender, EventArgs e)
|
||||
{
|
||||
tbeqid.Text = AR.SETTING.Data.MCID;
|
||||
tbeqname.Text = $"Label Attach {tbeqid.Text}";
|
||||
}
|
||||
}
|
||||
}
|
||||
120
Handler/Project/Dialog/Debug/fSendInboutData.resx
Normal file
120
Handler/Project/Dialog/Debug/fSendInboutData.resx
Normal file
@@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
1734
Handler/Project/Dialog/Model_Motion.Designer.cs
generated
Normal file
1734
Handler/Project/Dialog/Model_Motion.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
1462
Handler/Project/Dialog/Model_Motion.cs
Normal file
1462
Handler/Project/Dialog/Model_Motion.cs
Normal file
File diff suppressed because it is too large
Load Diff
2093
Handler/Project/Dialog/Model_Motion.resx
Normal file
2093
Handler/Project/Dialog/Model_Motion.resx
Normal file
File diff suppressed because it is too large
Load Diff
1060
Handler/Project/Dialog/Model_Motion_Desc.Designer.cs
generated
Normal file
1060
Handler/Project/Dialog/Model_Motion_Desc.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
894
Handler/Project/Dialog/Model_Motion_Desc.cs
Normal file
894
Handler/Project/Dialog/Model_Motion_Desc.cs
Normal file
@@ -0,0 +1,894 @@
|
||||
#pragma warning disable IDE1006 // 명명 스타일
|
||||
|
||||
using AR;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
||||
|
||||
namespace Project.Dialog
|
||||
{
|
||||
public partial class Model_Motion_Desc : Form
|
||||
{
|
||||
public string Value = string.Empty;
|
||||
short axisIndex = 0;
|
||||
eAxis axis = eAxis.Z_THETA;//
|
||||
Color sbBackColor = Color.FromArgb(200, 200, 200);
|
||||
DataSet1 ds;
|
||||
|
||||
public Model_Motion_Desc(DataSet1 ds_)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
this.ds = ds_;
|
||||
//this.bs.Filter = string.Empty;
|
||||
//this.bsPos.Filter = string.Empty;
|
||||
|
||||
|
||||
this.bs.DataSource = ds_;
|
||||
this.bsPos.DataSource = ds_;
|
||||
|
||||
//this.bs.DataMember = string.Empty;
|
||||
//this.bsPos.DataMember = string.Empty;
|
||||
|
||||
if (System.Diagnostics.Debugger.IsAttached == false)
|
||||
{
|
||||
// fb = new Dialog.fBlurPanel();
|
||||
//fb.Show();
|
||||
}
|
||||
|
||||
this.KeyPreview = true;
|
||||
this.KeyDown += (s1, e1) => { if (e1.KeyCode == Keys.Escape) this.Close(); };
|
||||
this.StartPosition = FormStartPosition.CenterScreen;
|
||||
this.FormClosed += __Closed;
|
||||
|
||||
var axlist = Enum.GetNames(typeof(eAxis));
|
||||
var axvalues = Enum.GetValues(typeof(eAxis));
|
||||
|
||||
var preValueList = new List<ushort>();
|
||||
|
||||
//모터설정값을 보고 해당 모터의 목록을 표시한다.
|
||||
//사용하지 않는 축은 표시하지 않는다
|
||||
for (int i = 0; i < SETTING.System.MotaxisCount; i++)
|
||||
{
|
||||
var axis = (eAxis)i;
|
||||
var axisname = (eAxisName)i;
|
||||
var axTitle = axisname.ToString();// axis.ToString();
|
||||
|
||||
if (PUB.system_mot.UseAxis(i) == false) continue;// axTitle = "Disable";
|
||||
if (axTitle.Equals(i.ToString())) axTitle = "(No Name)";
|
||||
this.dvMot.Rows.Add(
|
||||
new string[] {
|
||||
i.ToString(), axTitle, string.Empty, string.Empty, string.Empty,
|
||||
string.Empty, string.Empty, string.Empty, string.Empty, string.Empty,
|
||||
string.Empty
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void __Load(object sender, EventArgs e)
|
||||
{
|
||||
this.Show();
|
||||
////'Application.DoEvents();
|
||||
|
||||
//this.ds1.Clear();
|
||||
//this.ds1.MCModel.Merge(Pub.mdm.dataSet.MCModel);
|
||||
//this.ds1.MCModel.AcceptChanges();
|
||||
//this.ds1.MCModel.TableNewRow += Model_TableNewRow;
|
||||
|
||||
this.bs.Filter = "isnull(title,'') <> ''";
|
||||
this.bsPos.Filter = "isnull(title,'') = '' and isnull(motindex,-1) = -1";
|
||||
this.tmDisplay.Start();
|
||||
|
||||
//button7.Enabled = !Pub.mot.HasHomeSetOff;
|
||||
//dispal current
|
||||
if (PUB.Result.isSetmModel)
|
||||
{
|
||||
arLabel18.Text = PUB.Result.mModel.Title;
|
||||
//find data
|
||||
var datas = this.ds1.MCModel.Select("", this.bs.Sort);
|
||||
for (int i = 0; i < datas.Length; i++)
|
||||
{
|
||||
if (datas[i]["Title"].ToString() == PUB.Result.mModel.Title)
|
||||
{
|
||||
this.bs.Position = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else arLabel18.Text = "--";
|
||||
|
||||
if (this.ds1.MCModel.Rows.Count < 1)
|
||||
{
|
||||
var newdr = this.ds1.MCModel.NewMCModelRow();
|
||||
newdr.Title = "Default";
|
||||
newdr.pidx = -1;
|
||||
newdr.PosIndex = -1;
|
||||
newdr.idx = ds1.MCModel.Rows.Count + 1;
|
||||
this.ds1.MCModel.AddMCModelRow(newdr);
|
||||
}
|
||||
|
||||
PUB.log.RaiseMsg += log_RaiseMsg;
|
||||
refreshtreen();
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void __Closed(object sender, FormClosedEventArgs e)
|
||||
{
|
||||
//if (fb != null) fb.Dispose();
|
||||
this.tmDisplay.Enabled = false;
|
||||
}
|
||||
|
||||
void log_RaiseMsg(DateTime LogTime, string TypeStr, string Message)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void tmDisplay_Tick(object sender, EventArgs e)
|
||||
{
|
||||
this.Text = "MODEL(MOTION) SETTING";
|
||||
|
||||
if (PUB.mot.IsInit == false)
|
||||
{
|
||||
//if (groupBox3.Enabled == true) groupBox3.Enabled = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
//if (groupBox3.Enabled == false) groupBox3.Enabled = true;
|
||||
|
||||
//각축별 기본 상태를 표시해준다.
|
||||
dvMot.SuspendLayout();
|
||||
for (int r = 0; r < dvMot.RowCount; r++) // 오류수정 2111221
|
||||
{
|
||||
var row = this.dvMot.Rows[r];
|
||||
var axis = short.Parse(row.Cells[0].Value.ToString());
|
||||
row.Cells[0].Style.BackColor = PUB.mot.IsServOn(axis) ? Color.Lime : Color.Tomato;
|
||||
row.Cells[2].Value = $"{PUB.mot.GetCmdPos(axis)}";
|
||||
row.Cells[3].Value = $"{PUB.mot.GetActPos(axis)}";
|
||||
row.Cells[4].Style.BackColor = PUB.mot.IsOrg(axis) ? Color.SkyBlue : Color.Gray;
|
||||
row.Cells[5].Style.BackColor = PUB.mot.IsLimitN(axis) ? Color.Red : Color.Gray;
|
||||
row.Cells[6].Style.BackColor = PUB.mot.IsLimitP(axis) ? Color.Red : Color.Gray;
|
||||
row.Cells[7].Style.BackColor = PUB.mot.IsInp(axis) ? Color.SkyBlue : Color.Gray;
|
||||
row.Cells[8].Style.BackColor = PUB.mot.IsServAlarm(axis) ? Color.Red : Color.Gray;
|
||||
row.Cells[9].Style.BackColor = PUB.mot.IsHomeSet(axis) ? Color.Green : Color.Gray;
|
||||
}
|
||||
dvMot.ResumeLayout();
|
||||
}
|
||||
// this.tblFG.Invalidate();
|
||||
}
|
||||
|
||||
private void dv_DataError(object sender, DataGridViewDataErrorEventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 상단목록에서 모션을 선택한 경우
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void MotAxisSelect(int axisindex)
|
||||
{
|
||||
|
||||
|
||||
RefreshMotorPosition();
|
||||
}
|
||||
|
||||
private void bs_CurrentChanged_1(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
//BindingData();
|
||||
}
|
||||
void RefreshMotorPosition()
|
||||
{
|
||||
var drv = this.bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
if (dvMot.SelectedCells.Count < 1) return;
|
||||
var dr = drv.Row as DataSet1.MCModelRow;
|
||||
|
||||
//var rowindex = dvMot.SelectedCells[0].RowIndex;
|
||||
//var row = dvMot.Rows[rowindex];
|
||||
//var axisIndex = short.Parse(row.Cells[0].Value.ToString());
|
||||
//var axis = (eAxis)this.axisIndex;
|
||||
//var axisTitle = row.Cells[1].Value.ToString();
|
||||
{
|
||||
|
||||
|
||||
//위치정보 표시
|
||||
bsPos.Filter = string.Format("pidx={0} and motindex = {1}", dr.idx, this.axisIndex);
|
||||
|
||||
////(위치정보) 데이터수량이 맞지 않으면 재 생성한다
|
||||
//string[] list = null;
|
||||
//Array val = null;
|
||||
//Type axType = null;
|
||||
//var axis = (eAxis)axisIndex;
|
||||
|
||||
//if (axis == eAxis.X2_FRT || axis == eAxis.X3_RER) axType = typeof(eX2SHTLoc);
|
||||
//else if (axis == eAxis.X1_TOP) axType = typeof(eX1TOPLoc);
|
||||
//else if (axis == eAxis.Y1_PIK) axType = typeof(eY1PIKLoc);
|
||||
//else if (axis == eAxis.Y2_PRECLEAN) axType = typeof(eY2BRSLoc);
|
||||
//else if (axis == eAxis.Y3_LASER) axType = typeof(eY3LSRLoc);
|
||||
//else if (axis == eAxis.Y4_VIS) axType = typeof(eY4VISLoc); //전용으로바꿔야함
|
||||
|
||||
//else if (axis == eAxis.Z1_PIK) axType = typeof(eZ1PIKLoc);
|
||||
//else if (axis == eAxis.Z2_PRECLEAN) axType = typeof(eZ2BRSLoc);
|
||||
//else if (axis == eAxis.Z3_LASER) axType = typeof(eZ3LSRLoc);
|
||||
//else if (axis == eAxis.Z4_VISION) axType = typeof(eZ4VISLoc);//전용으로바꿔야함
|
||||
|
||||
|
||||
//else if (axis == eAxis.L_REAR || axis == eAxis.L_FRNT) axType = typeof(eLDLoc);
|
||||
//else if (axis == eAxis.UR_NG || axis == eAxis.UR_OK || axis == eAxis.UF_NG || axis == eAxis.UF_OK) axType = typeof(eUDLoc);
|
||||
|
||||
//if (axType == null)
|
||||
//{
|
||||
// Util.MsgE("지정한 축에 대한 위치정보가 지정되지 않았습니다");
|
||||
// return;
|
||||
//}
|
||||
|
||||
|
||||
//list = Enum.GetNames(axType);
|
||||
//val = Enum.GetValues(axType);
|
||||
|
||||
//var sb = new System.Text.StringBuilder();
|
||||
//var cntI = 0;
|
||||
//var cntE = 0;
|
||||
//var cntD = 0;
|
||||
|
||||
////posidx == -1인 데이터는 모두 소거한다
|
||||
//var dellist = ds1.MCModel.Where(t => t.pidx == dr.idx && t.MotIndex == this.axisIndex && t.PosIndex == -1).ToList(); //메인목록은 남겨둔다
|
||||
//cntD += dellist.Count();
|
||||
//foreach (var item in dellist)
|
||||
// item.Delete();
|
||||
//ds1.MCModel.AcceptChanges();
|
||||
|
||||
////모든데이터의 체크상태를 off한다.
|
||||
//var alllist = this.ds1.MCModel.Where(t => t.pidx == dr.idx && t.MotIndex == this.axisIndex);
|
||||
//foreach (var item in alllist)
|
||||
// item.Check = false;
|
||||
//ds1.MCModel.AcceptChanges();
|
||||
|
||||
//for (int i = 0; i < list.Length; i++)
|
||||
//{
|
||||
// var arrTitle = list[i];
|
||||
// var vv = val.GetValue(i);
|
||||
// var arrIndex = (byte)vv;// ((eAxis)(val.GetValue(i)));
|
||||
// if (arrIndex < 50) continue; //여기는 예약된 위치값이므로 사용하지 않는다
|
||||
// var targetem = Enum.Parse(axType, vv.ToString());
|
||||
|
||||
// //이 값이 데이터가 없다면 추가하고, 있다면 이름을 검사해서 결과를 안내한다
|
||||
// var pDr = this.ds1.MCModel.Where(t => t.pidx == dr.idx && t.PosIndex == arrIndex && t.MotIndex == axisIndex).FirstOrDefault();
|
||||
// if (pDr == null)
|
||||
// {
|
||||
// //cntI += 1;
|
||||
// //var newdr = this.ds1.MCModel.NewMCModelRow();
|
||||
|
||||
// //if (ds1.MCModel.Rows.Count == 0) newdr.idx = 1;
|
||||
// //else newdr.idx = ds1.MCModel.Max(t => t.idx) + 1;
|
||||
|
||||
// //newdr.pidx = dr.idx;
|
||||
// //newdr.MotIndex = this.axisIndex;
|
||||
// //newdr.PosIndex = (short)arrIndex;
|
||||
// //newdr.PosTitle = arrTitle;
|
||||
// //newdr.Position = 0.0;
|
||||
// //newdr.Speed = 50;
|
||||
// //newdr.SpeedAcc = 100;
|
||||
// //newdr.Check = true;
|
||||
// //newdr.Description = targetem.DescriptionAttr();
|
||||
// //newdr.Category = targetem.CategoryAttr();
|
||||
|
||||
// //this.ds1.MCModel.AddMCModelRow(newdr);
|
||||
// //newdr.EndEdit();
|
||||
// //sb.AppendLine("항목 추가 : " + arrTitle);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// //이름이 다르다면 추가해준다.
|
||||
// //if (pDr.PosTitle != arrTitle)
|
||||
// //{
|
||||
// // sb.AppendLine("(위치)항목 변경 : " + pDr.PosTitle + " => " + arrTitle);
|
||||
// // cntE += 1;
|
||||
// // pDr.PosTitle = arrTitle;
|
||||
// //}
|
||||
// ////pDr.Description = targetem.DescriptionAttr();
|
||||
// ////pDr.Category = targetem.CategoryAttr();
|
||||
// //pDr.EndEdit();
|
||||
|
||||
// pDr.Check = true;
|
||||
// }
|
||||
//}
|
||||
|
||||
////미사용개체 삭제한다
|
||||
|
||||
////var NotUseList = this.ds1.MCModel.Where(t => t.pidx == dr.idx && t.MotIndex == this.axisIndex && t.Check == false).ToList();
|
||||
////cntD += NotUseList.Count();
|
||||
////foreach (var item in NotUseList)
|
||||
//// item.Delete();
|
||||
//ds1.MCModel.AcceptChanges();
|
||||
|
||||
//if (cntI > 0) sb.AppendLine("추가수량 : " + cntI.ToString());
|
||||
//if (cntE > 0) sb.AppendLine("변경수량 : " + cntE.ToString());
|
||||
//if (cntD > 0) sb.AppendLine("삭제수량 : " + cntD.ToString());
|
||||
|
||||
////최종 확정
|
||||
//this.ds1.MCModel.AcceptChanges();
|
||||
|
||||
//if (sb.Length > 0)
|
||||
//{
|
||||
// Util.MsgI(sb.ToString());
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
private void chkJogMoveForce_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void btAdd_Click(object sender, EventArgs e)
|
||||
{
|
||||
var newdr = this.ds1.MCModel.NewMCModelRow();// this.bs.AddNew() as DataRowView;
|
||||
newdr["Title"] = DateTime.Now.ToShortDateString();
|
||||
newdr["pidx"] = -1;
|
||||
newdr.PosIndex = -1;
|
||||
newdr["idx"] = this.ds1.MCModel.Rows.Count + 1;
|
||||
this.ds1.MCModel.AddMCModelRow(newdr);
|
||||
this.bs.Position = this.bs.Count - 1;
|
||||
|
||||
//모터축을 자동 선택해줌
|
||||
//radClick_MotAxisSelect(this.flowLayoutPanel1.Controls[0], null);
|
||||
}
|
||||
|
||||
private void btDel_Click(object sender, EventArgs e)
|
||||
{
|
||||
var drv = this.bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dlg = UTIL.MsgQ("Do you want to delete the currently selected data?");
|
||||
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
|
||||
bs.RemoveCurrent();
|
||||
this.ds1.MCModel.AcceptChanges();
|
||||
}
|
||||
|
||||
private void btSave_Click(object sender, EventArgs e)
|
||||
{
|
||||
//button - save
|
||||
this.dv.Focus();
|
||||
this.Validate();
|
||||
this.bs.EndEdit();
|
||||
this.bsPos.EndEdit();
|
||||
this.Validate();
|
||||
|
||||
this.DialogResult = DialogResult.OK;
|
||||
|
||||
}
|
||||
|
||||
private void button2_Click(object sender, EventArgs e)
|
||||
{
|
||||
//select
|
||||
this.Invalidate();
|
||||
this.bs.EndEdit();
|
||||
var drv = this.bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.MCModelRow;
|
||||
if (dr.Title == "") return;
|
||||
this.Value = dr.Title;
|
||||
DialogResult = System.Windows.Forms.DialogResult.OK;
|
||||
}
|
||||
|
||||
private void button6_Click(object sender, EventArgs e)
|
||||
{
|
||||
//적용
|
||||
|
||||
this.bs.EndEdit();
|
||||
this.bsPos.EndEdit();
|
||||
this.Validate();
|
||||
|
||||
var drv = this.bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.MCModelRow;
|
||||
|
||||
this.Value = dr.Title;
|
||||
|
||||
PUB.Result.mModel.ReadValue(dr.Title, this.ds1.MCModel);
|
||||
if (PUB.Result.mModel.isSet)
|
||||
{
|
||||
PUB.log.AddAT("Motion model selection completed: " + PUB.Result.mModel.Title);
|
||||
}
|
||||
else UTIL.MsgE("Apply failed\n\nTarget model name not found");
|
||||
}
|
||||
|
||||
private void button4_Click(object sender, EventArgs e)
|
||||
{
|
||||
var drv = this.bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.MCModelRow;
|
||||
var dlg = UTIL.MsgQ(string.Format("Do you want to copy the following model information?\n\nModel name: {0}", dr.Title));
|
||||
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
|
||||
|
||||
var newdr = this.ds1.MCModel.NewMCModelRow();
|
||||
UTIL.CopyData(dr, newdr);
|
||||
newdr.Title += "-copy-";
|
||||
newdr.idx = this.ds1.MCModel.OrderByDescending(t => t.idx).FirstOrDefault().idx + 1;
|
||||
newdr.EndEdit();
|
||||
this.ds1.MCModel.AddMCModelRow(newdr);
|
||||
if (this.bs.Count > 0) this.bs.Position = this.bs.Count - 1;
|
||||
}
|
||||
|
||||
private void arDatagridView2_CellClick(object sender, DataGridViewCellEventArgs e)
|
||||
{
|
||||
//position click
|
||||
var dv = sender as DataGridView;
|
||||
var col = this.dvPosition.Columns[e.ColumnIndex];
|
||||
var colName = col.Name.ToLower();
|
||||
if (colName == "btgo")
|
||||
{
|
||||
if (PUB.mot.HasHomeSetOff)
|
||||
{
|
||||
UTIL.MsgE("Motion homing not completed\nPlease run 'Device Initialization' from the main screen");
|
||||
return;
|
||||
}
|
||||
//현재값으로 모터를 이동
|
||||
//현재위치값으로 설정
|
||||
var cell = dv.Rows[e.RowIndex].Cells["btpos"];
|
||||
var value = (double)cell.Value;
|
||||
var drv = this.bsPos.Current as DataRowView;
|
||||
var drParent = drv.Row as DataSet1.MCModelRow;
|
||||
|
||||
//일반 속도값을 찾는다
|
||||
//var speedDr = drParent.Speed;// this.ds1.MCModel.Where(t => t.pidx == drParent.idx && t.MotIndex == axisIndex && t.PosIndex == -1 && t.SpdIndex == (int)eAxisSpeed.Normal).FirstOrDefault();
|
||||
var speed = drParent.Speed;// speedDr.Speed;// (double)this.nudJogVel.Value;
|
||||
var acc = drParent.SpeedAcc;// speedDr.SpeedAcc;// ; (double)nudAcc.Value;
|
||||
|
||||
|
||||
var relative = false;
|
||||
//if (ctl.motCommand == arFrame.Control.MotCommandButton.eCommand.RelativeMove)
|
||||
// relative = true;
|
||||
|
||||
var msg = string.Format("모션의 위치를 변경 하시겠습니까\n" +
|
||||
"축 : {0}\n" +
|
||||
"현재위치 : {1}\n" +
|
||||
"대상위치 : {2}\n" +
|
||||
"이동속도 : {3}(가속도:{4})\n" +
|
||||
"이동 시 충돌 가능성이 있는지 반드시 확인 하세요", axis, PUB.mot.GetActPos(axisIndex), value, speed, acc);
|
||||
|
||||
if (UTIL.MsgQ(msg) != System.Windows.Forms.DialogResult.Yes) return;
|
||||
|
||||
var chkJogMoveForce = true;
|
||||
if (!MOT.Move(axis, value, speed, acc, relative, !chkJogMoveForce, !chkJogMoveForce))
|
||||
PUB.log.AddE("MOT:MOVE_:" + axis.ToString() + ",Msg=" + PUB.mot.ErrorMessage);
|
||||
|
||||
|
||||
|
||||
}
|
||||
else if (colName == "btset")
|
||||
{
|
||||
if (PUB.mot.HasHomeSetOff)
|
||||
{
|
||||
UTIL.MsgE("Motion homing not completed\nPlease run 'Device Initialization' from the main screen");
|
||||
return;
|
||||
}
|
||||
|
||||
//현재위치값으로 설정
|
||||
var cell = dv.Rows[e.RowIndex].Cells["btpos"];
|
||||
var value = (double)cell.Value;
|
||||
var nValue = Math.Round(PUB.mot.GetCmdPos(this.axisIndex), 4); //소수점4자리에서 반올림처리한다 210414
|
||||
|
||||
var msg1 = string.Format("모션의 설정값을 변경 하시겠습니까\n" +
|
||||
"축 : {0}\n" +
|
||||
"변경전 : {1}\n" +
|
||||
"변경후 : {2}\n" +
|
||||
"변경 후 '저장'을 눌러야 영구 기록 됩니다", this.axis, value, nValue);
|
||||
|
||||
if (UTIL.MsgQ(msg1) != System.Windows.Forms.DialogResult.Yes) return;
|
||||
cell.Value = nValue;
|
||||
}
|
||||
else if (colName == "btpos")
|
||||
{
|
||||
//현재값 변경 팝업
|
||||
var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex];
|
||||
var value = (double)cell.Value;
|
||||
value = PUB.ChangeValuePopup(value, "위치 입력");
|
||||
cell.Value = value;
|
||||
}
|
||||
else if (colName == "btspeed")
|
||||
{
|
||||
//현재값 변경 팝업
|
||||
var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex];
|
||||
var value = (double)cell.Value;
|
||||
value = PUB.ChangeValuePopup(value, "속도 입력");
|
||||
cell.Value = value;
|
||||
}
|
||||
else if (colName == "btacc")
|
||||
{
|
||||
//현재값 변경 팝업
|
||||
var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex];
|
||||
var value = (double)cell.Value;
|
||||
value = PUB.ChangeValuePopup(value, "가속도 입력");
|
||||
cell.Value = value;
|
||||
}
|
||||
else if (colName == "btdcc")
|
||||
{
|
||||
//현재값 변경 팝업
|
||||
var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex];
|
||||
if (cell.Value.ToString().isEmpty()) cell.Value = "0";
|
||||
var value = (double)cell.Value;
|
||||
value = PUB.ChangeValuePopup(value, "감속도 입력");
|
||||
cell.Value = value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void toolStripButton1_Click(object sender, EventArgs e)
|
||||
{
|
||||
var dlg = UTIL.MsgQ("Do you want to batch change the speed of all movement coordinates?");
|
||||
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
|
||||
var value = PUB.ChangeValuePopup(100.0, "일괄 속도 변경");
|
||||
|
||||
for (int i = 0; i < this.bsPos.Count; i++)
|
||||
{
|
||||
this.bsPos.Position = i;
|
||||
var drv = this.bsPos.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.MCModelRow;
|
||||
dr.Speed = value;
|
||||
dr.EndEdit();
|
||||
}
|
||||
}
|
||||
|
||||
private void toolStripButton2_Click_2(object sender, EventArgs e)
|
||||
{
|
||||
var dlg = UTIL.MsgQ("Do you want to batch change the acceleration/deceleration of all movement coordinates?");
|
||||
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
|
||||
var value = PUB.ChangeValuePopup(100.0, "일괄 가(감)속도 변경");
|
||||
|
||||
for (int i = 0; i < this.bsPos.Count; i++)
|
||||
{
|
||||
this.bsPos.Position = i;
|
||||
var drv = this.bsPos.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.MCModelRow;
|
||||
dr.SpeedAcc = value;
|
||||
dr.EndEdit();
|
||||
}
|
||||
}
|
||||
|
||||
private void toolStripButton3_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
var dlg = UTIL.MsgQ("Do you want to batch change the deceleration of all movement coordinates?");
|
||||
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
|
||||
var value = PUB.ChangeValuePopup(0, "일괄 감속도 변경");
|
||||
|
||||
for (int i = 0; i < this.bsPos.Count; i++)
|
||||
{
|
||||
this.bsPos.Position = i;
|
||||
var drv = this.bsPos.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.MCModelRow;
|
||||
dr.SpeedDcc = value;
|
||||
dr.EndEdit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void dvMot_SelectionChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (dvMot.SelectedRows.Count < 1)
|
||||
{
|
||||
Console.WriteLine("no selecte");
|
||||
this.axisIndex = -1;
|
||||
this.axis = (eAxis)axisIndex;
|
||||
}
|
||||
else
|
||||
{
|
||||
var selrow = dvMot.SelectedRows[0];
|
||||
this.axisIndex = short.Parse(selrow.Cells["dvc_axis"].Value.ToString());
|
||||
this.axis = (eAxis)axisIndex;
|
||||
MotAxisSelect(this.axisIndex);
|
||||
Console.WriteLine($"select indx {axisIndex}");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void toolStripButton5_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.Validate();
|
||||
this.bs.EndEdit();
|
||||
this.bsPos.EndEdit();
|
||||
|
||||
//using (var f = new Dialog.Motion_MoveToGroup(this.ds,arLabel18.Text))
|
||||
//{
|
||||
// if (f.ShowDialog() == DialogResult.OK)
|
||||
// {
|
||||
// this.bs.EndEdit();
|
||||
// this.bsPos.EndEdit();
|
||||
// }
|
||||
//}
|
||||
|
||||
}
|
||||
|
||||
void refreshtreen()
|
||||
{
|
||||
//모든데이터를 가져와서 트리뷰를 처리한다.
|
||||
|
||||
var cat = this.ds.MCModel.GroupBy(t => t.Category).ToList();
|
||||
var catorders = cat.OrderBy(t => t.Key).ToList();
|
||||
|
||||
//var cnt = 0;
|
||||
this.treeView1.Nodes.Clear();
|
||||
foreach (var item in catorders)
|
||||
{
|
||||
if (item.Key.isEmpty()) continue;
|
||||
var catenames = item.Key.Split(',');
|
||||
foreach (var catename in catenames)
|
||||
{
|
||||
var grpname = catename.Split('|')[0];
|
||||
if (catename.Split('|').Length < 2) continue;
|
||||
var itemname = catename.Split('|')[1];
|
||||
if (treeView1.Nodes.ContainsKey(grpname) == false)
|
||||
{
|
||||
var nd = treeView1.Nodes.Add(grpname, grpname);
|
||||
nd.Nodes.Add(itemname);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (itemname.StartsWith("F01"))// == "F01_FSOCKET_BTM")
|
||||
{
|
||||
|
||||
}
|
||||
var nd = treeView1.Nodes[grpname];
|
||||
if (nd.Nodes.ContainsKey(itemname) == false)
|
||||
{
|
||||
var snd = nd.Nodes.Add(itemname, itemname);
|
||||
if (itemname.StartsWith("R"))
|
||||
snd.ForeColor = Color.Blue;
|
||||
else if (itemname.StartsWith("T"))
|
||||
snd.ForeColor = Color.Magenta;
|
||||
}
|
||||
else
|
||||
{
|
||||
var snd = nd.Nodes[itemname];
|
||||
if (itemname.StartsWith("R"))
|
||||
snd.ForeColor = Color.Blue;
|
||||
else if (itemname.StartsWith("T"))
|
||||
snd.ForeColor = Color.Magenta;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
treeView1.ExpandAll();
|
||||
if (treeView1.Nodes.Count > 0)
|
||||
treeView1.SelectedNode = this.treeView1.Nodes[0];
|
||||
|
||||
}
|
||||
void refreshlist()
|
||||
{
|
||||
this.listView1.Clear();
|
||||
this.listView1.FullRowSelect = true;
|
||||
this.listView1.View = View.Details;
|
||||
this.listView1.Columns.Add("item");
|
||||
this.listView1.Columns[0].Width = (int)(this.listView1.Width - listView1.Width * 0.1f);
|
||||
this.listView1.GridLines = true;
|
||||
this.listView1.AllowDrop = true;
|
||||
|
||||
|
||||
var drv = this.bsPos.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.MCModelRow;
|
||||
if (dr.Category.isEmpty()) return;
|
||||
|
||||
var catelist = dr.Category.Split(',');
|
||||
List<string> cats = new List<string>();
|
||||
|
||||
|
||||
foreach (var cate in catelist)
|
||||
{
|
||||
if (cate.isEmpty()) continue;
|
||||
if (cats.Contains(cate) == false) cats.Add(cate);
|
||||
}
|
||||
|
||||
foreach (var cate in cats.OrderBy(t=>t))
|
||||
{
|
||||
if (this.listView1.Items.ContainsKey(cate) == false)
|
||||
{
|
||||
var lv = this.listView1.Items.Add(cate, cate, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
//이미 있다.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
private void bsPos_CurrentChanged(object sender, EventArgs e)
|
||||
{
|
||||
//포지션데이터가 움직이면 처리한다.
|
||||
refreshlist();
|
||||
}
|
||||
|
||||
private void toolStripButton1_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
//트립에서 선택된 아이템을 추가한다.
|
||||
var tn = this.treeView1.SelectedNode;
|
||||
if (tn == null) return;
|
||||
if (tn.Level != 1)
|
||||
{
|
||||
if (tn.Nodes.Count < 1)
|
||||
{
|
||||
UTIL.MsgE("No sub items found");
|
||||
return;
|
||||
}
|
||||
|
||||
var dlg = UTIL.MsgQ($"Do you want to add all {tn.Nodes.Count} data items?");
|
||||
if (dlg != DialogResult.Yes) return;
|
||||
var ucnt = 0;
|
||||
foreach (TreeNode node in tn.Nodes)
|
||||
{
|
||||
var value = node.Parent.Text + "|" + node.Text;
|
||||
if (this.listView1.Items.ContainsKey(value) == false)
|
||||
{
|
||||
this.listView1.Items.Add(value);
|
||||
ucnt += 1;
|
||||
}
|
||||
}
|
||||
UTIL.MsgI($"{ucnt} items have been added");
|
||||
//현재목록을 리스트로 만들고 업데이트한.ㄷ
|
||||
var drv = this.bsPos.Current as DataRowView;
|
||||
var dr = drv.Row as DataSet1.MCModelRow;
|
||||
|
||||
List<string> items = new List<string>();
|
||||
|
||||
foreach (ListViewItem item in listView1.Items)
|
||||
items.Add(item.SubItems[0].Text);
|
||||
|
||||
dr.Category = string.Join(",", items);
|
||||
dr.EndEdit();
|
||||
}
|
||||
else
|
||||
{
|
||||
var value = tn.Parent.Text + "|" + tn.Text;
|
||||
if (this.listView1.Items.ContainsKey(value) == false)
|
||||
{
|
||||
this.listView1.Items.Add(value);
|
||||
//현재목록을 리스트로 만들고 업데이트한.ㄷ
|
||||
var drv = this.bsPos.Current as DataRowView;
|
||||
var dr = drv.Row as DataSet1.MCModelRow;
|
||||
|
||||
List<string> items = new List<string>();
|
||||
|
||||
foreach (ListViewItem item in listView1.Items)
|
||||
items.Add(item.SubItems[0].Text);
|
||||
|
||||
dr.Category = string.Join(",", items);
|
||||
dr.EndEdit();
|
||||
|
||||
}
|
||||
else UTIL.MsgE("This item already exists.");
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void toolStripButton2_Click(object sender, EventArgs e)
|
||||
{
|
||||
//선택된 항목을 삭제한다.
|
||||
if (this.listView1.FocusedItem == null) return;
|
||||
this.listView1.Items.Remove(this.listView1.FocusedItem);
|
||||
|
||||
//현재목록을 리스트로 만들고 업데이트한.ㄷ
|
||||
var drv = this.bsPos.Current as DataRowView;
|
||||
var dr = drv.Row as DataSet1.MCModelRow;
|
||||
|
||||
List<string> items = new List<string>();
|
||||
|
||||
foreach (ListViewItem item in listView1.Items)
|
||||
items.Add(item.SubItems[0].Text);
|
||||
|
||||
dr.Category = string.Join(",", items);
|
||||
dr.EndEdit();
|
||||
}
|
||||
|
||||
private void toolStripButton3_Click(object sender, EventArgs e)
|
||||
{
|
||||
refreshlist();
|
||||
}
|
||||
|
||||
private void toolStripButton4_Click(object sender, EventArgs e)
|
||||
{
|
||||
//현재선택된 아이템의 데이터를 표시한다.
|
||||
var tn = this.treeView1.SelectedNode;
|
||||
if (tn == null) return;
|
||||
if (tn.Level == 0)
|
||||
{
|
||||
bsPos.Filter = $"Category like '%{tn.Text}|%'";
|
||||
}
|
||||
else
|
||||
{
|
||||
bsPos.Filter = $"Category like '%{tn.Parent.Text}|{tn.Text}%'";
|
||||
}
|
||||
}
|
||||
|
||||
private void toolStripButton6_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void toolStripButton7_Click(object sender, EventArgs e)
|
||||
{
|
||||
refreshtreen();
|
||||
}
|
||||
|
||||
private void toolStripButton8_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
var tn = treeView1.SelectedNode;
|
||||
if (tn == null) return;
|
||||
|
||||
var old = tn.Text.Trim();
|
||||
var f = new AR.Dialog.fInput("입력",tn.Text);
|
||||
if (f.ShowDialog() != DialogResult.OK) return;
|
||||
|
||||
if (f.ValueString.isEmpty()) return;
|
||||
var targetidx = tn.Level;
|
||||
|
||||
foreach (DataSet1.MCModelRow dr in this.ds.MCModel.Rows)
|
||||
{
|
||||
if (dr.RowState == DataRowState.Deleted || dr.RowState == DataRowState.Detached) continue;
|
||||
|
||||
if (dr.Category.isEmpty()) continue;
|
||||
|
||||
var cats = dr.Category.Split(',');
|
||||
List<string> items = new List<string>();
|
||||
foreach (var cat in cats)
|
||||
{
|
||||
if (cat.isEmpty()) continue;
|
||||
|
||||
var buffer = cat.Split('|');
|
||||
|
||||
if (targetidx == 0)
|
||||
{
|
||||
buffer[targetidx] = buffer[targetidx].Replace(old, f.ValueString);
|
||||
}
|
||||
else
|
||||
{
|
||||
//1번의 경우 변경을 하려면 0번이 일치해야한다.
|
||||
if (buffer[0] == tn.Parent.Text)
|
||||
{
|
||||
buffer[targetidx] = buffer[targetidx].Replace(old, f.ValueString);
|
||||
}
|
||||
}
|
||||
|
||||
items.Add(string.Join("|", buffer));
|
||||
}
|
||||
|
||||
dr.Category = string.Join(",", items.ToArray());
|
||||
dr.EndEdit();
|
||||
}
|
||||
|
||||
refreshtreen();
|
||||
}
|
||||
|
||||
private void toolStripButton9_Click(object sender, EventArgs e)
|
||||
{
|
||||
dvPosition.AutoResizeColumns();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
2179
Handler/Project/Dialog/Model_Motion_Desc.resx
Normal file
2179
Handler/Project/Dialog/Model_Motion_Desc.resx
Normal file
File diff suppressed because it is too large
Load Diff
2035
Handler/Project/Dialog/Model_Operation.Designer.cs
generated
Normal file
2035
Handler/Project/Dialog/Model_Operation.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
680
Handler/Project/Dialog/Model_Operation.cs
Normal file
680
Handler/Project/Dialog/Model_Operation.cs
Normal file
@@ -0,0 +1,680 @@
|
||||
using AR;
|
||||
using Project.Dialog;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Project
|
||||
{
|
||||
public partial class Model_Operation : Form
|
||||
{
|
||||
|
||||
public string Value = string.Empty;
|
||||
public Model_Operation()
|
||||
{
|
||||
InitializeComponent();
|
||||
this.KeyPreview = true;
|
||||
this.KeyDown += (s1, e1) => { if (e1.KeyCode == Keys.Escape) this.Close(); };
|
||||
this.StartPosition = FormStartPosition.CenterScreen;
|
||||
this.FormClosed += __Closed;
|
||||
this.FormClosing += FModelV_FormClosing;
|
||||
this.dv.CellContentClick += dv_CellContentClick;
|
||||
//if (COMM.SETTING.Data.FullScreen) this.WindowState = FormWindowState.Maximized;
|
||||
//this.WindowState = FormWindowState.Normal;
|
||||
dvc_bsave.HeaderText = $"BLoad\n(1~8)";
|
||||
this.panel3.Visible = PUB.UserAdmin;
|
||||
}
|
||||
|
||||
private void FModelV_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
//Pub.sm.setNewStep(StateMachine.eSystemStep.IDLE);
|
||||
if (hasChanged())
|
||||
{
|
||||
var dlg = UTIL.MsgQ("There are unsaved changes.\n" +
|
||||
"If you proceed, the changed data will be lost\n" +
|
||||
"Do you want to proceed?");
|
||||
|
||||
if (dlg != DialogResult.Yes)
|
||||
{
|
||||
e.Cancel = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void __Closed(object sender, FormClosedEventArgs e)
|
||||
{
|
||||
|
||||
this.ds1.OPModel.TableNewRow -= Model_TableNewRow;
|
||||
}
|
||||
|
||||
private void __Load(object sender, EventArgs e)
|
||||
{
|
||||
this.ds1.Clear();
|
||||
this.ds1.OPModel.Merge(PUB.mdm.dataSet.OPModel);
|
||||
this.ds1.OPModel.TableNewRow += Model_TableNewRow;
|
||||
this.tmDisplay.Start();
|
||||
|
||||
//var MotList = PUB.mdm.dataSet.MCModel.GroupBy(t => t.Title).Select(t => t.Key).ToList();
|
||||
//comboBox1.Items.AddRange(MotList.ToArray());
|
||||
|
||||
if (this.ds1.OPModel.Rows.Count < 1)
|
||||
{
|
||||
var newdr = this.ds1.OPModel.NewOPModelRow();
|
||||
newdr.Title = "New Model";
|
||||
this.ds1.OPModel.AddOPModelRow(newdr);
|
||||
UTIL.MsgI("New model information has been added.\n\nThis is the initial setup, so please check each status value.");
|
||||
}
|
||||
|
||||
//dispal current
|
||||
if (PUB.Result.isSetvModel)
|
||||
{
|
||||
arLabel18.Text = PUB.Result.vModel.Title;
|
||||
//find data
|
||||
var datas = this.ds1.OPModel.Select("", this.bs.Sort);
|
||||
for (int i = 0; i < datas.Length; i++)
|
||||
{
|
||||
if (datas[i]["Title"].ToString() == PUB.Result.vModel.Title)
|
||||
{
|
||||
this.bs.Position = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else arLabel18.Text = "--";
|
||||
//chekauth(false);
|
||||
|
||||
//checkBox1.Enabled = checkBox4.Checked;
|
||||
//checkBox2.Enabled = checkBox4.Checked;
|
||||
//checkBox3.Enabled = checkBox4.Checked;
|
||||
|
||||
if (PUB.UserAdmin == false)
|
||||
{
|
||||
//오퍼레이터는 다 못한다
|
||||
dv.EditMode = DataGridViewEditMode.EditProgrammatically;
|
||||
this.btAdd.Visible = false;
|
||||
this.btSave.Visible = false;
|
||||
this.btCopy.Visible = false;
|
||||
this.toolStripSeparator1.Visible = false;
|
||||
this.btDel.Visible = false;
|
||||
}
|
||||
|
||||
if (PUB.sm.Step != eSMStep.IDLE)
|
||||
{
|
||||
btDel.Enabled = false;
|
||||
//btCopy.Enabled = false;
|
||||
toolStripButton10.Visible = false;
|
||||
//Util.MsgE("삭제/복사 작업은 대기 상태일때 가능 합니다");
|
||||
}
|
||||
|
||||
//assig check events
|
||||
foreach (var c in tabPage1.Controls)
|
||||
{
|
||||
if (c.GetType() != typeof(CheckBox)) continue;
|
||||
var chk = c as CheckBox;
|
||||
if (chk.Tag == null) continue;
|
||||
chk.Click += Chk_Option_Check;
|
||||
}
|
||||
foreach (var c in grpApplyWMSinfo.Controls)
|
||||
{
|
||||
if (c.GetType() != typeof(CheckBox)) continue;
|
||||
var chk = c as CheckBox;
|
||||
if (chk.Tag == null) continue;
|
||||
chk.Click += Chk_WMSinfo_Check;
|
||||
}
|
||||
foreach (var c in grpApplySidinfo.Controls)
|
||||
{
|
||||
if (c.GetType() != typeof(CheckBox)) continue;
|
||||
var chk = c as CheckBox;
|
||||
if (chk.Tag == null) continue;
|
||||
chk.Click += Chk_Sidinfo_Check;
|
||||
}
|
||||
foreach (var c in grpapplyjob.Controls)
|
||||
{
|
||||
if (c.GetType() != typeof(CheckBox)) continue;
|
||||
var chk = c as CheckBox;
|
||||
if (chk.Tag == null) continue;
|
||||
chk.Click += Chk_JobInfo_Check;
|
||||
}
|
||||
foreach (var c in GrpSidConvData.Controls)
|
||||
{
|
||||
if (c.GetType() != typeof(CheckBox)) continue;
|
||||
var chk = c as CheckBox;
|
||||
if (chk.Tag == null) continue;
|
||||
chk.Click += Chk_SIDConvData_Check;
|
||||
}
|
||||
}
|
||||
|
||||
private void Chk_Option_Check(object sender, EventArgs e)
|
||||
{
|
||||
var drv = bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.OPModelRow;
|
||||
var chk = sender as CheckBox;
|
||||
dr.vOption = UTIL.SetBitState(dr.vOption, int.Parse(chk.Tag.ToString()), chk.Checked);
|
||||
dr.EndEdit();
|
||||
|
||||
bs_CurrentChanged_1(null, null);
|
||||
}
|
||||
private void Chk_WMSinfo_Check(object sender, EventArgs e)
|
||||
{
|
||||
var drv = bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.OPModelRow;
|
||||
var chk = sender as CheckBox;
|
||||
dr.vWMSInfo = UTIL.SetBitState(dr.vWMSInfo, int.Parse(chk.Tag.ToString()), chk.Checked);
|
||||
dr.EndEdit();
|
||||
|
||||
bs_CurrentChanged_1(null, null);
|
||||
}
|
||||
private void Chk_Sidinfo_Check(object sender, EventArgs e)
|
||||
{
|
||||
var drv = bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.OPModelRow;
|
||||
var chk = sender as CheckBox;
|
||||
dr.vSIDInfo = UTIL.SetBitState(dr.vSIDInfo, int.Parse(chk.Tag.ToString()), chk.Checked);
|
||||
dr.EndEdit();
|
||||
|
||||
bs_CurrentChanged_1(null, null);
|
||||
}
|
||||
private void Chk_JobInfo_Check(object sender, EventArgs e)
|
||||
{
|
||||
var drv = bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.OPModelRow;
|
||||
var chk = sender as CheckBox;
|
||||
dr.vJobInfo = UTIL.SetBitState(dr.vJobInfo, int.Parse(chk.Tag.ToString()), chk.Checked);
|
||||
dr.EndEdit();
|
||||
|
||||
bs_CurrentChanged_1(null, null);
|
||||
}
|
||||
private void Chk_SIDConvData_Check(object sender, EventArgs e)
|
||||
{
|
||||
var drv = bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.OPModelRow;
|
||||
var chk = sender as CheckBox;
|
||||
dr.vSIDConv = UTIL.SetBitState(dr.vSIDConv, int.Parse(chk.Tag.ToString()), chk.Checked);
|
||||
dr.EndEdit();
|
||||
|
||||
bs_CurrentChanged_1(null, null);
|
||||
}
|
||||
#region "Mouse Form Move"
|
||||
|
||||
private Boolean fMove = false;
|
||||
private Point MDownPos;
|
||||
|
||||
private void LbTitle_DoubleClick(object sender, EventArgs e)
|
||||
{
|
||||
if (this.WindowState == FormWindowState.Maximized) this.WindowState = FormWindowState.Normal;
|
||||
else this.WindowState = FormWindowState.Maximized;
|
||||
}
|
||||
private void LbTitle_MouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (fMove)
|
||||
{
|
||||
Point offset = new Point(e.X - MDownPos.X, e.Y - MDownPos.Y);
|
||||
this.Left += offset.X;
|
||||
this.Top += offset.Y;
|
||||
offset = new Point(0, 0);
|
||||
}
|
||||
}
|
||||
private void LbTitle_MouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
fMove = false;
|
||||
}
|
||||
private void LbTitle_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
MDownPos = new Point(e.X, e.Y);
|
||||
fMove = true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
void EntertoTab(Control ctl)
|
||||
{
|
||||
if (ctl.HasChildren)
|
||||
{
|
||||
foreach (var item in ctl.Controls)
|
||||
{
|
||||
if (item.GetType() == typeof(TextBox))
|
||||
{
|
||||
var tb = item as TextBox;
|
||||
tb.KeyDown += (s1, e1) =>
|
||||
{
|
||||
if (e1.KeyCode == Keys.Enter) SendKeys.Send("{TAB}");
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Model_TableNewRow(object sender, DataTableNewRowEventArgs e)
|
||||
{
|
||||
|
||||
e.Row["Title"] = DateTime.Now.ToString("yyMMddHHmmss");
|
||||
e.Row["BCD_1D"] = true;
|
||||
e.Row["BCD_QR"] = false;
|
||||
e.Row["BCD_DM"] = true;
|
||||
//e.Row["guid"] = Guid.NewGuid().ToString();
|
||||
//e.Row["MotionModel"] = "Default";
|
||||
// e.Row["RowCount"] = 5;
|
||||
// e.Row["ColCount"] = 0;
|
||||
// e.Row["Light"] = 50;
|
||||
}
|
||||
|
||||
|
||||
private void bs_CurrentChanged(object sender, EventArgs e)
|
||||
{
|
||||
var drv = this.bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.MCModelRow;
|
||||
}
|
||||
|
||||
private void tmDisplay_Tick(object sender, EventArgs e)
|
||||
{
|
||||
if (VAR.BOOL[eVarBool.Use_Conveyor])
|
||||
{
|
||||
btConvOk.BackColor = Color.Lime;
|
||||
btConvOff.BackColor = Color.White;
|
||||
}
|
||||
else
|
||||
{
|
||||
btConvOk.BackColor = Color.White;
|
||||
btConvOff.BackColor = Color.Lime;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void dv_DataError(object sender, DataGridViewDataErrorEventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
Boolean hasChanged()
|
||||
{
|
||||
this.Validate();
|
||||
this.bs.EndEdit();
|
||||
var chg = this.ds1.OPModel.GetChanges();
|
||||
if (chg == null || chg.Rows.Count < 1) return false;
|
||||
return true;
|
||||
}
|
||||
void selectModel()
|
||||
{
|
||||
//select
|
||||
this.Invalidate();
|
||||
this.bs.EndEdit();
|
||||
var drv = this.bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.OPModelRow;
|
||||
if (dr.Title == "") return;
|
||||
this.Value = dr.Title;
|
||||
SETTING.User.useConv = VAR.BOOL[eVarBool.Use_Conveyor];
|
||||
SETTING.User.Save();
|
||||
DialogResult = System.Windows.Forms.DialogResult.OK;
|
||||
}
|
||||
|
||||
private void toolStripButton2_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
//iocontrol
|
||||
var f = new Dialog.Quick_Control();
|
||||
f.TopMost = true;
|
||||
f.Opacity = 0.95;
|
||||
f.Show();
|
||||
}
|
||||
|
||||
|
||||
|
||||
void dv_CellContentClick(object sender, DataGridViewCellEventArgs e)
|
||||
{
|
||||
if (this.dv.Columns[e.ColumnIndex].DataPropertyName.ToLower() == "spn")
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void tbClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.Close();
|
||||
}
|
||||
|
||||
|
||||
private void textBox1_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
var tb = sender as TextBox;
|
||||
var str = tb.Text.Trim();
|
||||
if (str.isEmpty()) str = "0";
|
||||
var c = Color.FromArgb(int.Parse(str));
|
||||
if (str.Equals("0") == false) tb.BackColor = c;
|
||||
else tb.BackColor = Color.Black;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void toolStripButton5_Click(object sender, EventArgs e)
|
||||
{
|
||||
var drv = this.bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dlg = UTIL.MsgQ("Do you want to delete the currently selected data?");
|
||||
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
|
||||
bs.RemoveCurrent();
|
||||
//this.ds1.Model.AcceptChanges();
|
||||
}
|
||||
|
||||
private void toolStripButton8_Click(object sender, EventArgs e)
|
||||
{
|
||||
var drv = this.bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
|
||||
//button - save
|
||||
this.Validate();
|
||||
this.bs.EndEdit();
|
||||
|
||||
if (hasChanged() == true)
|
||||
{
|
||||
UTIL.MsgE("Need save");
|
||||
return;
|
||||
}
|
||||
|
||||
if (PUB.PasswordCheck() == false)
|
||||
{
|
||||
UTIL.MsgE("Password incorrect");
|
||||
return;
|
||||
}
|
||||
|
||||
var dr = drv.Row as DataSet1.OPModelRow;
|
||||
var oldname = dr.Title;
|
||||
var newname = UTIL.InputBox("input new name", dr.Title);
|
||||
|
||||
if (newname.Item1 == false) return;
|
||||
|
||||
if(dr.Title.Equals(newname.Item2))
|
||||
{
|
||||
UTIL.MsgE("Same Data");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
var dlg = UTIL.MsgQ(string.Format("Do you want to copy the following model information?\n\nNew Model Name : {0}", newname.Item2));
|
||||
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
|
||||
|
||||
var newdr = this.ds1.OPModel.NewOPModelRow();
|
||||
UTIL.CopyData(dr, newdr);
|
||||
newdr.Title = newname.Item2;
|
||||
newdr.idx = this.ds1.OPModel.OrderByDescending(t => t.idx).FirstOrDefault().idx + 1;
|
||||
newdr.EndEdit();
|
||||
this.ds1.OPModel.AddOPModelRow(newdr);
|
||||
if (this.bs.Count > 0) this.bs.Position = this.bs.Count - 1;
|
||||
|
||||
PUB.mdm.dataSet.OPModel.Clear();
|
||||
PUB.mdm.dataSet.OPModel.Merge(this.ds1.OPModel);
|
||||
PUB.mdm.dataSet.AcceptChanges();
|
||||
PUB.mdm.SaveModelV();
|
||||
|
||||
//copy regex
|
||||
var cnt = DB.CopyRegEx(oldname,newname.Item2);
|
||||
PUB.log.AddAT($"model copy(regex : {cnt})");
|
||||
}
|
||||
|
||||
|
||||
private void toolStripButton4_Click(object sender, EventArgs e)
|
||||
{
|
||||
var f = new AR.Dialog.fTouchKeyFull("Please enter model name", DateTime.Now.ToString("yyyyMMddHHmmss"));
|
||||
if (f.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
var newdr = this.ds1.OPModel.NewOPModelRow();
|
||||
newdr.Title = f.tbInput.Text.Trim();
|
||||
newdr.Motion = "Default";
|
||||
this.ds1.OPModel.AddOPModelRow(newdr);
|
||||
if (this.bs.Count > 0) this.bs.Position = this.bs.Count - 1;
|
||||
}
|
||||
}
|
||||
|
||||
private void bs_CurrentChanged_1(object sender, EventArgs e)
|
||||
{
|
||||
//값이바뀌면 허용 바코드 목록을 업데이트 해준다.
|
||||
var drv = bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.OPModelRow;
|
||||
|
||||
if (dr.IsbOwnZPLNull())
|
||||
{
|
||||
dr.bOwnZPL = false;
|
||||
dr.EndEdit();
|
||||
}
|
||||
|
||||
//this.tabControl1.Visible = !dr.Title.StartsWith("101");
|
||||
//this.panel6.Visible = !dr.Title.StartsWith("101");
|
||||
// this.panel7.Visible = !dr.Title.StartsWith("101");
|
||||
|
||||
//update checkbox
|
||||
foreach (var c in tabPage1.Controls)
|
||||
{
|
||||
if (c.GetType() != typeof(CheckBox)) continue;
|
||||
var chk = c as CheckBox;
|
||||
if (chk.Tag == null) continue;
|
||||
var val = UTIL.GetBitState(dr.vOption, int.Parse(chk.Tag.ToString()));
|
||||
if (chk.Checked != val) chk.Checked = val;
|
||||
}
|
||||
foreach (var c in grpApplyWMSinfo.Controls)
|
||||
{
|
||||
if (c.GetType() != typeof(CheckBox)) continue;
|
||||
var chk = c as CheckBox;
|
||||
if (chk.Tag == null) continue;
|
||||
var val = UTIL.GetBitState(dr.vWMSInfo, int.Parse(chk.Tag.ToString()));
|
||||
if (chk.Checked != val) chk.Checked = val;
|
||||
}
|
||||
foreach (var c in grpApplySidinfo.Controls)
|
||||
{
|
||||
if (c.GetType() != typeof(CheckBox)) continue;
|
||||
var chk = c as CheckBox;
|
||||
if (chk.Tag == null) continue;
|
||||
var val = UTIL.GetBitState(dr.vSIDInfo, int.Parse(chk.Tag.ToString()));
|
||||
if (chk.Checked != val) chk.Checked = val;
|
||||
}
|
||||
foreach (var c in grpapplyjob.Controls)
|
||||
{
|
||||
if (c.GetType() != typeof(CheckBox)) continue;
|
||||
var chk = c as CheckBox;
|
||||
if (chk.Tag == null) continue;
|
||||
var val = UTIL.GetBitState(dr.vJobInfo, int.Parse(chk.Tag.ToString()));
|
||||
if (chk.Checked != val) chk.Checked = val;
|
||||
}
|
||||
foreach (var c in GrpSidConvData.Controls)
|
||||
{
|
||||
if (c.GetType() != typeof(CheckBox)) continue;
|
||||
var chk = c as CheckBox;
|
||||
if (chk.Tag == null) continue;
|
||||
var val = UTIL.GetBitState(dr.vSIDConv, int.Parse(chk.Tag.ToString()));
|
||||
if (chk.Checked != val) chk.Checked = val;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void toolStripButton9_Click(object sender, EventArgs e)
|
||||
{
|
||||
//button - save
|
||||
this.Validate();
|
||||
this.bs.EndEdit();
|
||||
|
||||
if (hasChanged() == false)
|
||||
{
|
||||
PUB.log.Add("Model save: No changes to save");
|
||||
return;
|
||||
}
|
||||
|
||||
if (PUB.PasswordCheck() == false)
|
||||
{
|
||||
UTIL.MsgE("Password incorrect");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
//z position 영역을 문자로 변환한다.
|
||||
var drv = this.bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.OPModelRow;
|
||||
dr.EndEdit();
|
||||
this.ds1.AcceptChanges();
|
||||
|
||||
|
||||
PUB.mdm.dataSet.OPModel.Clear();
|
||||
PUB.mdm.dataSet.OPModel.Merge(this.ds1.OPModel);
|
||||
PUB.mdm.dataSet.AcceptChanges();
|
||||
PUB.mdm.SaveModelV();
|
||||
}
|
||||
|
||||
private void toolStripButton10_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (PUB.sm.Step == eSMStep.RUN || PUB.sm.Step == eSMStep.WAITSTART || PUB.sm.Step == eSMStep.PAUSE)
|
||||
{
|
||||
UTIL.MsgE("Cannot change model while system is currently running (waiting)");
|
||||
return;
|
||||
}
|
||||
|
||||
if (hasChanged())
|
||||
{
|
||||
var dlg = UTIL.MsgQ("There are unsaved changes.\n" +
|
||||
"If you proceed, the changed data will be lost\n" +
|
||||
"Do you want to proceed?");
|
||||
if (dlg != DialogResult.Yes) return;
|
||||
}
|
||||
selectModel();
|
||||
}
|
||||
|
||||
private void chkApplySidInfo_CheckStateChanged(object sender, EventArgs e)
|
||||
{
|
||||
var chk = sender as CheckBox;
|
||||
chk.ForeColor = chk.Checked ? Color.Blue : Color.Gray;
|
||||
|
||||
if (chk.Name.Equals(chkApplyJobInfo.Name))
|
||||
{
|
||||
grpapplyjob.Enabled = chk.Checked;
|
||||
}
|
||||
if (chk.Name.Equals(chkApplyWMSInfo.Name))
|
||||
{
|
||||
grpApplyWMSinfo.Enabled = chk.Checked;
|
||||
}
|
||||
if (chk.Name.Equals(chkApplySidInfo.Name))
|
||||
{
|
||||
grpApplySidinfo.Enabled = chk.Checked;
|
||||
}
|
||||
if (chk.Name.Equals(chkApplySIDConvData.Name))
|
||||
{
|
||||
GrpSidConvData.Enabled = chk.Checked;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void btConvOk_Click(object sender, EventArgs e)
|
||||
{
|
||||
VAR.BOOL[eVarBool.Use_Conveyor] = true;
|
||||
}
|
||||
|
||||
private void btConvOff_Click(object sender, EventArgs e)
|
||||
{
|
||||
VAR.BOOL[eVarBool.Use_Conveyor] = false;
|
||||
}
|
||||
|
||||
private void tbBypassSID_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
var tb = sender as TextBox;
|
||||
tb.BackColor = tb.TextLength > 0 ? Color.Gold : Color.WhiteSmoke;
|
||||
}
|
||||
|
||||
private void checkBox32_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
var drv = bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.OPModelRow;
|
||||
|
||||
if (chkOwnZPL.Checked == false)
|
||||
{
|
||||
UTIL.MsgE("Individual print code is disabled, so it will not be applied");
|
||||
}
|
||||
|
||||
var idx = dr.idx;
|
||||
var fn = UTIL.MakePath("Model", idx.ToString(), "zpl.txt");
|
||||
var fnBase = UTIL.MakePath("Data","zpl.txt");
|
||||
if (System.IO.File.Exists(fnBase) && System.IO.File.Exists(fn) == false)
|
||||
{
|
||||
UTIL.MsgI("Dedicated output file (ZPL.TXT) does not exist, copying from default");
|
||||
var fi = new System.IO.FileInfo(fn);
|
||||
if (fi.Directory.Exists == false) fi.Directory.Create();
|
||||
System.IO.File.Copy(fnBase, fn, true);
|
||||
}
|
||||
using (var f = new fZPLEditor(fn))
|
||||
{
|
||||
f.ShowDialog();
|
||||
}
|
||||
}
|
||||
|
||||
private void btReName_Click(object sender, EventArgs e)
|
||||
{
|
||||
//button - save
|
||||
this.Validate();
|
||||
this.bs.EndEdit();
|
||||
|
||||
if (hasChanged() == true)
|
||||
{
|
||||
UTIL.MsgE("Need save");
|
||||
return;
|
||||
}
|
||||
|
||||
if (PUB.PasswordCheck() == false)
|
||||
{
|
||||
UTIL.MsgE("Password incorrect");
|
||||
return;
|
||||
}
|
||||
|
||||
var drv = this.bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.OPModelRow;
|
||||
var beforename = dr.Title;
|
||||
var dlg = UTIL.InputBox("Change Model ?Name", dr.Title);
|
||||
if (dlg.Item1 == false) return;
|
||||
if(beforename.Equals(dlg.Item2))
|
||||
{
|
||||
UTIL.MsgE("Same data");
|
||||
return;
|
||||
}
|
||||
if (UTIL.MsgQ($"Change model name\nBefore:{beforename},After:{dlg.Item2}") != DialogResult.Yes)
|
||||
return;
|
||||
|
||||
dr.Title = dlg.Item2;
|
||||
dr.EndEdit();
|
||||
|
||||
//update regexname
|
||||
DB.ChangeRegExName(beforename, dlg.Item2);
|
||||
|
||||
PUB.mdm.dataSet.OPModel.Clear();
|
||||
PUB.mdm.dataSet.OPModel.Merge(this.ds1.OPModel);
|
||||
PUB.mdm.dataSet.AcceptChanges();
|
||||
PUB.mdm.SaveModelV();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
1972
Handler/Project/Dialog/Model_Operation.resx
Normal file
1972
Handler/Project/Dialog/Model_Operation.resx
Normal file
File diff suppressed because it is too large
Load Diff
1179
Handler/Project/Dialog/Motion_MoveToGroup.Designer.cs
generated
Normal file
1179
Handler/Project/Dialog/Motion_MoveToGroup.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
919
Handler/Project/Dialog/Motion_MoveToGroup.cs
Normal file
919
Handler/Project/Dialog/Motion_MoveToGroup.cs
Normal file
@@ -0,0 +1,919 @@
|
||||
using AR;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Project.Dialog
|
||||
{
|
||||
public partial class Motion_MoveToGroup : Form
|
||||
{
|
||||
int axisX, axisY, axisZ;
|
||||
|
||||
DataSet1 ds;
|
||||
int pidx = -1;/// = string.Empty;
|
||||
public Motion_MoveToGroup(DataSet1 dt_, int targetidx)
|
||||
{
|
||||
InitializeComponent();
|
||||
// this.Size = new Size(800, 500);
|
||||
this.WindowState = FormWindowState.Maximized;
|
||||
btXNeg.Tag = "X-";
|
||||
btXPos.Tag = "X+";
|
||||
btYNeg.Tag = "Y-";
|
||||
btYPos.Tag = "Y+";
|
||||
this.ds = dt_;
|
||||
pidx = targetidx;
|
||||
//this.lvF.FullRowSelect = true;
|
||||
//this.lvF.GridLines = true;
|
||||
//arDatagridView1.DataSource = dt_.MCModel;
|
||||
|
||||
var dr = dt_.MCModel.Where(t => t.idx == targetidx).FirstOrDefault();
|
||||
if (dr == null) this.Text = "Position-Based Movement";
|
||||
else this.Text = $"Position-Based Movement (Model: {dr.Title})";
|
||||
|
||||
}
|
||||
|
||||
private void Motion_MoveToGroup_Load(object sender, EventArgs e)
|
||||
{
|
||||
refreshData();
|
||||
tmDisplay.Start();
|
||||
}
|
||||
void refreshData()
|
||||
{
|
||||
//목록을 추출한다
|
||||
//this.lvF.Items.Clear();
|
||||
//this.listView1.Columns[0].Width = 120;
|
||||
//this.listView1.Columns[1].Width = 300;
|
||||
//this.lvF.Font = new Font("맑은 고딕", 15);
|
||||
|
||||
var ctgrp = this.ds.MCModel.Where(t => t.pidx == this.pidx && string.IsNullOrEmpty(t.Category) == false).GroupBy(t => t.Category);
|
||||
var rawGrplist = ctgrp.Select(t => t.Key).ToList();
|
||||
Dictionary<string, List<int>> grpList = new Dictionary<string, List<int>>();
|
||||
|
||||
|
||||
foreach (var dr in ctgrp.OrderBy(t => t.Key))
|
||||
{
|
||||
var rawgrplist = dr.Key.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
foreach (var grpname in rawgrplist)
|
||||
{
|
||||
var keybuf = grpname.Split('|'); //그룹과 위치명은 | 로구분되어있다
|
||||
if (keybuf.Length == 1)
|
||||
{
|
||||
Array.Resize(ref keybuf, 2);
|
||||
keybuf[1] = keybuf[0];
|
||||
keybuf[0] = "Normal";
|
||||
}
|
||||
|
||||
var newgrpname = string.Join("|", keybuf);
|
||||
var motlist = dr.GroupBy(t => t.idx).Select(t => t.Key).ToList();
|
||||
|
||||
if (grpList.ContainsKey(newgrpname) == false)
|
||||
{
|
||||
grpList.Add(newgrpname, motlist);
|
||||
}
|
||||
else
|
||||
{
|
||||
//동일그룹이 등록되어있다
|
||||
var oldlist = grpList[newgrpname];
|
||||
foreach (var drindex in motlist)
|
||||
if (oldlist.Contains(drindex) == false) oldlist.Add(drindex);
|
||||
grpList[newgrpname] = oldlist;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tvFront.Nodes.Clear();
|
||||
tvFront.Font = new Font("맑은 고딕", 10, FontStyle.Bold);
|
||||
|
||||
tvRear.Nodes.Clear();
|
||||
tvRear.Font = new Font("맑은 고딕", 10, FontStyle.Bold);
|
||||
|
||||
tvOther.Nodes.Clear();
|
||||
tvOther.Font = new Font("맑은 고딕", 10, FontStyle.Bold);
|
||||
|
||||
tvOther2.Nodes.Clear();
|
||||
tvOther2.Font = new Font("맑은 고딕", 10, FontStyle.Bold);
|
||||
|
||||
//목록을 취합햇으니 표시한다
|
||||
foreach (var item in grpList)
|
||||
{
|
||||
var motlist = new List<int>();
|
||||
foreach (var drindex in item.Value)
|
||||
{
|
||||
var dr = this.ds.MCModel.Where(t => t.idx == drindex).First();
|
||||
motlist.Add(dr.MotIndex);
|
||||
}
|
||||
|
||||
if (motlist.Count < 1) continue;
|
||||
|
||||
var buf = item.Key.Split('|');
|
||||
|
||||
var cate = buf[0];
|
||||
var itemname = buf[1];
|
||||
|
||||
if (cate.Contains("_MANAGE"))
|
||||
{
|
||||
if (tvOther2.Nodes.ContainsKey(cate) == false)
|
||||
{
|
||||
var nd = tvOther2.Nodes.Add(cate, cate);
|
||||
var snd = nd.Nodes.Add(itemname, itemname + " ▶ (" + string.Join(",", motlist.OrderBy(t => t).Select(t => (eAxis)t)) + ")");
|
||||
snd.Tag = item.Value;
|
||||
|
||||
if (itemname.Contains("PICKOFF")) snd.ForeColor = Color.Blue;
|
||||
else if (itemname.Contains("PICKON")) snd.ForeColor = Color.DarkGreen;
|
||||
else if (itemname.StartsWith("T")) snd.ForeColor = Color.Magenta;
|
||||
else snd.ForeColor = Color.Black;
|
||||
}
|
||||
else
|
||||
{
|
||||
var nd = tvOther2.Nodes[cate];
|
||||
var snd = nd.Nodes.Add(itemname, itemname + " ▶ (" + string.Join(",", motlist.OrderBy(t => t).Select(t => (eAxis)t)) + ")");
|
||||
snd.Tag = item.Value;
|
||||
|
||||
if (itemname.Contains("PICKOFF")) snd.ForeColor = Color.Blue;
|
||||
else if (itemname.Contains("PICKON")) snd.ForeColor = Color.DarkGreen;
|
||||
else if (itemname.StartsWith("T")) snd.ForeColor = Color.Magenta;
|
||||
else snd.ForeColor = Color.Black;
|
||||
}
|
||||
}
|
||||
|
||||
else if (itemname.StartsWith("R") || (itemname.StartsWith("F") == false && itemname.ToUpper().Contains("REAR")))
|
||||
{
|
||||
itemname = itemname.Replace("RSHUTTLE", "R");
|
||||
if (tvRear.Nodes.ContainsKey(cate) == false)
|
||||
{
|
||||
var nd = tvRear.Nodes.Add(cate, cate);
|
||||
var snd = nd.Nodes.Add(itemname, itemname + " ▶ (" + string.Join(",", motlist.OrderBy(t => t).Select(t => (eAxis)t)) + ")");
|
||||
snd.Tag = item.Value;
|
||||
|
||||
if (itemname.Contains("PICKOFF")) snd.ForeColor = Color.Blue;
|
||||
else if (itemname.Contains("PICKON")) snd.ForeColor = Color.DarkGreen;
|
||||
else if (itemname.StartsWith("T")) snd.ForeColor = Color.Magenta;
|
||||
else snd.ForeColor = Color.Black;
|
||||
}
|
||||
else
|
||||
{
|
||||
var nd = tvRear.Nodes[cate];
|
||||
var snd = nd.Nodes.Add(itemname, itemname + " ▶ (" + string.Join(",", motlist.OrderBy(t => t).Select(t => (eAxis)t)) + ")");
|
||||
snd.Tag = item.Value;
|
||||
|
||||
if (itemname.Contains("PICKOFF")) snd.ForeColor = Color.Blue;
|
||||
else if (itemname.Contains("PICKON")) snd.ForeColor = Color.DarkGreen;
|
||||
else if (itemname.StartsWith("T")) snd.ForeColor = Color.Magenta;
|
||||
else snd.ForeColor = Color.Black;
|
||||
|
||||
}
|
||||
}
|
||||
else if (itemname.StartsWith("F") || (itemname.StartsWith("R") == false && itemname.ToUpper().Contains("FRONT")))
|
||||
|
||||
{
|
||||
itemname = itemname.Replace("FSHUTTLE", "F");
|
||||
if (tvFront.Nodes.ContainsKey(cate) == false)
|
||||
{
|
||||
var nd = tvFront.Nodes.Add(cate, cate);
|
||||
var snd = nd.Nodes.Add(itemname, itemname + " ▶ (" + string.Join(",", motlist.OrderBy(t => t).Select(t => (eAxis)t)) + ")");
|
||||
snd.Tag = item.Value;
|
||||
|
||||
if (itemname.Contains("PICKOFF")) snd.ForeColor = Color.Blue;
|
||||
else if (itemname.Contains("PICKON")) snd.ForeColor = Color.DarkGreen;
|
||||
else if (itemname.StartsWith("T")) snd.ForeColor = Color.Magenta;
|
||||
else snd.ForeColor = Color.Black;
|
||||
}
|
||||
else
|
||||
{
|
||||
var nd = tvFront.Nodes[cate];
|
||||
var snd = nd.Nodes.Add(itemname, itemname + " ▶ (" + string.Join(",", motlist.OrderBy(t => t).Select(t => (eAxis)t)) + ")");
|
||||
snd.Tag = item.Value;
|
||||
|
||||
if (itemname.Contains("PICKOFF")) snd.ForeColor = Color.Blue;
|
||||
else if (itemname.Contains("PICKON")) snd.ForeColor = Color.DarkGreen;
|
||||
else if (itemname.StartsWith("T")) snd.ForeColor = Color.Magenta;
|
||||
else snd.ForeColor = Color.Black;
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if (tvOther.Nodes.ContainsKey(cate) == false)
|
||||
{
|
||||
var nd = tvOther.Nodes.Add(cate, cate);
|
||||
var snd = nd.Nodes.Add(itemname, itemname + " ▶ (" + string.Join(",", motlist.OrderBy(t => t).Select(t => (eAxis)t)) + ")");
|
||||
snd.Tag = item.Value;
|
||||
|
||||
if (itemname.Contains("PICKOFF")) snd.ForeColor = Color.Blue;
|
||||
else if (itemname.Contains("PICKON")) snd.ForeColor = Color.DarkGreen;
|
||||
else if (itemname.StartsWith("T")) snd.ForeColor = Color.Magenta;
|
||||
else snd.ForeColor = Color.Black;
|
||||
}
|
||||
else
|
||||
{
|
||||
var nd = tvOther.Nodes[cate];
|
||||
var snd = nd.Nodes.Add(itemname, itemname + " ▶ (" + string.Join(",", motlist.OrderBy(t => t).Select(t => (eAxis)t)) + ")");
|
||||
snd.Tag = item.Value;
|
||||
|
||||
if (itemname.Contains("PICKOFF")) snd.ForeColor = Color.Blue;
|
||||
else if (itemname.Contains("PICKON")) snd.ForeColor = Color.DarkGreen;
|
||||
else if (itemname.StartsWith("T")) snd.ForeColor = Color.Magenta;
|
||||
else snd.ForeColor = Color.Black;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//var lv = this.lvF.Items.Add(buf[0]);
|
||||
//lv.SubItems.Add(buf[1]);
|
||||
//lv.SubItems.Add(string.Join(",", motlist.OrderBy(t => t)));
|
||||
|
||||
//if (buf[1].StartsWith("R"))
|
||||
// lv.ForeColor = Color.Blue;
|
||||
//else if (buf[1].StartsWith("T"))
|
||||
// lv.ForeColor = Color.Magenta;
|
||||
|
||||
//lv.Tag = item.Value; //datarowindex 를 가진다
|
||||
|
||||
}
|
||||
|
||||
tvFront.ExpandAll();
|
||||
tvRear.ExpandAll();
|
||||
tvOther.ExpandAll();
|
||||
tvOther2.ExpandAll();
|
||||
}
|
||||
|
||||
private void toolStripButton1_Click(object sender, EventArgs e)
|
||||
{
|
||||
refreshData();
|
||||
}
|
||||
|
||||
Task MoveMotion = null;
|
||||
|
||||
|
||||
List<int> GetCurrentList()
|
||||
{
|
||||
if (seltv == null)
|
||||
{
|
||||
UTIL.MsgE("Please select a position to move to first");
|
||||
return null;
|
||||
}
|
||||
var tn = seltv.SelectedNode;
|
||||
if (tn == null) return null;
|
||||
if (tn.Level < 1) return null;
|
||||
return (List<int>)tn.Tag;
|
||||
}
|
||||
|
||||
private void toolStripButton2_Click(object sender, EventArgs e)
|
||||
{
|
||||
//지정된 축중에 Z축을 가진 대상이 있다면 그것을 우선 0으로 이동시킨다.
|
||||
List<int> idxlist = GetCurrentList();
|
||||
if (idxlist == null) return;
|
||||
|
||||
List<eAxis> zlist = new List<eAxis>();
|
||||
List<eAxis> nlist = new List<eAxis>();
|
||||
|
||||
List<DataSet1.MCModelRow> zplist = new List<DataSet1.MCModelRow>();
|
||||
List<DataSet1.MCModelRow> nplist = new List<DataSet1.MCModelRow>();
|
||||
|
||||
System.Text.StringBuilder sb = new StringBuilder();
|
||||
foreach (var dridx in idxlist)
|
||||
{
|
||||
var dr = this.ds.MCModel.Where(t => t.idx == dridx).First();
|
||||
var ax = (eAxis)dr.MotIndex;
|
||||
var cate = ax.CategoryAttr();
|
||||
if (cate.StartsWith("Z"))
|
||||
{
|
||||
zlist.Add(ax);
|
||||
zplist.Add(dr);
|
||||
}
|
||||
else
|
||||
{
|
||||
//나머지축에 인터락이 있으면 처리하지 않는다.
|
||||
if (PUB.iLock[dr.MotIndex].IsEmpty() == false)
|
||||
{
|
||||
if (sb.Length < 1) sb.AppendLine("Motion interlock is set\n");
|
||||
var locklist = MOT.GetActiveLockList(ax, PUB.iLock[dr.MotIndex]);
|
||||
sb.AppendLine($"Axis : {ax}({dr.MotIndex}) Target:{string.Join(",", locklist)}");
|
||||
|
||||
}
|
||||
nlist.Add(ax);
|
||||
nplist.Add(dr);
|
||||
}
|
||||
}
|
||||
|
||||
if (sb.Length > 0)
|
||||
{
|
||||
UTIL.MsgE(sb.ToString(), true);
|
||||
return;
|
||||
}
|
||||
|
||||
Queue<Tuple<eAxis, sPositionData, bool>> poslist = new Queue<Tuple<eAxis, sPositionData, bool>>();
|
||||
sb.AppendLine("Do you want to start axis movement?\nZ-axis will move to 0 first for safety before movement");
|
||||
|
||||
int idx = 0;
|
||||
for (int i = 0; i < zlist.Count; i++)
|
||||
{
|
||||
var ax = zlist[i];
|
||||
var dr = zplist[i];
|
||||
sb.AppendLine($"[{++idx:000}] Move to origin (0) : " + ax.ToString());
|
||||
var p = new Tuple<eAxis, sPositionData, bool>(ax, new sPositionData
|
||||
{
|
||||
Axis = (short)ax,
|
||||
Position = 0,
|
||||
Speed = Math.Max(100, dr.Speed),
|
||||
Acc = dr.SpeedAcc,
|
||||
Dcc = dr.SpeedDcc,
|
||||
}, true);
|
||||
poslist.Enqueue(p);
|
||||
}
|
||||
|
||||
for (int i = 0; i < nlist.Count; i++)
|
||||
{
|
||||
var ax = nlist[i];
|
||||
var dr = nplist[i];
|
||||
sb.AppendLine($"[{++idx:000}] {ax} Position move : {dr.Position}mm({dr.Speed}ms)");
|
||||
var p = new Tuple<eAxis, sPositionData, bool>(ax, new sPositionData
|
||||
{
|
||||
Axis = (short)ax,
|
||||
Position = dr.Position,
|
||||
Speed = Math.Max(100, dr.Speed),
|
||||
Acc = dr.SpeedAcc,
|
||||
Dcc = dr.SpeedDcc,
|
||||
}, false);
|
||||
poslist.Enqueue(p);
|
||||
}
|
||||
|
||||
//x,y완료될떄까지 기다림
|
||||
for (int i = 0; i < nlist.Count; i++)
|
||||
{
|
||||
var ax = nlist[i];
|
||||
var dr = nplist[i];
|
||||
sb.AppendLine($"[{++idx:000}] {ax} Position move : {dr.Position}mm({dr.Speed}ms)");
|
||||
var p = new Tuple<eAxis, sPositionData, bool>(ax, new sPositionData
|
||||
{
|
||||
Axis = (short)ax,
|
||||
Position = dr.Position,
|
||||
Speed = Math.Max(100, dr.Speed),
|
||||
Acc = dr.SpeedAcc,
|
||||
Dcc = dr.SpeedDcc,
|
||||
}, true);
|
||||
poslist.Enqueue(p);
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < zlist.Count; i++)
|
||||
{
|
||||
var ax = zlist[i];
|
||||
var dr = zplist[i];
|
||||
sb.AppendLine($"[{++idx:000}] {ax} Position move : {dr.Position}mm({dr.Speed}ms)");
|
||||
var p = new Tuple<eAxis, sPositionData, bool>(ax, new sPositionData
|
||||
{
|
||||
Axis = (short)ax,
|
||||
Position = Math.Max(dr.Position - 50, 0),
|
||||
Speed = Math.Max(100, dr.Speed),
|
||||
Acc = dr.SpeedAcc,
|
||||
Dcc = dr.SpeedDcc,
|
||||
}, false);
|
||||
poslist.Enqueue(p);
|
||||
}
|
||||
|
||||
var dlg = UTIL.MsgQ(sb.ToString());
|
||||
if (dlg != DialogResult.Yes) return;
|
||||
|
||||
if (PUB.mot.HasHomeSetOff)
|
||||
{
|
||||
UTIL.MsgE("There are motions that have not completed homing");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
MoveMotion = new Task(new Action(() =>
|
||||
{
|
||||
DateTime starttime = DateTime.Now;
|
||||
Tuple<eAxis, sPositionData, bool> p = null;
|
||||
while (poslist.Any() || p != null) //자료가있거나 현재 걸려있는게 있는 경우
|
||||
{
|
||||
if (p == null)
|
||||
{
|
||||
p = poslist.Dequeue();
|
||||
starttime = DateTime.Now;
|
||||
}
|
||||
|
||||
var seqtime = DateTime.Now - starttime;
|
||||
if (p.Item3) //대기
|
||||
{
|
||||
|
||||
if (MOT.CheckMotionPos(seqtime, p.Item2, "USER", false) == false)
|
||||
{
|
||||
var msg = PUB.mot.ErrorMessage;
|
||||
//{
|
||||
//Util.MsgE("모션 이동 실패\n" + Pub.mot.ErrorMessage);
|
||||
//break;
|
||||
//}
|
||||
if (seqtime.TotalSeconds > 60)
|
||||
{
|
||||
PUB.log.AddE("Position movement failed, exceeded 60 seconds");
|
||||
break;
|
||||
}
|
||||
System.Threading.Thread.Sleep(100);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else MOT.Move(p.Item1, p.Item2.Position, p.Item2.Speed, p.Item2.Acc, false, false, false); //위치이동을한다
|
||||
p = null; //다음으로 진행할 수 있게 한다
|
||||
}
|
||||
}));
|
||||
MoveMotion.RunSynchronously();
|
||||
}
|
||||
|
||||
private void btSet_Click(object sender, EventArgs e)
|
||||
{
|
||||
//담당 축중에 ready 를 제외한 축을 추출하고
|
||||
//해당 축의 해당 위치에 command 좌표를 할당 합니다.
|
||||
|
||||
|
||||
if (PUB.mot.HasHomeSetOff)
|
||||
{
|
||||
UTIL.MsgE("There are motions that have not completed homing\nCannot save");
|
||||
return;
|
||||
}
|
||||
|
||||
//지정된 축중에 Z축을 가진 대상이 있다면 그것을 우선 0으로 이동시킨다.
|
||||
//지정된 축중에 Z축을 가진 대상이 있다면 그것을 우선 0으로 이동시킨다.
|
||||
List<int> idxlist = GetCurrentList();
|
||||
if (idxlist == null) return;
|
||||
|
||||
|
||||
List<eAxis> nlist = new List<eAxis>();
|
||||
List<DataSet1.MCModelRow> nplist = new List<DataSet1.MCModelRow>();
|
||||
|
||||
foreach (var dridx in idxlist)
|
||||
{
|
||||
var dr = this.ds.MCModel.Where(t => t.idx == dridx).First();
|
||||
if (dr.PosTitle.StartsWith("READY")) continue;
|
||||
|
||||
var ax = (eAxis)dr.MotIndex;
|
||||
var cate = ax.CategoryAttr();
|
||||
nlist.Add(ax);
|
||||
nplist.Add(dr);
|
||||
}
|
||||
Queue<Tuple<DataSet1.MCModelRow, eAxis, string, double, double>> poslist = new Queue<Tuple<DataSet1.MCModelRow, eAxis, string, double, double>>();
|
||||
var sb = new System.Text.StringBuilder();
|
||||
sb.AppendLine("Do you want to save the positions of the following coordinates?");
|
||||
sb.AppendLine();
|
||||
|
||||
for (int i = 0; i < nlist.Count; i++)
|
||||
{
|
||||
var ax = nlist[i];
|
||||
var dr = nplist[i];
|
||||
var curpos = PUB.mot.GetCmdPos((short)ax);
|
||||
sb.AppendLine($"[{dr.idx}] Axis:{ax} - {dr.PosTitle}\n\tChange position {dr.Position} -> {curpos}");
|
||||
var param = new Tuple<DataSet1.MCModelRow, eAxis, string, double, double>(dr, ax, dr.PosTitle, dr.Position, curpos);
|
||||
poslist.Enqueue(param);
|
||||
}
|
||||
|
||||
|
||||
using (var f = new Dialog.fSavePosition(poslist))
|
||||
{
|
||||
if (f.ShowDialog() != DialogResult.OK)
|
||||
{
|
||||
UTIL.MsgE("Coordinate saving was cancelled");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//var dlg = Util.MsgQ(sb.ToString());
|
||||
//if (dlg != DialogResult.Yes) return;
|
||||
|
||||
|
||||
|
||||
//var cnt = 0;
|
||||
//foreach (var p in poslist)
|
||||
//{
|
||||
// p.Item1.Position = p.Item2;
|
||||
// p.Item1.EndEdit();
|
||||
// cnt += 1;
|
||||
//}
|
||||
//Util.MsgI($"{cnt}건의 위치를 변경 했습니다");
|
||||
}
|
||||
|
||||
private void btJogUp_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
var but = sender as Button;
|
||||
var tag = but.Tag.ToString();
|
||||
var vel = (float)nudJogVel.Value;
|
||||
if (tag == "X+")
|
||||
{
|
||||
if (axisX >= 0) PUB.mot.JOG((short)axisX, arDev.MOT.MOTION_DIRECTION.Positive, vel, 500, false, false);
|
||||
}
|
||||
else if (tag == "X-")
|
||||
{
|
||||
if (axisX >= 0) PUB.mot.JOG((short)axisX, arDev.MOT.MOTION_DIRECTION.Negative, vel, 500, false, false);
|
||||
}
|
||||
else if (tag == "Y+")
|
||||
{
|
||||
if (axisY >= 0) PUB.mot.JOG((short)axisY, arDev.MOT.MOTION_DIRECTION.Positive, vel, 500, false, false);
|
||||
}
|
||||
else if (tag == "Y-")
|
||||
{
|
||||
if (axisY >= 0) PUB.mot.JOG((short)axisY, arDev.MOT.MOTION_DIRECTION.Negative, vel, 500, false, false);
|
||||
}
|
||||
else if (tag == "Z+")
|
||||
{
|
||||
if (axisZ >= 0) PUB.mot.JOG((short)axisZ, arDev.MOT.MOTION_DIRECTION.Positive, vel, 500, false, false);
|
||||
}
|
||||
else if (tag == "Z-")
|
||||
{
|
||||
if (axisZ >= 0) PUB.mot.JOG((short)axisZ, arDev.MOT.MOTION_DIRECTION.Negative, vel, 500, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
private void btAClear_MouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
var but = sender as Button;
|
||||
var tag = but.Tag.ToString();
|
||||
var vel = (float)nudJogVel.Value;
|
||||
if (tag == "X+")
|
||||
{
|
||||
if (axisX >= 0) PUB.mot.MoveStop("MOVETOGRP", (short)axisX, true);
|
||||
}
|
||||
else if (tag == "X-")
|
||||
{
|
||||
if (axisX >= 0) PUB.mot.MoveStop("MOVETOGRP", (short)axisX, true);
|
||||
}
|
||||
else if (tag == "Y+")
|
||||
{
|
||||
if (axisY >= 0) PUB.mot.MoveStop("MOVETOGRP", (short)axisY, true);
|
||||
}
|
||||
else if (tag == "Y-")
|
||||
{
|
||||
if (axisY >= 0) PUB.mot.MoveStop("MOVETOGRP", (short)axisY, true);
|
||||
}
|
||||
else if (tag == "Z+")
|
||||
{
|
||||
if (axisZ >= 0) PUB.mot.MoveStop("MOVETOGRP", (short)axisZ, true);
|
||||
}
|
||||
else if (tag == "Z-")
|
||||
{
|
||||
if (axisZ >= 0) PUB.mot.MoveStop("MOVETOGRP", (short)axisZ, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void tmDisplay_Tick(object sender, EventArgs e)
|
||||
{
|
||||
var motpos = string.Empty;
|
||||
if (axisX >= 0)
|
||||
{
|
||||
motpos += $"X:{PUB.mot.GetActPos((short)axisX):N3}/{PUB.mot.GetCmdPos((short)axisX):N3}";
|
||||
button6.BackColor = PUB.iLock[axisX].IsEmpty() ? Color.FromArgb(224, 224, 224) : Color.Orange;
|
||||
}
|
||||
else
|
||||
{
|
||||
motpos += "X:(none)";
|
||||
button6.BackColor = Color.FromArgb(224, 224, 224);
|
||||
}
|
||||
if (axisY >= 0)
|
||||
{
|
||||
motpos += $" / Y:{PUB.mot.GetActPos((short)axisY):N3}/{PUB.mot.GetCmdPos((short)axisY):N3}";
|
||||
button5.BackColor = PUB.iLock[axisY].IsEmpty() ? Color.FromArgb(224, 224, 224) : Color.Orange;
|
||||
}
|
||||
else
|
||||
{
|
||||
motpos += " Y:(none)";
|
||||
button5.BackColor = Color.FromArgb(224, 224, 224);
|
||||
}
|
||||
if (axisZ >= 0)
|
||||
{
|
||||
motpos += $" / Z:{PUB.mot.GetActPos((short)axisZ):N3},{PUB.mot.GetCmdPos((short)axisZ):N3}";
|
||||
button4.BackColor = PUB.iLock[axisZ].IsEmpty() ? Color.FromArgb(224, 224, 224) : Color.Orange;
|
||||
}
|
||||
else
|
||||
{
|
||||
motpos += " Z:(none)";
|
||||
button4.BackColor = Color.FromArgb(224, 224, 224);
|
||||
}
|
||||
|
||||
this.lbMotPos.Text = motpos;
|
||||
|
||||
}
|
||||
|
||||
private void Motion_MoveToGroup_FormClosed(object sender, FormClosedEventArgs e)
|
||||
{
|
||||
tmDisplay.Stop();
|
||||
}
|
||||
|
||||
private void button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
var but = sender as Button;
|
||||
if (but.Text.EndsWith("-ZERO"))
|
||||
{
|
||||
|
||||
if (but.Text.StartsWith("X") && axisX >= 0)
|
||||
{
|
||||
if (UTIL.MsgQ("Do you want to move X position to 0?") != DialogResult.Yes) return;
|
||||
MOT.Move((eAxis)axisX, 0, 100, 1000, false, false, false);
|
||||
}
|
||||
else if (but.Text.StartsWith("Y") && axisY >= 0)
|
||||
{
|
||||
if (UTIL.MsgQ("Do you want to move Y position to 0?") != DialogResult.Yes) return;
|
||||
MOT.Move((eAxis)axisY, 0, 100, 1000, false, false, false);
|
||||
}
|
||||
else if (but.Text.StartsWith("Z") && axisZ >= 0)
|
||||
{
|
||||
if (UTIL.MsgQ("Do you want to move Z position to 0?") != DialogResult.Yes) return;
|
||||
MOT.Move((eAxis)axisZ, 0, 100, 1000, false, false, false);
|
||||
}
|
||||
}
|
||||
else if (but.Text.EndsWith("-MOVE"))
|
||||
{
|
||||
|
||||
//지정된 축중에 Z축을 가진 대상이 있다면 그것을 우선 0으로 이동시킨다.
|
||||
List<int> idxlist = GetCurrentList();
|
||||
if (idxlist == null) return;
|
||||
|
||||
foreach (var dridx in idxlist)
|
||||
{
|
||||
var dr = this.ds.MCModel.Where(t => t.idx == dridx).First();
|
||||
var ax = (eAxis)dr.MotIndex;
|
||||
var cate = ax.CategoryAttr();
|
||||
|
||||
|
||||
//나머지축에 인터락이 있으면 처리하지 않는다.
|
||||
var sb = new System.Text.StringBuilder();
|
||||
if (PUB.iLock[dr.MotIndex].IsEmpty() == false)
|
||||
{
|
||||
if (sb.Length < 1) sb.AppendLine("Motion interlock is set\n");
|
||||
var locklist = MOT.GetActiveLockList(ax, PUB.iLock[dr.MotIndex]);
|
||||
sb.AppendLine($"Axis : {ax}({dr.MotIndex}) Target:{string.Join(",", locklist)}");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine("Do you want to continue?");
|
||||
if (UTIL.MsgQ(sb.ToString()) != DialogResult.Yes) return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (but.Text.StartsWith("X") && cate.StartsWith("X") && axisX >= 0)
|
||||
{
|
||||
if (UTIL.MsgQ($"Do you want to move X position to ({dr.Position})?") != DialogResult.Yes) return;
|
||||
MOT.Move(ax, dr.Position, dr.Speed, 1000, false, false, false);
|
||||
}
|
||||
else if (but.Text.StartsWith("Y") && cate.StartsWith("Y") && axisY >= 0)
|
||||
{
|
||||
if (UTIL.MsgQ($"Do you want to move Y position to ({dr.Position})?") != DialogResult.Yes) return;
|
||||
MOT.Move(ax, dr.Position, dr.Speed, 1000, false, false, false);
|
||||
}
|
||||
else if (but.Text.StartsWith("Z") && cate.StartsWith("Z") && axisZ >= 0)
|
||||
{
|
||||
if (UTIL.MsgQ($"Do you want to move Z position to ({dr.Position})?") != DialogResult.Yes) return;
|
||||
MOT.Move(ax, dr.Position, Math.Min(50, dr.Speed), 1000, false, false, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void button13_Click(object sender, EventArgs e)
|
||||
{
|
||||
var but = sender as Button;
|
||||
var txt = but.Text.Trim();
|
||||
var aname = txt.Substring(0, 1);
|
||||
var value = txt.Split(':')[1].Replace("mm", "").Replace("+", "").Trim();
|
||||
var v = float.Parse(value);
|
||||
if (aname == "X" && axisX >= 0)
|
||||
{
|
||||
//이동을 해준다
|
||||
MOT.Move((eAxis)axisX, v, 100, 1000, true, false, false);
|
||||
}
|
||||
else if (aname == "Y" && axisY >= 0)
|
||||
{
|
||||
//이동을 해준다
|
||||
MOT.Move((eAxis)axisY, v, 100, 1000, true, false, false);
|
||||
}
|
||||
else if (aname == "Z" && axisZ >= 0)
|
||||
{
|
||||
//이동을 해준다
|
||||
MOT.Move((eAxis)axisZ, v, 100, 1000, true, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
TreeNode prevnode = null;
|
||||
TreeView seltv = null;
|
||||
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
|
||||
{
|
||||
//선택되면 대상축에서 x,y,z를 찾아서 설정하고 enable 을 설정한다.
|
||||
if (seltv != null)
|
||||
{
|
||||
seltv.BackColor = Color.White;
|
||||
}
|
||||
seltv = sender as TreeView;
|
||||
seltv.BackColor = Color.LightGoldenrodYellow;
|
||||
|
||||
if (prevnode != null)
|
||||
{
|
||||
prevnode.BackColor = Color.White;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//지정된 축중에 Z축을 가진 대상이 있다면 그것을 우선 0으로 이동시킨다.
|
||||
List<int> idxlist = GetCurrentList();
|
||||
if (idxlist == null) return;
|
||||
var tn = this.seltv.SelectedNode;
|
||||
this.Text = $"{tn.Parent.Text} - {tn.Text}";
|
||||
|
||||
this.prevnode = tn;
|
||||
this.prevnode.BackColor = Color.Lime;
|
||||
|
||||
List<eAxis> xlist = new List<eAxis>();
|
||||
List<eAxis> ylist = new List<eAxis>();
|
||||
List<eAxis> zlist = new List<eAxis>();
|
||||
|
||||
List<DataSet1.MCModelRow> xplist = new List<DataSet1.MCModelRow>();
|
||||
List<DataSet1.MCModelRow> yplist = new List<DataSet1.MCModelRow>();
|
||||
List<DataSet1.MCModelRow> zplist = new List<DataSet1.MCModelRow>();
|
||||
|
||||
foreach (var dridx in idxlist)
|
||||
{
|
||||
var dr = this.ds.MCModel.Where(t => t.idx == dridx).First();
|
||||
var ax = (eAxis)dr.MotIndex;
|
||||
var cate = ax.CategoryAttr();
|
||||
if (cate.StartsWith("Z"))
|
||||
{
|
||||
zlist.Add(ax);
|
||||
zplist.Add(dr);
|
||||
}
|
||||
else if (cate.StartsWith("X"))
|
||||
{
|
||||
xlist.Add(ax);
|
||||
xplist.Add(dr);
|
||||
}
|
||||
else if (cate.StartsWith("Y"))
|
||||
{
|
||||
ylist.Add(ax);
|
||||
yplist.Add(dr);
|
||||
}
|
||||
}
|
||||
|
||||
if (xlist.Count == 1)
|
||||
{
|
||||
axisX = (int)xlist.First();
|
||||
btXNeg.Enabled = true;
|
||||
btXPos.Enabled = true;
|
||||
btXNeg.BackColor = Color.LightSkyBlue;
|
||||
btXPos.BackColor = Color.LightSkyBlue;
|
||||
}
|
||||
else
|
||||
{
|
||||
axisX = -1;
|
||||
btXNeg.Enabled = false;
|
||||
btXPos.Enabled = false;
|
||||
btXNeg.BackColor = Color.LightGray;
|
||||
btXPos.BackColor = Color.LightGray;
|
||||
}
|
||||
|
||||
if (ylist.Count == 1)
|
||||
{
|
||||
axisY = (int)ylist.First();
|
||||
btYNeg.Enabled = true;
|
||||
btYPos.Enabled = true;
|
||||
btYNeg.BackColor = Color.LightSkyBlue;
|
||||
btYPos.BackColor = Color.LightSkyBlue;
|
||||
}
|
||||
else
|
||||
{
|
||||
axisY = -1;
|
||||
btYNeg.Enabled = false;
|
||||
btYPos.Enabled = false;
|
||||
btYNeg.BackColor = Color.LightGray;
|
||||
btYPos.BackColor = Color.LightGray;
|
||||
}
|
||||
|
||||
if (zlist.Count == 1)
|
||||
{
|
||||
axisZ = (int)zlist.First();
|
||||
btZNeg.Enabled = true;
|
||||
btZPos.Enabled = true;
|
||||
btZNeg.BackColor = Color.LightSkyBlue;
|
||||
btZPos.BackColor = Color.LightSkyBlue;
|
||||
}
|
||||
else
|
||||
{
|
||||
axisZ = -1;
|
||||
btZNeg.Enabled = false;
|
||||
btZPos.Enabled = false;
|
||||
btZNeg.BackColor = Color.LightGray;
|
||||
btZPos.BackColor = Color.LightGray;
|
||||
}
|
||||
|
||||
eAxis axx = (eAxis)axisX;
|
||||
eAxis axy = (eAxis)axisY;
|
||||
eAxis axz = (eAxis)axisZ;
|
||||
|
||||
lbX.Text = $"({axisX}){axx}";
|
||||
if (axisX >= 0) lbX.Text += $"({xplist.First().PosIndex}mm)";
|
||||
lbY.Text = $"({axisY}){axy}";
|
||||
if (axisY >= 0) lbY.Text += $"({yplist.First().PosIndex}mm)";
|
||||
lbZ.Text = $"({axisZ}){axz}";
|
||||
if (axisZ >= 0) lbZ.Text += $"({zplist.First().PosIndex}mm)";
|
||||
}
|
||||
|
||||
private void button25_Click(object sender, EventArgs e)
|
||||
{
|
||||
var but = sender as Button;
|
||||
var val = int.Parse(but.Text);
|
||||
nudJogVel.Value = (decimal)val;
|
||||
}
|
||||
|
||||
private void toolStripButton2_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
using (var f = new Model_Motion())
|
||||
f.ShowDialog();
|
||||
}
|
||||
|
||||
private void toolStripButton3_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (var f = new Dialog.fIOMonitor())
|
||||
f.ShowDialog();
|
||||
}
|
||||
|
||||
|
||||
private void button28_Click(object sender, EventArgs e)
|
||||
{
|
||||
//var cur = DIO.GetIOOutput(eDOName.F셔틀_회전180);
|
||||
//string msg;
|
||||
//if (cur) msg = "셔틀(F)이 현재 뒤집혀 있습니다.\n원위치로 복귀 할까요?";
|
||||
//else msg = "셔틀(F) 을 뒤집을까요?";
|
||||
|
||||
//var dlg = Util.MsgQ(msg);
|
||||
//if (dlg != DialogResult.Yes) return;
|
||||
}
|
||||
|
||||
private void button29_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void toolStripButton4_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (var f = new Dialog.Quick_Control())
|
||||
f.ShowDialog();
|
||||
}
|
||||
|
||||
private void button30_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void btAllZSafe_Click(object sender, EventArgs e)
|
||||
{
|
||||
//Z1,2,3 안전위치로 이동한다 220421
|
||||
var dlg = UTIL.MsgQ("Do you want to move all Z axes to safe position?\n" +
|
||||
"For Z1 and Z4, if they are holding sockets, damage may occur during safe position movement.\n" +
|
||||
"Check the socket status of each gripper before proceeding\n" +
|
||||
"If Z axes are moved arbitrarily, work may not continue properly\n " +
|
||||
"It is recommended to cancel the work and start again");
|
||||
|
||||
if (dlg != DialogResult.Yes) return;
|
||||
|
||||
var PosZ1 = MOT.GetPZPos(ePZLoc.READY);
|
||||
var PosZ2 = MOT.GetLZPos(eLZLoc.READY);
|
||||
var PosZ3 = MOT.GetRZPos(eRZLoc.READY);
|
||||
|
||||
PosZ1.Position = 0;
|
||||
PosZ2.Position = 0;
|
||||
PosZ3.Position = 0;
|
||||
|
||||
MOT.Move(PosZ1);
|
||||
MOT.Move(PosZ2);
|
||||
MOT.Move(PosZ3);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void button31_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void btJogStop_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (axisX >= 0) MOT.Stop((eAxis)axisX, "MOVETOGRP", true);
|
||||
if (axisY >= 0) MOT.Stop((eAxis)axisY, "MOVETOGRP", true);
|
||||
if (axisZ >= 0) MOT.Stop((eAxis)axisZ, "MOVETOGRP", true);
|
||||
}
|
||||
|
||||
|
||||
private void motCommandButton1_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (axisX >= 0) MOT.Stop((eAxis)axisX, "MOVETOGRP", true);
|
||||
if (axisY >= 0) MOT.Stop((eAxis)axisY, "MOVETOGRP", true);
|
||||
if (axisZ >= 0) MOT.Stop((eAxis)axisZ, "MOVETOGRP", true);
|
||||
}
|
||||
}
|
||||
}
|
||||
222
Handler/Project/Dialog/Motion_MoveToGroup.resx
Normal file
222
Handler/Project/Dialog/Motion_MoveToGroup.resx
Normal file
@@ -0,0 +1,222 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>123, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="button30.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAABE9JREFUWEft
|
||||
WF9MWlccNk2Xvm5vfdnjluyxS/awDC1JWxXBtljgIqDO6qSi/JHVdlu3DNc2Grsu2ZY53cNc06HGNK5J
|
||||
o+nWtBYQmRiVivyZgFKZKFDE/enqUvW3ey7n3tqC+JfELHzJl5twv/N937333HtOyMogg70KgyuUO+SN
|
||||
OGwPo/+O+qPLepN3QW/yRPUDPimWbBkD7lCLPRBbsXojT3+2BR6TXi690fut3uB7DUs2B5M71OqcjYEr
|
||||
uMiQLIjp0WHZljE4OX9/refw1CPoMvuQ79KmL9zknlc5Z5+Z0ExHQcQhb5j2ftox4GNh6foY9T/6+0UT
|
||||
xHQVRLw1MhP3NnoHsTQ5DI7ZQ8kMENNZ0Oiep/1Xu/unD2J5IgyOkDyZAWI6Cw75mMcMHWbP21ieCKM7
|
||||
qElmgJjOglZfhPG/bvKwsTwRmYKZgpmC/6eCVncAbNNhxmS3C5rt0+AIRLdX8N6wC4iSOqis/hjsM5Hn
|
||||
Cn7e3vsTlm8Zd0a8DuTV3n0bhBIV6JratlbQ7JzjogG3zQ8og5KKczDuj4A9sMAYKM82ruSxeKV4yKYh
|
||||
lKqJ9p7+VeTfeu0m5X/+0y+pgoOeEOPfZZh8Aw9JRD/A/gcPo0/QoLtWJ1gcfsrA6JqjBl+754QiXink
|
||||
ZfOWiwpl8rHp2MupeOnq969yWdxXBIRCThZaVn9wBRy/x0guQJ9xDGxTIcq/bywQLzjgHdcB7MN1kqPf
|
||||
Ec4fnQovoYH01XWSe7a2W8MgLdPCKUJBXb2gWAUKdQP8YrFTOpojk7Ogqb8EwuJarFNSR5pXv7sB4zPx
|
||||
uYf2nHcnglS5H+5MTHaZfK/jGhvjs8ZWxely7VIxcQYERRVQJJA/F0STkKmhu9dIBQ65ZkAsTdS8SJFM
|
||||
A6r6RiiRKUEirn5S8d5HYhy7NeTmFOTksrh/nTj+7jNzbTOIW/uAuNIJQvJFQr9JyDuLpoNccSGljuZJ
|
||||
fiXkZvOA9H58LJt3BMdtD3lH+PlCSfwxER9+BRLHCkhcQFHc6wJy8lPnvmjpII8b6/inquhy5FzmcnHM
|
||||
9kFI1W8hY8TiG6NMKE2h+jJ1rkbTQB030vH5FVQ5xKM5nEM4ZvsgZJo36WBxtzUhWFQTL6bUXmQKptLt
|
||||
ekEOR3mANP4TmYvqmkAy9g8TKu60MKVa2nuYNzeVrrBARhf8g8PhHMAxO4NIor5IBwjlnwDR9COILnzD
|
||||
hJZWnocRbxDqzsYf43o6gbgG8g4XUgWPvcNtwPY7R1VV1UtkwE0mfA1lp+upjy76zIz7Q1BW/n6CBlEg
|
||||
roWCowL67vWw2ez92H53oNPp9omkqjIyzCAu1UbPqBqg+evrYJmIrzY0HeSyeLm5DSQlavIjXbsqEFWv
|
||||
nDhevpR/+GQ4l1VwHy2Tuixd6tVip3DNxdhrS61Hiydso9fYlJuA3Uam4E6x5wv+FlxgkQUWN+KvntAg
|
||||
uYVaRNzUH0MZZLDnkJX1H2FAn90x0NzDAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="button28.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAA8hJREFUWEft
|
||||
l2tIU2EYx+0eRUREEEH0oS9BEEQEfehDYG1nm3NNkAoSukAGRUUQFRQsiu3sjlbSMMSKLO1imhoWFZXb
|
||||
zjmblbm0slWWpaal7qrzcnrf9dBw7nZ25uVDP3jgnPM+77MfL2P7n7T/TBUIktoIl6OupwwCtbUaLtOE
|
||||
pKUKLqcGhJZaIyStI3CLBK2sSGVZC7eTj9zIVGApuA0KZuptFXA7uYg05pVbDYwvXDBDx/jwGjyaPORG
|
||||
+krx86+BcMFT5a0BqY4phkeTg1jDLJXpaV+vN8CGC95pCrAZWtq3RV23DB5PPDI9lXfh4ad+FhEuWPNx
|
||||
hD1W5hzI0DN58Hhi2UzaF0p1tKezL+gXUbCssZ+VaGmvRPViESxNHJlaWkFWtniDdohIgrgOlbT4JBrm
|
||||
DCxNDFKFfV6mnu5r7fKBXnTB66+8+BRdAm3DfFgefyRa6sjpW81ucAsSTRBXbnGzR6yhDsPy+LLOZJ8l
|
||||
0zNd79s9oPaXWIJX7G70u0h3ZyvezoaW8YNQWXcdveZwgdc/Ygni2l3Y6CY01l3QMk6w7LQsI9P6urUP
|
||||
tELEEzRZevG/yzeFgp0ObamHUFuz9l1uGHN6mHiCuHZeeuMiVBY5tKUedHoO84dfoDSaRATPP+tmpQZb
|
||||
E7SlFqHKujmn4KVnZASMwkhEsBpVdn69m1Bb0qE1dWQZbdSjxp9R9BITxKV73MnKDDYKWlMDoTKvz863
|
||||
eQeHovolLHi/ZZiVGe0ekZraAO38kRtttffq24fBJSKJCuJSPmgflupttdDOD4HSskpuYPz+QEw/ToKV
|
||||
74ZQ4sYhl1kNW5IHyZWWmNsGwSMqXARxKaraBlGgLYUtySE4xyzHgdTdH9ePs2B582Aw0Ip15hWwjTvo
|
||||
XcNU+OTLADjEhKsgrpN3P+PXAhNs40a6kl6MIpX3lzsACrFJRvC2YwCfolekfL4EtiaOVE+ThhpnKPDF
|
||||
IRlBXEdvOv1iHa2GrYmRqa5bgOP8999++Pj4JCt4o8GPA60Hv0LA9vhINdSJs+XvRwe+OCQriOvAtQ9e
|
||||
kZY+DttjI8qvmYMCac/HDk5+vASv1ntwoO3ZpHg6F0ZER6y27j9e0hQxUsWCjyCuvUUOD0HSuTAiMtll
|
||||
ZTPQD/MPxzfOfrwFixgXi773HegUZ8KYsaAwueNgcePYuJwAfAVx5ZjeuAQktR3GjAVFqhabswc+khup
|
||||
ECyo+41OkXHiVwsYFUJI0pI9plfu6IEqNqkQxLXt4msXoaTEMCqESENZ8GA+BaOCgnyKQC4w6j88SUv7
|
||||
A1lGiJL4wYWWAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="button29.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAA8hJREFUWEft
|
||||
l2tIU2EYx+0eRUREEEH0oS9BEEQEfehDYG1nm3NNkAoSukAGRUUQFRQsiu3sjlbSMMSKLO1imhoWFZXb
|
||||
zjmblbm0slWWpaal7qrzcnrf9dBw7nZ25uVDP3jgnPM+77MfL2P7n7T/TBUIktoIl6OupwwCtbUaLtOE
|
||||
pKUKLqcGhJZaIyStI3CLBK2sSGVZC7eTj9zIVGApuA0KZuptFXA7uYg05pVbDYwvXDBDx/jwGjyaPORG
|
||||
+krx86+BcMFT5a0BqY4phkeTg1jDLJXpaV+vN8CGC95pCrAZWtq3RV23DB5PPDI9lXfh4ad+FhEuWPNx
|
||||
hD1W5hzI0DN58Hhi2UzaF0p1tKezL+gXUbCssZ+VaGmvRPViESxNHJlaWkFWtniDdohIgrgOlbT4JBrm
|
||||
DCxNDFKFfV6mnu5r7fKBXnTB66+8+BRdAm3DfFgefyRa6sjpW81ucAsSTRBXbnGzR6yhDsPy+LLOZJ8l
|
||||
0zNd79s9oPaXWIJX7G70u0h3ZyvezoaW8YNQWXcdveZwgdc/Ygni2l3Y6CY01l3QMk6w7LQsI9P6urUP
|
||||
tELEEzRZevG/yzeFgp0ObamHUFuz9l1uGHN6mHiCuHZeeuMiVBY5tKUedHoO84dfoDSaRATPP+tmpQZb
|
||||
E7SlFqHKujmn4KVnZASMwkhEsBpVdn69m1Bb0qE1dWQZbdSjxp9R9BITxKV73MnKDDYKWlMDoTKvz863
|
||||
eQeHovolLHi/ZZiVGe0ekZraAO38kRtttffq24fBJSKJCuJSPmgflupttdDOD4HSskpuYPz+QEw/ToKV
|
||||
74ZQ4sYhl1kNW5IHyZWWmNsGwSMqXARxKaraBlGgLYUtySE4xyzHgdTdH9ePs2B582Aw0Ip15hWwjTvo
|
||||
XcNU+OTLADjEhKsgrpN3P+PXAhNs40a6kl6MIpX3lzsACrFJRvC2YwCfolekfL4EtiaOVE+ThhpnKPDF
|
||||
IRlBXEdvOv1iHa2GrYmRqa5bgOP8999++Pj4JCt4o8GPA60Hv0LA9vhINdSJs+XvRwe+OCQriOvAtQ9e
|
||||
kZY+DttjI8qvmYMCac/HDk5+vASv1ntwoO3ZpHg6F0ZER6y27j9e0hQxUsWCjyCuvUUOD0HSuTAiMtll
|
||||
ZTPQD/MPxzfOfrwFixgXi773HegUZ8KYsaAwueNgcePYuJwAfAVx5ZjeuAQktR3GjAVFqhabswc+khup
|
||||
ECyo+41OkXHiVwsYFUJI0pI9plfu6IEqNqkQxLXt4msXoaTEMCqESENZ8GA+BaOCgnyKQC4w6j88SUv7
|
||||
A1lGiJL4wYWWAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="button31.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAABE9JREFUWEft
|
||||
WF9MWlccNk2Xvm5vfdnjluyxS/awDC1JWxXBtljgIqDO6qSi/JHVdlu3DNc2Grsu2ZY53cNc06HGNK5J
|
||||
o+nWtBYQmRiVivyZgFKZKFDE/enqUvW3ey7n3tqC+JfELHzJl5twv/N937333HtOyMogg70KgyuUO+SN
|
||||
OGwPo/+O+qPLepN3QW/yRPUDPimWbBkD7lCLPRBbsXojT3+2BR6TXi690fut3uB7DUs2B5M71OqcjYEr
|
||||
uMiQLIjp0WHZljE4OX9/refw1CPoMvuQ79KmL9zknlc5Z5+Z0ExHQcQhb5j2ftox4GNh6foY9T/6+0UT
|
||||
xHQVRLw1MhP3NnoHsTQ5DI7ZQ8kMENNZ0Oiep/1Xu/unD2J5IgyOkDyZAWI6Cw75mMcMHWbP21ieCKM7
|
||||
qElmgJjOglZfhPG/bvKwsTwRmYKZgpmC/6eCVncAbNNhxmS3C5rt0+AIRLdX8N6wC4iSOqis/hjsM5Hn
|
||||
Cn7e3vsTlm8Zd0a8DuTV3n0bhBIV6JratlbQ7JzjogG3zQ8og5KKczDuj4A9sMAYKM82ruSxeKV4yKYh
|
||||
lKqJ9p7+VeTfeu0m5X/+0y+pgoOeEOPfZZh8Aw9JRD/A/gcPo0/QoLtWJ1gcfsrA6JqjBl+754QiXink
|
||||
ZfOWiwpl8rHp2MupeOnq969yWdxXBIRCThZaVn9wBRy/x0guQJ9xDGxTIcq/bywQLzjgHdcB7MN1kqPf
|
||||
Ec4fnQovoYH01XWSe7a2W8MgLdPCKUJBXb2gWAUKdQP8YrFTOpojk7Ogqb8EwuJarFNSR5pXv7sB4zPx
|
||||
uYf2nHcnglS5H+5MTHaZfK/jGhvjs8ZWxely7VIxcQYERRVQJJA/F0STkKmhu9dIBQ65ZkAsTdS8SJFM
|
||||
A6r6RiiRKUEirn5S8d5HYhy7NeTmFOTksrh/nTj+7jNzbTOIW/uAuNIJQvJFQr9JyDuLpoNccSGljuZJ
|
||||
fiXkZvOA9H58LJt3BMdtD3lH+PlCSfwxER9+BRLHCkhcQFHc6wJy8lPnvmjpII8b6/inquhy5FzmcnHM
|
||||
9kFI1W8hY8TiG6NMKE2h+jJ1rkbTQB030vH5FVQ5xKM5nEM4ZvsgZJo36WBxtzUhWFQTL6bUXmQKptLt
|
||||
ekEOR3mANP4TmYvqmkAy9g8TKu60MKVa2nuYNzeVrrBARhf8g8PhHMAxO4NIor5IBwjlnwDR9COILnzD
|
||||
hJZWnocRbxDqzsYf43o6gbgG8g4XUgWPvcNtwPY7R1VV1UtkwE0mfA1lp+upjy76zIz7Q1BW/n6CBlEg
|
||||
roWCowL67vWw2ez92H53oNPp9omkqjIyzCAu1UbPqBqg+evrYJmIrzY0HeSyeLm5DSQlavIjXbsqEFWv
|
||||
nDhevpR/+GQ4l1VwHy2Tuixd6tVip3DNxdhrS61Hiydso9fYlJuA3Uam4E6x5wv+FlxgkQUWN+KvntAg
|
||||
uYVaRNzUH0MZZLDnkJX1H2FAn90x0NzDAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="tmDisplay.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>279, 17</value>
|
||||
</metadata>
|
||||
</root>
|
||||
873
Handler/Project/Dialog/Quick_Control.Designer.cs
generated
Normal file
873
Handler/Project/Dialog/Quick_Control.Designer.cs
generated
Normal file
@@ -0,0 +1,873 @@
|
||||
namespace Project.Dialog
|
||||
{
|
||||
partial class Quick_Control
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Quick_Control));
|
||||
this.timer1 = new System.Windows.Forms.Timer(this.components);
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.panBG = new System.Windows.Forms.Panel();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.button60 = new System.Windows.Forms.Button();
|
||||
this.button57 = new System.Windows.Forms.Button();
|
||||
this.button51 = new System.Windows.Forms.Button();
|
||||
this.button52 = new System.Windows.Forms.Button();
|
||||
this.button58 = new System.Windows.Forms.Button();
|
||||
this.button41 = new System.Windows.Forms.Button();
|
||||
this.button44 = new System.Windows.Forms.Button();
|
||||
this.button3 = new System.Windows.Forms.Button();
|
||||
this.button54 = new System.Windows.Forms.Button();
|
||||
this.button53 = new System.Windows.Forms.Button();
|
||||
this.button5 = new System.Windows.Forms.Button();
|
||||
this.button6 = new System.Windows.Forms.Button();
|
||||
this.button4 = new System.Windows.Forms.Button();
|
||||
this.button59 = new System.Windows.Forms.Button();
|
||||
this.button8 = new System.Windows.Forms.Button();
|
||||
this.button14 = new System.Windows.Forms.Button();
|
||||
this.button15 = new System.Windows.Forms.Button();
|
||||
this.button16 = new System.Windows.Forms.Button();
|
||||
this.button17 = new System.Windows.Forms.Button();
|
||||
this.button19 = new System.Windows.Forms.Button();
|
||||
this.btLCyl = new System.Windows.Forms.Button();
|
||||
this.btRCyl = new System.Windows.Forms.Button();
|
||||
this.panel2 = new System.Windows.Forms.Panel();
|
||||
this.groupBox3 = new System.Windows.Forms.GroupBox();
|
||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.button12 = new System.Windows.Forms.Button();
|
||||
this.button10 = new System.Windows.Forms.Button();
|
||||
this.button38 = new System.Windows.Forms.Button();
|
||||
this.button40 = new System.Windows.Forms.Button();
|
||||
this.button13 = new System.Windows.Forms.Button();
|
||||
this.button24 = new System.Windows.Forms.Button();
|
||||
this.button1 = new System.Windows.Forms.Button();
|
||||
this.button2 = new System.Windows.Forms.Button();
|
||||
this.button7 = new System.Windows.Forms.Button();
|
||||
this.button9 = new System.Windows.Forms.Button();
|
||||
this.button11 = new System.Windows.Forms.Button();
|
||||
this.button18 = new System.Windows.Forms.Button();
|
||||
this.panBG.SuspendLayout();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.tableLayoutPanel2.SuspendLayout();
|
||||
this.groupBox3.SuspendLayout();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// timer1
|
||||
//
|
||||
this.timer1.Interval = 500;
|
||||
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.panel1.Location = new System.Drawing.Point(5, 511);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Size = new System.Drawing.Size(286, 7);
|
||||
this.panel1.TabIndex = 72;
|
||||
//
|
||||
// panBG
|
||||
//
|
||||
this.panBG.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
|
||||
this.panBG.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.panBG.Controls.Add(this.panel1);
|
||||
this.panBG.Controls.Add(this.groupBox1);
|
||||
this.panBG.Controls.Add(this.panel2);
|
||||
this.panBG.Controls.Add(this.groupBox3);
|
||||
this.panBG.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.panBG.Location = new System.Drawing.Point(1, 1);
|
||||
this.panBG.Name = "panBG";
|
||||
this.panBG.Padding = new System.Windows.Forms.Padding(5);
|
||||
this.panBG.Size = new System.Drawing.Size(298, 540);
|
||||
this.panBG.TabIndex = 73;
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.tableLayoutPanel2);
|
||||
this.groupBox1.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.groupBox1.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.groupBox1.ForeColor = System.Drawing.Color.WhiteSmoke;
|
||||
this.groupBox1.Location = new System.Drawing.Point(5, 189);
|
||||
this.groupBox1.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.Padding = new System.Windows.Forms.Padding(5, 3, 5, 5);
|
||||
this.groupBox1.Size = new System.Drawing.Size(286, 322);
|
||||
this.groupBox1.TabIndex = 78;
|
||||
this.groupBox1.TabStop = false;
|
||||
this.groupBox1.Text = "ETC";
|
||||
//
|
||||
// tableLayoutPanel2
|
||||
//
|
||||
this.tableLayoutPanel2.ColumnCount = 4;
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tableLayoutPanel2.Controls.Add(this.button60, 0, 3);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button57, 0, 2);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button51, 0, 1);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button52, 1, 1);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button58, 3, 2);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button41, 0, 0);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button44, 1, 0);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button3, 1, 3);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button54, 2, 1);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button53, 3, 1);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button5, 1, 2);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button6, 2, 2);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button4, 2, 3);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button59, 3, 3);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button8, 0, 4);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button14, 1, 4);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button15, 2, 4);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button16, 3, 4);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button17, 0, 5);
|
||||
this.tableLayoutPanel2.Controls.Add(this.button19, 3, 5);
|
||||
this.tableLayoutPanel2.Controls.Add(this.btLCyl, 1, 5);
|
||||
this.tableLayoutPanel2.Controls.Add(this.btRCyl, 2, 5);
|
||||
this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tableLayoutPanel2.Location = new System.Drawing.Point(5, 19);
|
||||
this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.tableLayoutPanel2.Name = "tableLayoutPanel2";
|
||||
this.tableLayoutPanel2.RowCount = 6;
|
||||
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66708F));
|
||||
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66708F));
|
||||
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66708F));
|
||||
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66542F));
|
||||
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
|
||||
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
|
||||
this.tableLayoutPanel2.Size = new System.Drawing.Size(276, 298);
|
||||
this.tableLayoutPanel2.TabIndex = 0;
|
||||
//
|
||||
// button60
|
||||
//
|
||||
this.button60.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
|
||||
this.button60.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button60.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button60.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button60.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button60.ForeColor = System.Drawing.Color.White;
|
||||
this.button60.Location = new System.Drawing.Point(4, 151);
|
||||
this.button60.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button60.Name = "button60";
|
||||
this.button60.Size = new System.Drawing.Size(61, 41);
|
||||
this.button60.TabIndex = 61;
|
||||
this.button60.Tag = "0";
|
||||
this.button60.Text = "LP Forward";
|
||||
this.button60.UseVisualStyleBackColor = false;
|
||||
this.button60.Click += new System.EventHandler(this.button60_Click);
|
||||
//
|
||||
// button57
|
||||
//
|
||||
this.button57.BackColor = System.Drawing.Color.Olive;
|
||||
this.button57.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button57.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button57.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button57.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button57.ForeColor = System.Drawing.Color.White;
|
||||
this.button57.Location = new System.Drawing.Point(4, 102);
|
||||
this.button57.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button57.Name = "button57";
|
||||
this.button57.Size = new System.Drawing.Size(61, 41);
|
||||
this.button57.TabIndex = 59;
|
||||
this.button57.Tag = "2";
|
||||
this.button57.Text = "LP-AIR";
|
||||
this.button57.UseVisualStyleBackColor = false;
|
||||
this.button57.Click += new System.EventHandler(this.button57_Click);
|
||||
//
|
||||
// button51
|
||||
//
|
||||
this.button51.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(0)))), ((int)(((byte)(64)))));
|
||||
this.button51.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button51.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button51.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button51.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button51.ForeColor = System.Drawing.Color.White;
|
||||
this.button51.Location = new System.Drawing.Point(4, 53);
|
||||
this.button51.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button51.Name = "button51";
|
||||
this.button51.Size = new System.Drawing.Size(61, 41);
|
||||
this.button51.TabIndex = 57;
|
||||
this.button51.Tag = "1";
|
||||
this.button51.Text = "LP Suction";
|
||||
this.button51.UseVisualStyleBackColor = false;
|
||||
this.button51.Click += new System.EventHandler(this.button51_Click);
|
||||
//
|
||||
// button52
|
||||
//
|
||||
this.button52.BackColor = System.Drawing.Color.Navy;
|
||||
this.button52.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button52.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button52.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button52.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button52.ForeColor = System.Drawing.Color.White;
|
||||
this.button52.Location = new System.Drawing.Point(73, 53);
|
||||
this.button52.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button52.Name = "button52";
|
||||
this.button52.Size = new System.Drawing.Size(61, 41);
|
||||
this.button52.TabIndex = 57;
|
||||
this.button52.Tag = "2";
|
||||
this.button52.Text = "LP Exhaust";
|
||||
this.button52.UseVisualStyleBackColor = false;
|
||||
this.button52.Click += new System.EventHandler(this.button51_Click);
|
||||
//
|
||||
// button58
|
||||
//
|
||||
this.button58.BackColor = System.Drawing.Color.Olive;
|
||||
this.button58.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button58.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button58.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button58.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button58.ForeColor = System.Drawing.Color.White;
|
||||
this.button58.Location = new System.Drawing.Point(211, 102);
|
||||
this.button58.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button58.Name = "button58";
|
||||
this.button58.Size = new System.Drawing.Size(61, 41);
|
||||
this.button58.TabIndex = 59;
|
||||
this.button58.Tag = "2";
|
||||
this.button58.Text = "RP-AIR";
|
||||
this.button58.UseVisualStyleBackColor = false;
|
||||
this.button58.Click += new System.EventHandler(this.button58_Click);
|
||||
//
|
||||
// button41
|
||||
//
|
||||
this.button41.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70)))));
|
||||
this.button41.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button41.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button41.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button41.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button41.ForeColor = System.Drawing.Color.White;
|
||||
this.button41.Location = new System.Drawing.Point(4, 4);
|
||||
this.button41.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button41.Name = "button41";
|
||||
this.button41.Size = new System.Drawing.Size(61, 41);
|
||||
this.button41.TabIndex = 57;
|
||||
this.button41.Text = "Picker Vacuum";
|
||||
this.button41.UseVisualStyleBackColor = false;
|
||||
this.button41.Click += new System.EventHandler(this.button41_Click);
|
||||
//
|
||||
// button44
|
||||
//
|
||||
this.button44.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70)))));
|
||||
this.tableLayoutPanel2.SetColumnSpan(this.button44, 3);
|
||||
this.button44.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button44.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button44.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button44.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button44.ForeColor = System.Drawing.Color.White;
|
||||
this.button44.Location = new System.Drawing.Point(72, 3);
|
||||
this.button44.Name = "button44";
|
||||
this.button44.Size = new System.Drawing.Size(201, 43);
|
||||
this.button44.TabIndex = 58;
|
||||
this.button44.Text = "Main AIR";
|
||||
this.button44.UseVisualStyleBackColor = false;
|
||||
this.button44.Click += new System.EventHandler(this.button44_Click);
|
||||
//
|
||||
// button3
|
||||
//
|
||||
this.button3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70)))));
|
||||
this.button3.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button3.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button3.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.button3.ForeColor = System.Drawing.Color.Gold;
|
||||
this.button3.Location = new System.Drawing.Point(72, 150);
|
||||
this.button3.Name = "button3";
|
||||
this.button3.Size = new System.Drawing.Size(63, 43);
|
||||
this.button3.TabIndex = 58;
|
||||
this.button3.Text = "Print";
|
||||
this.button3.UseVisualStyleBackColor = false;
|
||||
this.button3.Click += new System.EventHandler(this.button3_Click_1);
|
||||
//
|
||||
// button54
|
||||
//
|
||||
this.button54.BackColor = System.Drawing.Color.Navy;
|
||||
this.button54.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button54.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button54.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button54.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button54.ForeColor = System.Drawing.Color.White;
|
||||
this.button54.Location = new System.Drawing.Point(142, 53);
|
||||
this.button54.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button54.Name = "button54";
|
||||
this.button54.Size = new System.Drawing.Size(61, 41);
|
||||
this.button54.TabIndex = 57;
|
||||
this.button54.Tag = "2";
|
||||
this.button54.Text = "RP Exhaust";
|
||||
this.button54.UseVisualStyleBackColor = false;
|
||||
this.button54.Click += new System.EventHandler(this.button53_Click);
|
||||
//
|
||||
// button53
|
||||
//
|
||||
this.button53.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(0)))), ((int)(((byte)(64)))));
|
||||
this.button53.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button53.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button53.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button53.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button53.ForeColor = System.Drawing.Color.White;
|
||||
this.button53.Location = new System.Drawing.Point(211, 53);
|
||||
this.button53.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button53.Name = "button53";
|
||||
this.button53.Size = new System.Drawing.Size(61, 41);
|
||||
this.button53.TabIndex = 57;
|
||||
this.button53.Tag = "1";
|
||||
this.button53.Text = "RP Suction";
|
||||
this.button53.UseVisualStyleBackColor = false;
|
||||
this.button53.Click += new System.EventHandler(this.button53_Click);
|
||||
//
|
||||
// button5
|
||||
//
|
||||
this.button5.BackColor = System.Drawing.Color.Lime;
|
||||
this.button5.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button5.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button5.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button5.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.button5.ForeColor = System.Drawing.Color.Black;
|
||||
this.button5.Location = new System.Drawing.Point(72, 101);
|
||||
this.button5.Name = "button5";
|
||||
this.button5.Size = new System.Drawing.Size(63, 43);
|
||||
this.button5.TabIndex = 58;
|
||||
this.button5.Text = "Detect L";
|
||||
this.button5.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// button6
|
||||
//
|
||||
this.button6.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70)))));
|
||||
this.button6.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button6.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button6.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button6.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.button6.ForeColor = System.Drawing.Color.White;
|
||||
this.button6.Location = new System.Drawing.Point(141, 101);
|
||||
this.button6.Name = "button6";
|
||||
this.button6.Size = new System.Drawing.Size(63, 43);
|
||||
this.button6.TabIndex = 58;
|
||||
this.button6.Text = "Detect R";
|
||||
this.button6.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// button4
|
||||
//
|
||||
this.button4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70)))));
|
||||
this.button4.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button4.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button4.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button4.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.button4.ForeColor = System.Drawing.Color.Gold;
|
||||
this.button4.Location = new System.Drawing.Point(141, 150);
|
||||
this.button4.Name = "button4";
|
||||
this.button4.Size = new System.Drawing.Size(63, 43);
|
||||
this.button4.TabIndex = 58;
|
||||
this.button4.Text = "Print";
|
||||
this.button4.UseVisualStyleBackColor = false;
|
||||
this.button4.Click += new System.EventHandler(this.button4_Click_1);
|
||||
//
|
||||
// button59
|
||||
//
|
||||
this.button59.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
|
||||
this.button59.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button59.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button59.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button59.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button59.ForeColor = System.Drawing.Color.White;
|
||||
this.button59.Location = new System.Drawing.Point(211, 151);
|
||||
this.button59.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button59.Name = "button59";
|
||||
this.button59.Size = new System.Drawing.Size(61, 41);
|
||||
this.button59.TabIndex = 60;
|
||||
this.button59.Tag = "0";
|
||||
this.button59.Text = "RP Forward";
|
||||
this.button59.UseVisualStyleBackColor = false;
|
||||
this.button59.Click += new System.EventHandler(this.button59_Click);
|
||||
//
|
||||
// button8
|
||||
//
|
||||
this.button8.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
|
||||
this.button8.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button8.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button8.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button8.Font = new System.Drawing.Font("맑은 고딕", 17F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button8.ForeColor = System.Drawing.Color.Gold;
|
||||
this.button8.Location = new System.Drawing.Point(4, 200);
|
||||
this.button8.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button8.Name = "button8";
|
||||
this.button8.Size = new System.Drawing.Size(61, 41);
|
||||
this.button8.TabIndex = 61;
|
||||
this.button8.Tag = "0";
|
||||
this.button8.Text = "Y-";
|
||||
this.button8.UseVisualStyleBackColor = false;
|
||||
this.button8.Click += new System.EventHandler(this.button8_Click);
|
||||
//
|
||||
// button14
|
||||
//
|
||||
this.button14.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
|
||||
this.button14.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button14.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button14.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button14.Font = new System.Drawing.Font("맑은 고딕", 17F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button14.ForeColor = System.Drawing.Color.Tomato;
|
||||
this.button14.Location = new System.Drawing.Point(73, 200);
|
||||
this.button14.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button14.Name = "button14";
|
||||
this.button14.Size = new System.Drawing.Size(61, 41);
|
||||
this.button14.TabIndex = 61;
|
||||
this.button14.Tag = "0";
|
||||
this.button14.Text = "[R]";
|
||||
this.button14.UseVisualStyleBackColor = false;
|
||||
this.button14.Click += new System.EventHandler(this.button14_Click);
|
||||
//
|
||||
// button15
|
||||
//
|
||||
this.button15.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
|
||||
this.button15.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button15.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button15.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button15.Font = new System.Drawing.Font("맑은 고딕", 17F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button15.ForeColor = System.Drawing.Color.Gold;
|
||||
this.button15.Location = new System.Drawing.Point(142, 200);
|
||||
this.button15.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button15.Name = "button15";
|
||||
this.button15.Size = new System.Drawing.Size(61, 41);
|
||||
this.button15.TabIndex = 61;
|
||||
this.button15.Tag = "0";
|
||||
this.button15.Text = "Y-";
|
||||
this.button15.UseVisualStyleBackColor = false;
|
||||
this.button15.Click += new System.EventHandler(this.button15_Click_1);
|
||||
//
|
||||
// button16
|
||||
//
|
||||
this.button16.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
|
||||
this.button16.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button16.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button16.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button16.Font = new System.Drawing.Font("맑은 고딕", 17F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button16.ForeColor = System.Drawing.Color.Tomato;
|
||||
this.button16.Location = new System.Drawing.Point(211, 200);
|
||||
this.button16.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button16.Name = "button16";
|
||||
this.button16.Size = new System.Drawing.Size(61, 41);
|
||||
this.button16.TabIndex = 61;
|
||||
this.button16.Tag = "0";
|
||||
this.button16.Text = "[R]";
|
||||
this.button16.UseVisualStyleBackColor = false;
|
||||
this.button16.Click += new System.EventHandler(this.button16_Click_2);
|
||||
//
|
||||
// button17
|
||||
//
|
||||
this.button17.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button17.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button17.ForeColor = System.Drawing.Color.Black;
|
||||
this.button17.Location = new System.Drawing.Point(3, 248);
|
||||
this.button17.Name = "button17";
|
||||
this.button17.Size = new System.Drawing.Size(63, 47);
|
||||
this.button17.TabIndex = 62;
|
||||
this.button17.Text = "L\r\nConv";
|
||||
this.button17.UseVisualStyleBackColor = true;
|
||||
this.button17.Click += new System.EventHandler(this.button17_Click);
|
||||
//
|
||||
// button19
|
||||
//
|
||||
this.button19.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button19.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button19.ForeColor = System.Drawing.Color.Black;
|
||||
this.button19.Location = new System.Drawing.Point(210, 248);
|
||||
this.button19.Name = "button19";
|
||||
this.button19.Size = new System.Drawing.Size(63, 47);
|
||||
this.button19.TabIndex = 62;
|
||||
this.button19.Text = "R\r\nConv";
|
||||
this.button19.UseVisualStyleBackColor = true;
|
||||
this.button19.Click += new System.EventHandler(this.button19_Click);
|
||||
//
|
||||
// btLCyl
|
||||
//
|
||||
this.btLCyl.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.btLCyl.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.btLCyl.ForeColor = System.Drawing.Color.Black;
|
||||
this.btLCyl.Location = new System.Drawing.Point(72, 248);
|
||||
this.btLCyl.Name = "btLCyl";
|
||||
this.btLCyl.Size = new System.Drawing.Size(63, 47);
|
||||
this.btLCyl.TabIndex = 63;
|
||||
this.btLCyl.Text = "L\r\nCylinder";
|
||||
this.btLCyl.UseVisualStyleBackColor = true;
|
||||
this.btLCyl.Click += new System.EventHandler(this.button20_Click);
|
||||
//
|
||||
// btRCyl
|
||||
//
|
||||
this.btRCyl.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.btRCyl.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.btRCyl.ForeColor = System.Drawing.Color.Black;
|
||||
this.btRCyl.Location = new System.Drawing.Point(141, 248);
|
||||
this.btRCyl.Name = "btRCyl";
|
||||
this.btRCyl.Size = new System.Drawing.Size(63, 47);
|
||||
this.btRCyl.TabIndex = 63;
|
||||
this.btRCyl.Text = "R\r\nCylinder";
|
||||
this.btRCyl.UseVisualStyleBackColor = true;
|
||||
this.btRCyl.Click += new System.EventHandler(this.button21_Click);
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.panel2.Location = new System.Drawing.Point(5, 182);
|
||||
this.panel2.Name = "panel2";
|
||||
this.panel2.Size = new System.Drawing.Size(286, 7);
|
||||
this.panel2.TabIndex = 77;
|
||||
//
|
||||
// groupBox3
|
||||
//
|
||||
this.groupBox3.Controls.Add(this.tableLayoutPanel1);
|
||||
this.groupBox3.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.groupBox3.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.groupBox3.ForeColor = System.Drawing.Color.WhiteSmoke;
|
||||
this.groupBox3.Location = new System.Drawing.Point(5, 5);
|
||||
this.groupBox3.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.groupBox3.Name = "groupBox3";
|
||||
this.groupBox3.Padding = new System.Windows.Forms.Padding(5, 3, 5, 5);
|
||||
this.groupBox3.Size = new System.Drawing.Size(286, 177);
|
||||
this.groupBox3.TabIndex = 76;
|
||||
this.groupBox3.TabStop = false;
|
||||
this.groupBox3.Text = "PORT Z-MOTOR";
|
||||
//
|
||||
// tableLayoutPanel1
|
||||
//
|
||||
this.tableLayoutPanel1.ColumnCount = 4;
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tableLayoutPanel1.Controls.Add(this.button12, 0, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.button10, 0, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.button38, 1, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.button40, 0, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.button13, 0, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.button24, 1, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.button1, 2, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.button2, 2, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.button7, 2, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.button9, 0, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.button11, 1, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.button18, 2, 3);
|
||||
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(5, 19);
|
||||
this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
this.tableLayoutPanel1.RowCount = 4;
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.00062F));
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.00062F));
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.00062F));
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 24.99813F));
|
||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(276, 153);
|
||||
this.tableLayoutPanel1.TabIndex = 0;
|
||||
//
|
||||
// button12
|
||||
//
|
||||
this.button12.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70)))));
|
||||
this.button12.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button12.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button12.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button12.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button12.ForeColor = System.Drawing.Color.White;
|
||||
this.button12.Location = new System.Drawing.Point(73, 80);
|
||||
this.button12.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button12.Name = "button12";
|
||||
this.button12.Size = new System.Drawing.Size(61, 30);
|
||||
this.button12.TabIndex = 61;
|
||||
this.button12.Tag = "1";
|
||||
this.button12.Text = "▼";
|
||||
this.button12.UseVisualStyleBackColor = false;
|
||||
this.button12.Click += new System.EventHandler(this.button10_Click_1);
|
||||
//
|
||||
// button10
|
||||
//
|
||||
this.button10.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70)))));
|
||||
this.button10.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button10.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button10.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button10.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button10.ForeColor = System.Drawing.Color.White;
|
||||
this.button10.Location = new System.Drawing.Point(4, 80);
|
||||
this.button10.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button10.Name = "button10";
|
||||
this.button10.Size = new System.Drawing.Size(61, 30);
|
||||
this.button10.TabIndex = 60;
|
||||
this.button10.Tag = "0";
|
||||
this.button10.Text = "▼";
|
||||
this.button10.UseVisualStyleBackColor = false;
|
||||
this.button10.Click += new System.EventHandler(this.button10_Click_1);
|
||||
//
|
||||
// button38
|
||||
//
|
||||
this.button38.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70)))));
|
||||
this.button38.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button38.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button38.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button38.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button38.ForeColor = System.Drawing.Color.White;
|
||||
this.button38.Location = new System.Drawing.Point(73, 4);
|
||||
this.button38.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button38.Name = "button38";
|
||||
this.button38.Size = new System.Drawing.Size(61, 30);
|
||||
this.button38.TabIndex = 57;
|
||||
this.button38.Tag = "1";
|
||||
this.button38.Text = "▲";
|
||||
this.button38.UseVisualStyleBackColor = false;
|
||||
this.button38.Click += new System.EventHandler(this.button40_Click);
|
||||
//
|
||||
// button40
|
||||
//
|
||||
this.button40.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70)))));
|
||||
this.button40.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button40.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button40.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button40.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button40.ForeColor = System.Drawing.Color.White;
|
||||
this.button40.Location = new System.Drawing.Point(4, 4);
|
||||
this.button40.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button40.Name = "button40";
|
||||
this.button40.Size = new System.Drawing.Size(61, 30);
|
||||
this.button40.TabIndex = 55;
|
||||
this.button40.Tag = "0";
|
||||
this.button40.Text = "▲";
|
||||
this.button40.UseVisualStyleBackColor = false;
|
||||
this.button40.Click += new System.EventHandler(this.button40_Click);
|
||||
//
|
||||
// button13
|
||||
//
|
||||
this.button13.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70)))));
|
||||
this.button13.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button13.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button13.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button13.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button13.ForeColor = System.Drawing.Color.White;
|
||||
this.button13.Location = new System.Drawing.Point(4, 42);
|
||||
this.button13.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button13.Name = "button13";
|
||||
this.button13.Size = new System.Drawing.Size(61, 30);
|
||||
this.button13.TabIndex = 62;
|
||||
this.button13.Tag = "0";
|
||||
this.button13.Text = "STOP";
|
||||
this.button13.UseVisualStyleBackColor = false;
|
||||
this.button13.Click += new System.EventHandler(this.button13_Click_2);
|
||||
//
|
||||
// button24
|
||||
//
|
||||
this.button24.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70)))));
|
||||
this.button24.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button24.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button24.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button24.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button24.ForeColor = System.Drawing.Color.White;
|
||||
this.button24.Location = new System.Drawing.Point(73, 42);
|
||||
this.button24.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button24.Name = "button24";
|
||||
this.button24.Size = new System.Drawing.Size(61, 30);
|
||||
this.button24.TabIndex = 62;
|
||||
this.button24.Tag = "1";
|
||||
this.button24.Text = "STOP";
|
||||
this.button24.UseVisualStyleBackColor = false;
|
||||
this.button24.Click += new System.EventHandler(this.button13_Click_2);
|
||||
//
|
||||
// button1
|
||||
//
|
||||
this.button1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70)))));
|
||||
this.button1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button1.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button1.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button1.ForeColor = System.Drawing.Color.White;
|
||||
this.button1.Location = new System.Drawing.Point(142, 4);
|
||||
this.button1.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button1.Name = "button1";
|
||||
this.button1.Size = new System.Drawing.Size(61, 30);
|
||||
this.button1.TabIndex = 57;
|
||||
this.button1.Tag = "2";
|
||||
this.button1.Text = "▲";
|
||||
this.button1.UseVisualStyleBackColor = false;
|
||||
this.button1.Click += new System.EventHandler(this.button40_Click);
|
||||
//
|
||||
// button2
|
||||
//
|
||||
this.button2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70)))));
|
||||
this.button2.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button2.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button2.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button2.ForeColor = System.Drawing.Color.White;
|
||||
this.button2.Location = new System.Drawing.Point(142, 42);
|
||||
this.button2.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button2.Name = "button2";
|
||||
this.button2.Size = new System.Drawing.Size(61, 30);
|
||||
this.button2.TabIndex = 62;
|
||||
this.button2.Tag = "2";
|
||||
this.button2.Text = "STOP";
|
||||
this.button2.UseVisualStyleBackColor = false;
|
||||
this.button2.Click += new System.EventHandler(this.button13_Click_2);
|
||||
//
|
||||
// button7
|
||||
//
|
||||
this.button7.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70)))));
|
||||
this.button7.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button7.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button7.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button7.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button7.ForeColor = System.Drawing.Color.White;
|
||||
this.button7.Location = new System.Drawing.Point(142, 80);
|
||||
this.button7.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button7.Name = "button7";
|
||||
this.button7.Size = new System.Drawing.Size(61, 30);
|
||||
this.button7.TabIndex = 60;
|
||||
this.button7.Tag = "2";
|
||||
this.button7.Text = "▼";
|
||||
this.button7.UseVisualStyleBackColor = false;
|
||||
this.button7.Click += new System.EventHandler(this.button10_Click_1);
|
||||
//
|
||||
// button9
|
||||
//
|
||||
this.button9.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70)))));
|
||||
this.button9.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button9.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button9.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button9.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button9.ForeColor = System.Drawing.Color.White;
|
||||
this.button9.Location = new System.Drawing.Point(4, 118);
|
||||
this.button9.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button9.Name = "button9";
|
||||
this.button9.Size = new System.Drawing.Size(61, 31);
|
||||
this.button9.TabIndex = 60;
|
||||
this.button9.Tag = "0";
|
||||
this.button9.Text = "MAG";
|
||||
this.button9.UseVisualStyleBackColor = false;
|
||||
this.button9.Click += new System.EventHandler(this.button9_Click);
|
||||
//
|
||||
// button11
|
||||
//
|
||||
this.button11.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70)))));
|
||||
this.button11.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button11.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button11.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button11.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button11.ForeColor = System.Drawing.Color.White;
|
||||
this.button11.Location = new System.Drawing.Point(73, 118);
|
||||
this.button11.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button11.Name = "button11";
|
||||
this.button11.Size = new System.Drawing.Size(61, 31);
|
||||
this.button11.TabIndex = 60;
|
||||
this.button11.Tag = "1";
|
||||
this.button11.Text = "MAG";
|
||||
this.button11.UseVisualStyleBackColor = false;
|
||||
this.button11.Click += new System.EventHandler(this.button9_Click);
|
||||
//
|
||||
// button18
|
||||
//
|
||||
this.button18.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70)))));
|
||||
this.button18.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button18.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
|
||||
this.button18.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button18.Font = new System.Drawing.Font("맑은 고딕", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.button18.ForeColor = System.Drawing.Color.White;
|
||||
this.button18.Location = new System.Drawing.Point(142, 118);
|
||||
this.button18.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.button18.Name = "button18";
|
||||
this.button18.Size = new System.Drawing.Size(61, 31);
|
||||
this.button18.TabIndex = 60;
|
||||
this.button18.Tag = "2";
|
||||
this.button18.Text = "MAG";
|
||||
this.button18.UseVisualStyleBackColor = false;
|
||||
this.button18.Click += new System.EventHandler(this.button9_Click);
|
||||
//
|
||||
// Quick_Control
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 17F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(15)))), ((int)(((byte)(15)))), ((int)(((byte)(15)))));
|
||||
this.ClientSize = new System.Drawing.Size(300, 542);
|
||||
this.Controls.Add(this.panBG);
|
||||
this.Font = new System.Drawing.Font("맑은 고딕", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "Quick_Control";
|
||||
this.Padding = new System.Windows.Forms.Padding(1);
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "Manual Operation";
|
||||
this.TopMost = true;
|
||||
this.Load += new System.EventHandler(this.@__LoaD);
|
||||
this.panBG.ResumeLayout(false);
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.tableLayoutPanel2.ResumeLayout(false);
|
||||
this.groupBox3.ResumeLayout(false);
|
||||
this.tableLayoutPanel1.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private System.Windows.Forms.Timer timer1;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
public System.Windows.Forms.Panel panBG;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||
private System.Windows.Forms.Button button38;
|
||||
private System.Windows.Forms.Button button40;
|
||||
public System.Windows.Forms.GroupBox groupBox3;
|
||||
private System.Windows.Forms.Button button12;
|
||||
private System.Windows.Forms.Button button10;
|
||||
private System.Windows.Forms.Button button13;
|
||||
private System.Windows.Forms.Button button24;
|
||||
private System.Windows.Forms.Panel panel2;
|
||||
public System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
|
||||
private System.Windows.Forms.Button button41;
|
||||
private System.Windows.Forms.Button button44;
|
||||
private System.Windows.Forms.Button button1;
|
||||
private System.Windows.Forms.Button button2;
|
||||
private System.Windows.Forms.Button button7;
|
||||
private System.Windows.Forms.Button button9;
|
||||
private System.Windows.Forms.Button button11;
|
||||
private System.Windows.Forms.Button button18;
|
||||
private System.Windows.Forms.Button button51;
|
||||
private System.Windows.Forms.Button button52;
|
||||
private System.Windows.Forms.Button button53;
|
||||
private System.Windows.Forms.Button button54;
|
||||
private System.Windows.Forms.Button button57;
|
||||
private System.Windows.Forms.Button button58;
|
||||
private System.Windows.Forms.Button button59;
|
||||
private System.Windows.Forms.Button button60;
|
||||
private System.Windows.Forms.Button button3;
|
||||
private System.Windows.Forms.Button button4;
|
||||
private System.Windows.Forms.Button button5;
|
||||
private System.Windows.Forms.Button button6;
|
||||
private System.Windows.Forms.Button button8;
|
||||
private System.Windows.Forms.Button button14;
|
||||
private System.Windows.Forms.Button button15;
|
||||
private System.Windows.Forms.Button button16;
|
||||
private System.Windows.Forms.Button button17;
|
||||
private System.Windows.Forms.Button button19;
|
||||
private System.Windows.Forms.Button btLCyl;
|
||||
private System.Windows.Forms.Button btRCyl;
|
||||
}
|
||||
}
|
||||
456
Handler/Project/Dialog/Quick_Control.cs
Normal file
456
Handler/Project/Dialog/Quick_Control.cs
Normal file
@@ -0,0 +1,456 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using AR;
|
||||
|
||||
namespace Project.Dialog
|
||||
{
|
||||
public partial class Quick_Control : Form
|
||||
{
|
||||
public Quick_Control()
|
||||
{
|
||||
InitializeComponent();
|
||||
this.FormClosing += __Closing;
|
||||
//this.lbTitle.MouseMove += LbTitle_MouseMove;
|
||||
//this.lbTitle.MouseUp += LbTitle_MouseUp;
|
||||
//this.lbTitle.MouseDown += LbTitle_MouseDown;
|
||||
}
|
||||
|
||||
void __Closing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
timer1.Stop();
|
||||
}
|
||||
private void __LoaD(object sender, EventArgs e)
|
||||
{
|
||||
timer1.Start();
|
||||
//button31.Text = ((eAxis)0).ToString();
|
||||
//button32.Text = ((eAxis)1).ToString();
|
||||
//button33.Text = ((eAxis)2).ToString();
|
||||
}
|
||||
#region "Mouse Form Move"
|
||||
|
||||
private Boolean fMove = false;
|
||||
private Point MDownPos;
|
||||
private void LbTitle_MouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (fMove)
|
||||
{
|
||||
Point offset = new Point(e.X - MDownPos.X, e.Y - MDownPos.Y);
|
||||
this.Left += offset.X;
|
||||
this.Top += offset.Y;
|
||||
offset = new Point(0, 0);
|
||||
}
|
||||
}
|
||||
private void LbTitle_MouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
fMove = false;
|
||||
}
|
||||
private void LbTitle_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
MDownPos = new Point(e.X, e.Y);
|
||||
fMove = true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
private void button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (PUB.mot.IsHomeSet((int)eAxis.Z_THETA) == false)
|
||||
{
|
||||
UTIL.MsgE("Cannot move because home search is not completed");
|
||||
return;
|
||||
}
|
||||
|
||||
var speed = 50.0;
|
||||
if (PUB.Result != null &&
|
||||
PUB.Result.mModel != null &&
|
||||
PUB.Result.mModel.Title != "")
|
||||
speed = 0;// Pub.Result.mModel.XSpeed;
|
||||
|
||||
MOT.Move(eAxis.Z_THETA, 0, speed);
|
||||
}
|
||||
|
||||
private void timer1_Tick(object sender, EventArgs e)
|
||||
{
|
||||
//감지센서 상태 210208
|
||||
button5.BackColor = DIO.GetIOInput(eDIName.L_PICK_VAC) ? Color.Lime : Color.FromArgb(70, 70, 70);
|
||||
button5.ForeColor = DIO.GetIOInput(eDIName.L_PICK_VAC) ? Color.Black : Color.White;
|
||||
|
||||
button6.BackColor = DIO.GetIOInput(eDIName.R_PICK_VAC) ? Color.Lime : Color.FromArgb(70, 70, 70);
|
||||
button6.ForeColor = DIO.GetIOInput(eDIName.R_PICK_VAC) ? Color.Black : Color.White;
|
||||
|
||||
|
||||
btLCyl.BackColor = DIO.GetIOOutput(eDOName.L_CYLDN) ? Color.Black : Color.White;
|
||||
btRCyl.BackColor = DIO.GetIOOutput(eDOName.R_CYLDN) ? Color.Black : Color.White;
|
||||
|
||||
|
||||
|
||||
//메세지업데이트 230830
|
||||
var lcylup = DIO.GetIOInput(eDIName.L_CYLUP);
|
||||
var lcyldn = DIO.GetIOInput(eDIName.L_CYLDN);
|
||||
var rcylup = DIO.GetIOInput(eDIName.R_CYLUP);
|
||||
var rcyldn = DIO.GetIOInput(eDIName.R_CYLDN);
|
||||
btLCyl.Text = "L Cylinder\n" + (lcylup ? "(UP)" : (lcyldn ? "(DN)" : "--"));
|
||||
btRCyl.Text = "R Cylinder\n" + (rcylup ? "(UP)" : (rcyldn ? "(DN)" : "--"));
|
||||
|
||||
var Lconv = DIO.GetIOOutput(eDOName.LEFT_CONV);
|
||||
var Rconv = DIO.GetIOOutput(eDOName.RIGHT_CONV);
|
||||
button17.Text = "L Conveyor\n" + (Lconv ? "(RUN)" : "(STOP)");
|
||||
button19.Text = "R Conveyor\n" + (Rconv ? "(RUN)" : "(STOP)");
|
||||
button17.BackColor = Lconv ? Color.Lime : Color.White;
|
||||
button19.BackColor = Rconv ? Color.Lime : Color.White;
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void button20_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
//button zero
|
||||
var but = sender as Button;
|
||||
var motidx = short.Parse(but.Tag.ToString());
|
||||
var axis = (eAxis)motidx;
|
||||
|
||||
//전체 이동경로상 오류가 있으면 처리 하지 않는다.
|
||||
var ermsg = new System.Text.StringBuilder();
|
||||
|
||||
if (PUB.mot.IsHomeSet((short)axis) == false)
|
||||
{
|
||||
ermsg.AppendLine("Home search is not completed for this axis");
|
||||
}
|
||||
|
||||
|
||||
if (ermsg.Length > 0)
|
||||
{
|
||||
UTIL.MsgE("Cannot move\n" + ermsg.ToString());
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var dlg = UTIL.MsgQ(string.Format("Do you want to move motion axis ({0}) to position 0?\n" +
|
||||
"Position 0 is generally the home position", axis));
|
||||
if (dlg != DialogResult.Yes) return;
|
||||
PUB.log.Add("user:move to zero axis=" + axis.ToString());
|
||||
PUB.mot.Move(motidx, 0);
|
||||
}
|
||||
|
||||
private void button16_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
//button stop
|
||||
var but = sender as Button;
|
||||
var motidx = short.Parse(but.Tag.ToString());
|
||||
var axis = (eAxis)motidx;
|
||||
|
||||
//var dlg = Util.MsgQ("모션 {0}({1}) 을 위치 '0'으로 이동 할까요?\n" +
|
||||
// "경로 상 충돌가능성을 확인 한 후 실행하세요");
|
||||
//if (dlg != System.Windows.Forms.DialogResult.Yes) return;
|
||||
|
||||
PUB.log.Add("user:motion stop axis=" + axis.ToString());
|
||||
PUB.mot.MoveStop("user stop", motidx);
|
||||
}
|
||||
|
||||
private void button3_Click(object sender, EventArgs e)
|
||||
{
|
||||
//ccw
|
||||
var but = sender as Button;
|
||||
var motidx = short.Parse(but.Tag.ToString());
|
||||
var axis = (eAxis)motidx;
|
||||
PUB.log.Add("user:motion move -3.0 axis=" + axis.ToString());
|
||||
PUB.mot.Move(motidx, -3.0, true);
|
||||
}
|
||||
|
||||
private void button4_Click(object sender, EventArgs e)
|
||||
{
|
||||
//cw
|
||||
var but = sender as Button;
|
||||
var motidx = short.Parse(but.Tag.ToString());
|
||||
var axis = (eAxis)motidx;
|
||||
PUB.log.Add("user:motion move +3.0 axis=" + axis.ToString());
|
||||
PUB.mot.Move(motidx, 3.0, true);
|
||||
}
|
||||
|
||||
private void button40_Click(object sender, EventArgs e)
|
||||
{
|
||||
var but = sender as Button;
|
||||
var butindex = int.Parse(but.Tag.ToString());
|
||||
DIO.SetPortMotor(butindex, eMotDir.CW, true, "UC");
|
||||
}
|
||||
|
||||
private void tbClose_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
this.Close();
|
||||
}
|
||||
|
||||
private void button10_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
var but = sender as Button;
|
||||
var butindex = int.Parse(but.Tag.ToString());
|
||||
DIO.SetPortMotor(butindex, eMotDir.CCW, true, "UC");
|
||||
}
|
||||
|
||||
private void button13_Click_2(object sender, EventArgs e)
|
||||
{
|
||||
var but = sender as Button;
|
||||
var butindex = int.Parse(but.Tag.ToString());
|
||||
DIO.SetPortMotor(butindex, eMotDir.CCW, false, "UC");
|
||||
}
|
||||
|
||||
private void button41_Click(object sender, EventArgs e)
|
||||
{
|
||||
//front
|
||||
var cur = DIO.GetIOOutput(eDOName.PICK_VAC1);
|
||||
DIO.SetPickerVac(!cur, true);
|
||||
}
|
||||
|
||||
private void button39_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void button44_Click(object sender, EventArgs e)
|
||||
{
|
||||
var cur = DIO.GetIOOutput(eDOName.SOL_AIR);
|
||||
DIO.SetAIR(!cur);
|
||||
}
|
||||
|
||||
private void button9_Click(object sender, EventArgs e)
|
||||
{
|
||||
var but = sender as Button;
|
||||
var butindex = int.Parse(but.Tag.ToString());
|
||||
Boolean current = false;
|
||||
|
||||
if (butindex == 0) current = DIO.GetIOOutput(eDOName.PORTL_MAGNET);
|
||||
else if (butindex == 1) current = DIO.GetIOOutput(eDOName.PORTC_MAGNET);
|
||||
else current = DIO.GetIOOutput(eDOName.PORTR_MAGNET);
|
||||
|
||||
DIO.SetPortMagnet(butindex, !current);
|
||||
}
|
||||
|
||||
private void button51_Click(object sender, EventArgs e)
|
||||
{
|
||||
var but = sender as Button;
|
||||
var tagstr = but.Tag.ToString();
|
||||
if (tagstr == "1")
|
||||
{
|
||||
if (DIO.GetIOOutput(eDOName.PRINTL_VACI) == true)
|
||||
DIO.SetPrintLVac(ePrintVac.off, true);
|
||||
else
|
||||
DIO.SetPrintLVac(ePrintVac.inhalation, true);
|
||||
}
|
||||
else if (tagstr == "2")
|
||||
if (DIO.GetIOOutput(eDOName.PRINTL_VACO) == true)
|
||||
DIO.SetPrintLVac(ePrintVac.off, true);
|
||||
else
|
||||
DIO.SetPrintLVac(ePrintVac.exhaust, true);
|
||||
else
|
||||
DIO.SetPrintLVac(ePrintVac.off, true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void button53_Click(object sender, EventArgs e)
|
||||
{
|
||||
var but = sender as Button;
|
||||
var tagstr = but.Tag.ToString();
|
||||
if (tagstr == "1")
|
||||
{
|
||||
if (DIO.GetIOOutput(eDOName.PRINTR_VACI) == true)
|
||||
DIO.SetPrintRVac(ePrintVac.off, true);
|
||||
else
|
||||
DIO.SetPrintRVac(ePrintVac.inhalation, true);
|
||||
}
|
||||
else if (tagstr == "2")
|
||||
if (DIO.GetIOOutput(eDOName.PRINTR_VACO) == true)
|
||||
DIO.SetPrintRVac(ePrintVac.off, true);
|
||||
else
|
||||
DIO.SetPrintRVac(ePrintVac.exhaust, true);
|
||||
else
|
||||
DIO.SetPrintRVac(ePrintVac.off, true);
|
||||
}
|
||||
|
||||
private void button57_Click(object sender, EventArgs e)
|
||||
{
|
||||
//바닥바람
|
||||
var curvalu = DIO.GetIOOutput(eDOName.PRINTL_AIRON);
|
||||
DIO.SetOutput(eDOName.PRINTL_AIRON, !curvalu);
|
||||
}
|
||||
|
||||
private void button58_Click(object sender, EventArgs e)
|
||||
{
|
||||
//바닥바람
|
||||
var curvalu = DIO.GetIOOutput(eDOName.PRINTR_AIRON);
|
||||
DIO.SetOutput(eDOName.PRINTR_AIRON, !curvalu);
|
||||
}
|
||||
|
||||
private void button60_Click(object sender, EventArgs e)
|
||||
{
|
||||
var cur = DIO.GetIOOutput(eDOName.PRINTL_FWD);
|
||||
if (cur == false)
|
||||
{
|
||||
var dlg = UTIL.MsgQ("Do you want to advance the printer (left) picker?"); //210209
|
||||
if (dlg != DialogResult.Yes) return;
|
||||
|
||||
//준비위치에서는 전진하면 충돌한다
|
||||
var ReadyPos = MOT.GetLMPos(eLMLoc.READY);
|
||||
if (MOT.getPositionMatch(ReadyPos))
|
||||
{
|
||||
if (UTIL.MsgQ("There is a risk of collision at the current position. Do you want to proceed anyway?") != DialogResult.Yes)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
DIO.SetOutput(eDOName.PRINTL_FWD, !cur);
|
||||
}
|
||||
|
||||
private void button59_Click(object sender, EventArgs e)
|
||||
{
|
||||
var cur = DIO.GetIOOutput(eDOName.PRINTR_FWD);
|
||||
if (cur == false)
|
||||
{
|
||||
var dlg = UTIL.MsgQ("Do you want to advance the printer (right) picker?");
|
||||
if (dlg != DialogResult.Yes) return;
|
||||
|
||||
//준비위치에서는 전진하면 충돌한다
|
||||
var ReadyPos = MOT.GetRMPos(eRMLoc.READY);
|
||||
if (MOT.getPositionMatch(ReadyPos))
|
||||
{
|
||||
if (UTIL.MsgQ("There is a risk of collision at the current position. Do you want to proceed anyway?") != DialogResult.Yes)
|
||||
return;
|
||||
}
|
||||
}
|
||||
DIO.SetOutput(eDOName.PRINTR_FWD, !cur);
|
||||
}
|
||||
|
||||
private void button3_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
var rlt = PUB.PrinterL.TestPrint(AR.SETTING.Data.DrawOutbox, "ATK4EE1", "");
|
||||
var zpl = PUB.PrinterL.LastPrintZPL;
|
||||
if (rlt.result == false)
|
||||
PUB.log.AddE($"Temp Print L: {rlt.errmessage}" + PUB.PrinterL.LastPrintZPL);
|
||||
else
|
||||
PUB.log.Add("Temp Print L: " + PUB.PrinterL.LastPrintZPL);
|
||||
}
|
||||
|
||||
private void button4_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
var rlt = PUB.PrinterR.TestPrint(AR.SETTING.Data.DrawOutbox, "ATK4EE1", "");
|
||||
var zpl = PUB.PrinterR.LastPrintZPL;
|
||||
if (rlt.result == false)
|
||||
PUB.log.AddE($"Temp Print R: {rlt.errmessage}" + PUB.PrinterR.LastPrintZPL);
|
||||
else
|
||||
PUB.log.Add("Temp Print R: " + PUB.PrinterR.LastPrintZPL);
|
||||
}
|
||||
|
||||
private void button15_Click(object sender, EventArgs e)
|
||||
{
|
||||
//왼쪽검증취소
|
||||
if (PUB.flag.get(eVarBool.FG_PRC_VISIONL) == false) return;
|
||||
var dlg = UTIL.MsgQ("Do you want to cancel LEFT-QR code verification?");
|
||||
if (dlg != DialogResult.Yes) return;
|
||||
|
||||
PUB.flag.set(eVarBool.FG_PRC_VISIONL, false, "CANCEL");
|
||||
PUB.flag.set(eVarBool.FG_PORTL_ITEMON, false, "CANCEL");
|
||||
PUB.flag.set(eVarBool.FG_END_VISIONL, false, "CANCEL");
|
||||
|
||||
/// PUB.sm.seq.Clear(eSMStep.RUN_VISION0);
|
||||
//PUB.sm.seq.UpdateTime(eSMStep.RUN_COM_VS0);
|
||||
PUB.log.Add(string.Format("LEFT-QR verification ({0}) cancelled JGUID={1}", "L", PUB.Result.ItemDataL.guid));
|
||||
}
|
||||
|
||||
private void button16_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (PUB.flag.get(eVarBool.FG_PRC_VISIONR) == false) return;
|
||||
var dlg = UTIL.MsgQ("Do you want to cancel RIGHT-QR code verification?");
|
||||
if (dlg != DialogResult.Yes) return;
|
||||
|
||||
PUB.flag.set(eVarBool.FG_PRC_VISIONR, false, "CANCEL");
|
||||
PUB.flag.set(eVarBool.FG_PORTR_ITEMON, false, "CANCEL");
|
||||
PUB.flag.set(eVarBool.FG_END_VISIONR, false, "CANCEL");
|
||||
|
||||
//PUB.sm.seq.Clear(eSMStep.RUN_VISION2);
|
||||
//PUB.sm.seq.UpdateTime(eSMStep.RUN_COM_VS2);
|
||||
PUB.log.Add(string.Format("RIGHT-QR verification ({0}) cancelled JGUID={1}", "R", PUB.Result.ItemDataR.guid));
|
||||
}
|
||||
|
||||
private void button8_Click(object sender, EventArgs e)
|
||||
{
|
||||
//왼쪽 -5mm
|
||||
var pos = MOT.GetLMPos(eLMLoc.READY);
|
||||
MOT.Move(eAxis.PL_MOVE, -5, 100, 500, true, false, false);//, vel, acc, false, false, false);
|
||||
}
|
||||
|
||||
private void button14_Click(object sender, EventArgs e)
|
||||
{
|
||||
//왼쪽 Ready Position
|
||||
var pos = MOT.GetLMPos(eLMLoc.READY);
|
||||
MOT.Move(eAxis.PL_MOVE, pos.Position, 50, 200, false, false, false);
|
||||
PUB.log.Add("user:PL_MOVE:to ready");
|
||||
}
|
||||
|
||||
private void button15_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
//오른쪽 -5mm
|
||||
var pos = MOT.GetRMPos(eRMLoc.READY);
|
||||
MOT.Move(eAxis.PR_MOVE, -5, 100, 500, false, false, false);// pos.Position + AR.SETTING.Data.MoveYForPaperVaccumeValue, vel, acc, false, false, false);
|
||||
}
|
||||
|
||||
private void button16_Click_2(object sender, EventArgs e)
|
||||
{
|
||||
//오른쪽 Ready Position
|
||||
var pos = MOT.GetRMPos(eRMLoc.READY);
|
||||
MOT.Move(eAxis.PR_MOVE, pos.Position, 50, 200, false, false, false);
|
||||
PUB.log.Add("user:pr_move:to ready");
|
||||
}
|
||||
|
||||
private void button17_Click(object sender, EventArgs e)
|
||||
{
|
||||
var cur = DIO.GetIOOutput(eDOName.LEFT_CONV);
|
||||
DIO.SetOutput(eDOName.LEFT_CONV, !cur);
|
||||
}
|
||||
|
||||
private void button19_Click(object sender, EventArgs e)
|
||||
{
|
||||
var cur = DIO.GetIOOutput(eDOName.RIGHT_CONV);
|
||||
DIO.SetOutput(eDOName.RIGHT_CONV, !cur);
|
||||
}
|
||||
|
||||
private void button20_Click(object sender, EventArgs e)
|
||||
{
|
||||
var cur = DIO.GetIOOutput(eDOName.L_CYLDN);
|
||||
if (cur == false)
|
||||
{
|
||||
//내려도되는지 검사해야한다.
|
||||
if (PUB.mot.IsHomeSet((int)eAxis.PL_MOVE))
|
||||
{
|
||||
var pos = MOT.GetLMPos(eLMLoc.READY);
|
||||
if (MOT.getPositionMatch(pos))
|
||||
{
|
||||
PUB.log.AddE($"Cannot lower cylinder (L) because it is at standby position");
|
||||
}
|
||||
}
|
||||
}
|
||||
DIO.SetOutput(eDOName.L_CYLDN, !cur);
|
||||
}
|
||||
|
||||
private void button21_Click(object sender, EventArgs e)
|
||||
{
|
||||
var cur = DIO.GetIOOutput(eDOName.R_CYLDN);
|
||||
if (cur == false)
|
||||
{
|
||||
//내려도되는지 검사해야한다.
|
||||
if (PUB.mot.IsHomeSet((int)eAxis.PR_MOVE))
|
||||
{
|
||||
var pos = MOT.GetRMPos(eRMLoc.READY);
|
||||
if (MOT.getPositionMatch(pos))
|
||||
{
|
||||
PUB.log.AddE($"Cannot lower cylinder (R) because it is at standby position");
|
||||
}
|
||||
}
|
||||
}
|
||||
DIO.SetOutput(eDOName.R_CYLDN, !cur);
|
||||
}
|
||||
}
|
||||
}
|
||||
380
Handler/Project/Dialog/Quick_Control.resx
Normal file
380
Handler/Project/Dialog/Quick_Control.resx
Normal file
@@ -0,0 +1,380 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAMAMDAAAAEAIACoJQAANgAAACAgAAABACAAqBAAAN4lAAAQEAAAAQAgAGgEAACGNgAAKAAAADAA
|
||||
AABgAAAAAQAgAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgaZsA5C1
|
||||
fwOTuIIDkbaAA5K3gQOSt4EDkreBA5K3gQOSt4EDkreBA5K3gQOSt4EDkreBA5K3gQOSt4EDkreBA5K3
|
||||
gQOSt4EDkreBA5K3gQOSt4EDkreBA5K3gQOSt4EDkreBA5K3gQOSt4EDkreBA5K3gQOSt4EDkreBA5K3
|
||||
gQOSt4EDkreBA5G2gAOTuIIDkLV/A4GmbAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAfaJmBAAAAAB6n2IdfaJmkoescoeIrnSDh61zhIitc4SIrXOEiK1zhIitc4SIrXOEiK1zhIit
|
||||
c4SIrXOEiK1zhIitc4SIrXOEiK1zhIitc4SIrXOEiK1zhIitc4SIrXOEiK1zhIitc4SIrXOEiK1zhIit
|
||||
c4SIrXOEiK1zhIitc4SIrXOEiK1zhIitc4SIrXOEiK1zhIetc4SIrnSDh6xyh32iZpJ6n2IdAAAAAH2i
|
||||
ZgQAAAAAAAAAAAAAAAAAAAAAiKx0BwAAAACApWk1ia52/6DElP+kyJn9osaW/qLGl/+ixpf/osaX/6LG
|
||||
l/+ixpf/osaX/6LGl/+ixpf/osaX/6LGl/+ixpf/osaX/6LGl/+ixpf/osaX/6LGl/+ixpf/osaX/6LG
|
||||
l/+ixpf/osaX/6LGl/+ixpf/osaX/6LGl/+ixpf/osaX/6LGl/+ixpf/osaX/6LGlv6kyJn9oMSU/4mu
|
||||
dv+ApWk1AAAAAIisdAcAAAAAAAAAAAAAAAAAAAAAl7uIBgAAAACIrXQrmr6M47/ivf3E58P8weS/+sLk
|
||||
wPvC5MD7wuTA+8LkwPvC5MD7wuTA+8LkwPvC5MD7wuTA+8LkwPvC5MD7wuTA+8LkwPvB5MD7wuTA+8Lk
|
||||
wPvC5MD7wuTA+8LkwPvC5MD7wuTA+8LkwPvC5MD7wuTA+8LkwPvC5MD7wuTA+8LkwPvC5MD7wuTA+8Hk
|
||||
v/rE58P8v+K9/Zq+jOOIrXQrAAAAAJe7iAYAAAAAAAAAAAAAAAAAAAAAlLiEBgAAAACHq3Itl7uH67nc
|
||||
tf++4bz+u964/bzfuf6837n+vN+5/rzfuf6837n+vN+5/rzfuf6837n+vN+5/rzfuf6837n+vN+5/rzf
|
||||
uf6837n+vN+5/rzfuf6837n+vN+5/rzfuf6837n+vN+5/rzfuf6837n+vN+5/rzfuf6837n+vN+5/rzf
|
||||
uf6837n+vN+5/rveuP2+4bz+udy1/5e7h+uHq3ItAAAAAJS4hAYAAAAAAAAAAAAAAAAAAAAAlLiEBgAA
|
||||
AACHq3Isl7uI67rdtv+/4r3/vN+5/rzfuf6837n+vN+5/rzfuf6837n+vN+5/rzfuf6837n+vN+5/rzf
|
||||
uf694Lr+vN+5/r3guv694Lr+vN+5/rzfuf694Lr+vN+5/rzfuf6837n+vN+5/rzfuf6837n+vN+5/rzf
|
||||
uf6837n+vN+5/rzfuf6837n+vN+5/rzfuf6/4r3/ut22/5e7iOuHq3IsAAAAAJS4hAYAAAAAAAAAAAAA
|
||||
AAAAAAAAlbmFBgAAAACHq3Isl7uI67rdtv+/4r3/vN+5/r3guv+94Lr/veC6/73guv+94Lr/veC6/73g
|
||||
uv+837n/veC6/73guv+73rf/weO//7ndtf+z163/weTA/7zfuf+837n/veC6/7zfuf+94Lr/veC6/73g
|
||||
uv+94Lr/veC6/73guv+94Lr/veC6/73guv+94Lr/veC6/7zfuf6/4r3/ut22/5e7iOuHq3IsAAAAAJW5
|
||||
hQYAAAAAAAAAAAAAAAAAAAAAlbmFBgAAAACHq3Isl7uI67rdtv+/4r3/vN+5/r3guv+94Lr/veC6/73g
|
||||
uv+94Lr/veC6/7zfuf+94Lr/vN+5/7veuP/C5MH/stet/6bHm/+oxpz/qc6h/7/ivf++4bz/u964/73g
|
||||
uv+837n/veC6/73guv+94Lr/veC6/73guv+94Lr/veC6/73guv+94Lr/veC6/7zfuf6/4r3/ut22/5e7
|
||||
iOuHq3IsAAAAAJW5hQYAAAAAAAAAAAAAAAAAAAAAlbmFBgAAAACHq3Isl7uI67rdtv+/4r3/vN+5/r3g
|
||||
uv+94Lr/veC6/73guv+94Lr/vN+5/73guv+837n/vd+5/8Djvv+02bD/p8ic/8LTt//R3cn/q8ef/67R
|
||||
p/+94bv/v+K9/7veuP+94Lr/vN+5/73guv+94Lr/veC6/73guv+94Lr/veC6/73guv+94Lr/veC6/7zf
|
||||
uf6/4r3/ut22/5e7iOuHq3IsAAAAAJW5hQYAAAAAAAAAAAAAAAAAAAAAlbmFBgAAAACHq3Isl7uI67rd
|
||||
tv+/4r3/vN+5/r3guv+94Lr/veC6/73guv+837n/veC6/7zfuf+94Lr/vuG8/7fasv+mx5v/xte8//b4
|
||||
9P/9/f3/3ObW/6zHoP+u0qf/veG7/77hvP+837n/veC6/73guv+94Lr/veC6/73guv+94Lr/veC6/73g
|
||||
uv+94Lr/veC6/7zfuf6/4r3/ut22/5e7iOuHq3IsAAAAAJW5hQYAAAAAAAAAAAAAAAAAAAAAlbmFBgAA
|
||||
AACHq3Isl7uI67rdtv+/4r3/vN+5/r3guv+94Lr/veC6/73guv+94Lr/vN+5/73guv++4bz/uNu0/6XH
|
||||
mv/I2b7/9Pfy/////////////f39/9zm1v+tyKD/rtGm/7/ivf+94Lr/vN+5/7zfuf+94Lr/veC6/73g
|
||||
uv+94Lr/veC6/73guv+94Lr/veC6/7zfuf6/4r3/ut22/5e7iOuHq3IsAAAAAJW5hQYAAAAAAAAAAAAA
|
||||
AAAAAAAAlbmFBgAAAACHq3Isl7uI67rdtv+/4r3/vN+5/r3guv+94Lr/veC6/7zfuf+94Lr/u964/8Hj
|
||||
v/+22bH/o8SX/83exv/2+fX///////39/P/+/f3///////7+/f/h69z/rsmh/6nNn//C5cH/vN+4/7zf
|
||||
uf+94Lr/vN+5/73guv+94Lr/veC6/73guv+94Lr/veC6/7zfuf6/4r3/ut22/5e7iOuHq3IsAAAAAJW5
|
||||
hQYAAAAAAAAAAAAAAAAAAAAAlbmFBgAAAACHq3Isl7uI67rdtv+/4r3/vN+5/r3guv+94Lr/veC6/73g
|
||||
uv+837j/wuTA/7LXrf+nx5z/zNvE//b49P//////+/v6/8bWvP+uxaH/7vLr//7+/v/+////4Oja/7LK
|
||||
pv+ozJ//wuXB/73guv+837n/veC6/7zfuf+94Lr/veC6/73guv+94Lr/veC6/7zfuf6/4r3/ut22/5e7
|
||||
iOuHq3IsAAAAAJW5hQYAAAAAAAAAAAAAAAAAAAAAlbmFBgAAAACHq3Isl7uI67rdtv+/4r3/vN+5/r3g
|
||||
uv+94Lr/vN+5/7zfuf++4Lv/t9uz/6rLoP/C1Lj//Pz7///////4+ff/zNvF/6fInP+kyJr/uM6t/+zw
|
||||
6P/+/v7///7//+Do2v+yy6f/qc2h/7/ivf++4bz/u964/73guv+837n/veC6/73guv+94Lr/veC6/7zf
|
||||
uf6/4r3/ut22/5e7iOuHq3IsAAAAAJW5hQYAAAAAAAAAAAAAAAAAAAAAlbmFBgAAAACHq3Isl7uI67rd
|
||||
tv+/4r3/vN+5/r3guv+94Lr/vN+5/7zfuf++4Lv/t9uz/6rKn//C07j//v7+//z8+//N28T/qMec/7ba
|
||||
sv/B47//p8qd/7nOrv/q8Of///////7+/v/g6dv/rcih/63Rpf+94bv/v+K9/7veuP+94Lr/vN+5/73g
|
||||
uv+94Lr/veC6/7zfuf6/4r3/ut22/5e7iOuHq3IsAAAAAJW5hQYAAAAAAAAAAAAAAAAAAAAAlbmFBgAA
|
||||
AACHq3Isl7uI67rdtv+/4r3/vN+5/r3guv+94Lr/veC6/73guv+73rj/wuXB/7HVq/+pyJ7/z97I/9Pg
|
||||
zf+ryZ//stas/8LkwP+94Lr/vuG8/6PGmP+90rT/6/Dn///////8/fv/3+rb/6/Ko/+u0ab/vOC5/7/h
|
||||
vP+837n/veC6/73guv+94Lr/veC6/7zfuf6/4r3/ut22/5e7iOuHq3IsAAAAAJW5hQYAAAAAAAAAAAAA
|
||||
AAAAAAAAlbmFBgAAAACHq3Isl7uI67rdtv+/4r3/vN+5/r3guv+94Lr/veC6/7zfuf+94Lr/u964/7/j
|
||||
vf+53LX/o8SY/6PFmP+53LX/wOO+/7veuP+837n/veC6/8Djvv+lyZv/uc+v/+rv5////////f79/+bs
|
||||
4f+tx6H/rNCl/8Djvv+837n/vN+5/73guv+94Lr/veC6/7zfuf6/4r3/ut22/5e7iOuHq3IsAAAAAJW5
|
||||
hQYAAAAAAAAAAAAAAAAAAAAAlbmFBgAAAACHq3Isl7uI67rdtv+/4r3/vN+5/r3guv+94Lr/veC6/73g
|
||||
uv+94Lr/vN+5/73guv+84Lr/ut22/7rdtv+84Lr/veC6/7zfuf+837n/veC6/73guv+/4rz/p8ue/7bO
|
||||
q//r8ej///////7+/v/l7OH/ssun/6jNoP/B47//vN+5/7zfuf+94Lr/veC6/7zfuf6/4r3/ut22/5e7
|
||||
iOuHq3IsAAAAAJW5hQYAAAAAAAAAAAAAAAAAAAAAlLiEBgAAAACHq3Itl7uI67rdtv+/4r3/vN+5/r3g
|
||||
uv+94Lr/veC6/73guv+837n/veC6/7zfuf+94Lr/vuG8/77hvP+94Lr/vN+5/73guv+94Lr/vN+5/7zf
|
||||
uf+/4bz/vOC5/6jLnv+zy6j/7/Ps///////09vL/tcup/6PImf/C5MD/vN+5/7zfuf+94Lr/veC6/7zf
|
||||
uf6/4r3/ut22/5e7iOuHq3ItAAAAAJS4hAYAAAAAAAAAAAAAAAAAAAAAlbmFBgAAAACHq3MsmLuI57rd
|
||||
tv+/4r3/vN+5/r3guv+94Lr/veC6/73guv+94Lr/vN+5/73guv+837n/vN+5/7zfuf+837n/veC6/7zf
|
||||
uf+837n/veC6/73guv+73rj/weO//7ndtf+qzKH/uc6t/9bhzv/A07b/sM+n/7fbs/++4Lv/vN+5/7zf
|
||||
uf+94Lr/veC6/7zfuf6/4r3/ut22/5i7iOeHq3MsAAAAAJW5hQYAAAAAAAAAAAAAAAAAAAAAk7eDBgAA
|
||||
AACGqnEwlbmG9rrdtv+/4r3+vN+5/r3guv+94Lr/veC6/73guv+94Lr/veC6/73guv+94Lr/veC6/73g
|
||||
uv+94Lr/veC6/73guv+94Lr/veC6/7zfuf+94Lr/u963/8Djvv+94Lr/qMqe/6vHnv+nyJv/ttqy/8Hk
|
||||
v/+83rj/veC6/73guv+94Lr/veC6/7zfuf6/4r3+ut22/5W5hvaGqnEwAAAAAJO3gwYAAAAAAAAAAAAA
|
||||
AAAAAAAAkraCBwAAAACFqnI1lLiF/7nctf+/4r39vN+4/r3guv+94Lr/veC6/73guv+94Lr/veC6/73g
|
||||
uv+94Lr/veC6/73guv+837n/veC6/7zfuf+837n/vN+5/7zfuf+837n/veC6/7veuP++4Lv/wOK+/7HV
|
||||
q/+94Lr/v+K9/7veuP+94Lr/vN+5/73guv+94Lr/veC6/7zfuP6/4r39udy1/5S4hf+FqnI1AAAAAJK2
|
||||
ggcAAAAAAAAAAAAAAAAAAAAAlLmFBwAAAACIrXU0lruI/7ndtv+/4r39vN+5/r3guv+94Lr/veC6/73g
|
||||
uv+94Lr/veC6/73guv+94Lr/veC6/73guv+84Lr/vN+5/73guv+94Lr/veC6/73guv+94Lr/veC6/73g
|
||||
uv+837n/vN+5/73gu/+837n/vN+5/73guv+837n/veC6/73guv+94Lr/veC6/7zfuf6/4r39ud22/5a7
|
||||
iP+IrXU0AAAAAJS5hQcAAAAAAAAAAAAAAAAAAAAAlLmFBwAAAACHrXU0lruI/7ndtv+/4r39vN+5/r3g
|
||||
uv+94Lr/veC6/73guv+94Lr/veC6/73guv+94Ln/veC6/73guv+837n/vN+5/7zfuf+94Lv/vuG8/77h
|
||||
vP+94Lv/vN+5/7zfuf+837n/veC6/73guv+94Lr/vN+5/73guv+94Lr/veC6/73guv+94Lr/veC6/7zf
|
||||
uf6/4r39ud22/5a7iP+HrXU0AAAAAJS5hQcAAAAAAAAAAAAAAAAAAAAAk7iEBwAAAACHrXU0lruH/7nd
|
||||
tv+/4r39vN+5/r3guv+94Lr/veC6/73guv+94Lr/veC6/7zfuf+94Lr/vN+5/7zfuf+837n/weS//7zf
|
||||
uf+sz6P/oMWW/6DFlv+sz6T/vN+5/8Hkv/+837n/vN+5/7zfuf+94Lr/veC6/7zfuf+94Lr/veC6/73g
|
||||
uv+94Lr/veC6/7zfuf6/4r39ud22/5a7h/+HrXU0AAAAAJO4hAcAAAAAAAAAAAAAAAAAAAAAlLmFBwAA
|
||||
AACHrXU0lruH/7ndtv+/4r39vN+5/r3guv+94Lr/veC6/73guv+94Lr/veC6/73guv+837n/veC6/77h
|
||||
u/+63bf/qMyg/5vBkP+awpD/mMGP/5fBj/+awpH/m8GQ/6jMn/+63rf/vuG7/73guv+837n/veC6/73g
|
||||
uv+94Lr/veC6/73guv+94Lr/veC6/7zfuf6/4r39ud22/5a7h/+HrXU0AAAAAJS5hQcAAAAAAAAAAAAA
|
||||
AAAAAAAAlLmFBwAAAACHrXU0lruH/7ndtv+/4r39vN+5/r3guv+94Lr/veC6/73guv+94Lr/vN+5/7zf
|
||||
uf+837n/veC5/7rdtv+kyJr/krmF/5G7h/+ZxJL/n8qa/57Kmv+ZxJL/kbqG/5K5hf+kyZr/ut23/7zg
|
||||
uf+84Ln/vN+5/7zfuf+94Lr/veC6/73guv+94Lr/veC6/7zfuf6/4r39ud22/5a7h/+HrXU0AAAAAJS5
|
||||
hQcAAAAAAAAAAAAAAAAAAAAAk7iEBwAAAACHrXU0lruH/7nctf+/4r39u9+4/rzfuf+837n/vN+5/7zf
|
||||
uf+837n/vN+5/7zfuP++4bv/vN+5/6XJm/+QuIL/mMOR/6POoP+eyZn/nciY/57ImP+eyZn/o86g/5jD
|
||||
kf+QuIP/psmd/7zfuf++4bv/vN+4/7zfuf+837n/vN+5/7zfuf+837n/vN+5/7vfuP6/4r39udy1/5a7
|
||||
h/+HrXU0AAAAAJO4hAcAAAAAAAAAAAAAAAAAAAAAlLmFBwAAAACIrXU0lruI/7rdtv/A4779vN+5/r3g
|
||||
uv+94Lr/veC6/73guv+94Lr/veC6/73guv/A4r7/uNu0/4+1gP+Yw5H/oMyd/53Hl/+dyJj/nciY/53I
|
||||
mP+dyJj/nceX/6DMnf+Yw5H/j7WA/7nbtf/A4r7/vOC5/73guv+94Lr/veC6/73guv+94Lr/veC6/7zf
|
||||
uf7A4779ut22/5a7iP+IrXU0AAAAAJS5hQcAAAAAAAAAAAAAAAAAAAAAlLmGBwAAAACIrnY0l7yJ/7ve
|
||||
uP/B5MD9veG7/r7hvP++4bz/vuG8/77hvP++4bz/vuG7/8Djvv+837n/qc6h/5S9iv+axZT/n8qb/53I
|
||||
mP+eyZn/nsmZ/57Jmf+eyZn/nciY/5/Km/+axZT/lLyJ/6rOof+837n/wOO+/77hu/++4bz/vuG8/77h
|
||||
vP++4bz/vuG8/77hu/7B5MD9u964/5e8if+IrnY0AAAAAJS5hgcAAAAAAAAAAAAAAAAAAAAAh6tyBwAA
|
||||
AACApGk1iKx0/53BkP+hxZX9n8OT/6DElP+gxJT/oMSU/6DElP+gxJT/n8OT/6LGl/+avo3/i7F7/5nE
|
||||
kv+eyZn/nciY/53ImP+dyJj/nsmZ/57Jmf+dyJj/nciY/53ImP+eyZn/mcOS/4uxev+avo3/osaX/5/D
|
||||
k/+gxJT/oMSU/6DElP+gxJT/oMSU/5/Dk/+gxJX9ncGQ/4isdP+ApGk1AAAAAIercwcAAAAAAAAAAAAA
|
||||
AAAAAAAAia12BgAAAAB9oWYtjK957qrOov+iyZr+mMCO/pjBj/6YwY//mMGP/5jBj/+YwY//mMGP/5nC
|
||||
kP+Wv4z/kruI/5zHl/+eyZn/nciY/53ImP+eyZn/nsmZ/57Jmf+eyZn/nciY/53ImP+eyZr/nMiX/5K7
|
||||
h/+Wv4z/mcKQ/5jBj/+YwY//mMGP/5jBj/+YwY//mMGP/pjBjv6jypr+qs6i/4yvee59oWUtAAAAAImt
|
||||
dQYAAAAAAAAAAAAAAAAAAAAAjbJ8BQAAAAB1mlwhkraCwr/ivf613LT/os2e/Z7Kmv+gy5z/n8ub/5/L
|
||||
m/+fy5v/n8ub/5/Lm/+gy5z/ocye/57Jmf+dyJj/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57J
|
||||
mf+dyJj/nsmZ/6HMnv+gy5z/n8ub/5/Lm/+fy5v/n8ub/5/Lm/+gy5z/nsqa/6LNnv223LT/v+K9/pK2
|
||||
gcJ1mlwhAAAAAI6yfAUAAAAAAAAAAAAAAAAAAAAAgadsAwAAAABTfC8Phqxzfq7Sp/W427T/p8+i/JrG
|
||||
lf6eyZn/nciY/53ImP+dyJj/nciY/53ImP+dyJj/nciY/53ImP+eyZn/nciY/57JmP+eyZn/nsmZ/57J
|
||||
mf+eyZn/nsmY/53ImP+eyZn/nciY/53Il/+dyJj/nciY/53ImP+dyJj/nciY/53ImP+eyZn/msaV/qfP
|
||||
ovy427P/rtGm9YetdH1UfDIPAAAAAIKobQMAAAAAAAAAAAAAAAAAAAAAAAAAANT33wEAAAAAfKFlIpe7
|
||||
itm32bH/r9ar/ZvGlf6eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57J
|
||||
mf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57J
|
||||
mf+eyZn/m8aV/q/Wq/232bH/lruH2XimZiEAAAAA1efOAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyw
|
||||
ewMAAAAAdZpeComtd7S016/9tty0/6HLnP2dyJj+nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57J
|
||||
mf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57J
|
||||
mf+eyZn/nsmZ/57Jmf+dyJj+ocuc/bfdtP+01679ia11tXWaWwoAAAAAjLB5AwAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAIOpcAIAAAAAWYE6BX6kaXyv0afuut23/6nRpfubx5b/nsmZ/57Jmf+eyZn/nsmZ/57J
|
||||
mf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57J
|
||||
mf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+bx5b/qdGk+7rdtv+u0abugKRqeluAOwUAAAAAhalxAgAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHebWySbv47GtNau/7LYsPubx5b+nsmZ/p7I
|
||||
mf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57J
|
||||
mf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nciZ/57Jmf6bx5b+stiv+7PWrf+bv43FeppfIwAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMs3wBAAAAAAAAAACDq3GgrNGl/7vg
|
||||
uf6gypv9nsmZ/53ImP+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57J
|
||||
mf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nciY/57Jmf+gypv9u+C5/q3Q
|
||||
pf+FqXCfAAAAAAAAAACOsnwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIq3IBAAAAAAAA
|
||||
AAB7oWR0qM2f6Lzguf+q0aX8nciX/53ImP+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57J
|
||||
mf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nciY/53I
|
||||
l/+q0qX8u+C5/6nNoOd8oGZzAAAAAAAAAACIqnMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAABojlAoncGRuLPWrf+02rH6nMeX/pzIl/6dyJj+nciY/p3ImP6dyJj+nciY/p3I
|
||||
mP6dyJj+nciY/p3ImP6dyJj+nciY/p3ImP6dyJj+nciY/p3ImP6dyJj+nciY/p3ImP6dyJj+nciY/p3I
|
||||
mP6dyJj+nMiX/pzHl/602rH6s9at/53BkbhpjEsnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJm6iAIAAAAAh6x0f6bJm/+74Lr8oMqc/pvHlv6bx5b+nMeW/pzH
|
||||
lv6cx5b+nMeW/pzHlv6cx5b+nMeW/pzHlv6cx5b+nMeW/pzHlv6cx5b+nMeW/pzHlv6cx5b+nMeW/pzH
|
||||
lv6cx5b+nMeW/pzHlv6bx5b+m8eW/qDLnP674Lr8psmb/4esdH8AAAAAmbqIAgAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIisdQIAAAAAd5xfZaHElebF6MX8u9+5+brf
|
||||
uPq637j6ut+4+rrfuPq637j6ut+4+rrfuPq637j6ut+4+rrfuPq637j6ut+4+rrfuPq637j6ut+4+rrf
|
||||
uPq637j6ut+4+rrfuPq637j6ut+4+rrfuPq637j6ut+4+rvgufnF6MX8ocSV5necXmQAAAAAiKx0AgAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+obAEAAAAAapRRJpG3
|
||||
gamixpb/qMuf/KnMn/6py5//qcuf/6nLn/+py5//qcuf/6nLn/+py5//qcuf/6nLn/+py5//qcuf/6nL
|
||||
n/+py5//qcuf/6nLn/+py5//qcuf/6nLn/+py5//qcuf/6nLn/+py5//qcyf/qjLn/yixpb/kbaBqGuS
|
||||
UCUAAAAAgKdsAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AACet4sCAAAAAH2lZ0KGq3KVjrN+ho6yfYiNsn2IjrJ9iI6yfYiOsn2IjrJ9iI6yfYiOsn2IjrJ9iI6y
|
||||
fYiOsn2IjrJ9iI6yfYiOsn2IjrJ9iI6yfYiOsn2IjrJ9iI6yfYiOsn2IjrJ9iI6yfYiNsn2IjrJ9iI6z
|
||||
foaGq3KVfqRoQgAAAACWuoQCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIatcgGQtX8DmLyKA5i8igOXu4kDmLyKA5i8
|
||||
igOYvIoDmLyKA5i8igOYvIoDmLyKA5i8igOYvIoDmLyKA5i8igOYvIoDmLyKA5i8igOYvIoDmLyKA5i8
|
||||
igOYvIoDmLyKA5i8igOXu4kDmLyKA5i8igOQtX8DhqxzAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAP///////wAA////////AAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAfAAD4AAAAAB8AAPgA
|
||||
AAAAHwAA+AAAAAAfAAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAfAAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAf
|
||||
AAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAfAAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAfAAD4AAAAAB8AAPgA
|
||||
AAAAHwAA+AAAAAAfAAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAfAAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAf
|
||||
AAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAfAAD4AAAAAB8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAD8AAPwA
|
||||
AAAAPwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/wAAAAD/AAD/AAAAAP8AAP+AAAAB/wAA/4AAAAH/
|
||||
AAD/gAAAAf8AAP/AAAAD/wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/pGgBAAAAAHugZE6DqG1jhKpvW4Spbl2EqW5dhKluXYSp
|
||||
bl2EqW5dhKluXYSpbl2EqW5dhKluXYSpbl2EqW5dhKluXYSpbl2EqW5dhKluXYSpbl2EqW5dhKluXYSp
|
||||
bl2EqW5dhKpvW4OobWN7oGROAAAAAH+kaAEAAAAAAAAAAJq+jQQAAAAAjbF7vqjLnv+s0KP7qs6h/qvO
|
||||
ov+rzqL/q86i/6vOov+rzqL/q86i/6vOov+qzqL/qs6i/6vOov+rzqL/q86i/6vOov+rzqL/q86i/6vO
|
||||
ov+rzqL/q86i/6rOof6s0KP7qMue/42xe74AAAAAmr6NBAAAAAAAAAAArM+jBAAAAACZvYqtveC6/8Ll
|
||||
wfjA4777weO//MDjv/vA47/7weO/+8Djv/vB47/7wOO++8Hjv/vA4777weO/+8Hjv/vB47/7wOO/+8Dj
|
||||
v/vA47/7wOO/+8Djv/vB47/8wOO++8Llwfi94Lr/mb2KrQAAAACsz6MEAAAAAAAAAACny54EAAAAAJa6
|
||||
hrK427P/veC6+7ret/673rj+u964/rveuP673rf+u964/rrdt/6937r+u9+4/r3guv673rj+u963/rve
|
||||
t/673rj+u964/rveuP673rj+u964/rveuP663rf+veC6+7jbs/+WuoayAAAAAKfLngQAAAAAAAAAAKjM
|
||||
nwQAAAAAlrqHsbnctf++4bz7vN+5/r3guv+94Lr+veC6/7zfuf+73rj/vuG8/7ndtv+oyp7/rdCl/77i
|
||||
vP+837r/vN+5/7zfuv+94Lr/veC6/73guv+94Lr+veC6/7zfuf6+4bz7udy1/5a6h7EAAAAAqMyfBAAA
|
||||
AAAAAAAAqMyfBAAAAACWuoexudy0/77hu/u837n+veC6/7zfuf6837n+u964/r/hvP643bX+qsqg/tXf
|
||||
zf7C1Lj+q8+j/r/ivf6837n+vN+5/r3guv6837n+vN+5/rzfuf694Lr/vN+5/r7hu/u53LT/lrqHsQAA
|
||||
AACozJ8EAAAAAAAAAACozJ8EAAAAAJa6h7G53LT/vuG8+7zfuf694Lr/vN+5/rveuP+/4bz/uNy1/6vL
|
||||
of/b5dX///////n6+f/C1bn/q8+j/7/ivf+837n/vN+5/73guv+94Lr/vN+5/r3guv+837n+vuG8+7nc
|
||||
tP+WuoexAAAAAKjMnwQAAAAAAAAAAKjMnwQAAAAAlrqHsbnctP++4bz7vN+5/r3guv+837j+vuG8/7jc
|
||||
tf+qyaD/3+nb///////n7eP/9ff0//3+/f/F17v/q86h/7/jvf+837n/vN+5/7zfuf+94Lr+veC6/7zf
|
||||
uf6+4bz7udy0/5a6h7EAAAAAqMyfBAAAAAAAAAAAqMyfBAAAAACWuoexudy0/77hu/u837n+vN+5/73f
|
||||
uv663rf/q8uh/+Ho2///////4ure/6TEmf+50K//9/j1//39/f/G1r3/q86j/7/ivf+837r/vN+4/7zf
|
||||
uf694Lr/vN+5/r7hvPu53LT/lrqHsQAAAACozJ8EAAAAAAAAAACozJ8EAAAAAJa6h7G53LT/vuG7+7zf
|
||||
uf6837n/vd+6/rret/+qyaD/5uzh/+ju5P+ryaD/u9+5/7DUqv+5z6//+Pn3//39/P/D1rr/q8+j/77i
|
||||
vP+837n/vN+5/r3guv+837n+vuG8+7nctP+WuoexAAAAAKjMnwQAAAAAAAAAAKjMnwQAAAAAlrqHsbnc
|
||||
tP++4bz7vN+5/r3guv+837j+vuG7/7jdtf+tzKT/rsyl/7ndtf++4Lv/v+K9/6/TqP+70bH/9ffz//3+
|
||||
/f/H177/rM+k/7/ivP+83rj+veC6/7zfuf6+4bz7udy0/5a6h7EAAAAAqMyfBAAAAAAAAAAAqMyfBAAA
|
||||
AACWuoexudy0/77hu/u837n+veC6/7zfuf673rj/vuG7/7ndtv+53bb/vuG7/7veuP+837n/wOO+/67T
|
||||
qP+40K7/9vn1///////A0rb/q9Ck/8Djvv673rj/vN+5/r7hu/u53LT/lrqHsQAAAACozJ8EAAAAAAAA
|
||||
AACpzJ8EAAAAAJe6h6+53LX/vuG8+7zfuf694Lr/vN+5/rzfuf+837j/veC6/73gu/+837j/vN+5/7zf
|
||||
uf+83rj/wOO+/63Spv+90rP/3+fY/7jRr/+z167/vuG8/rvfuP+837n+vuG8+7nctf+XuoevAAAAAKnM
|
||||
nwQAAAAAAAAAAKfKngQAAAAAlLiFu7jbtP++4bv6vN+5/r3guv+94Lr+vN+5/7zguv+837n/vN+5/73f
|
||||
uv+837n/vN+4/7veuP+73rj/wOO+/7LUq/+oyJz/tdiw/7/ivf+73rj+veC6/7zfuf6+4bv6uNu0/5S4
|
||||
hbsAAAAAp8qeBAAAAAAAAAAApsudBAAAAAGUuYbBuNu0/77hu/q837n/veC6/rzfuf694Lr/veC5/73g
|
||||
uv+84Lr/u964/7zfuf++4bz/vuG8/7zfuf+73rj/vuG8/7vfuf++4bv/u964/7zfuf694Lr+vN+5/77h
|
||||
u/q427T/lLmGwQAAAAGmy50EAAAAAAAAAACny50EAAAAAJW7h8G43LT/vuG8+rzfuf+94Lr+vN+5/rzf
|
||||
uf+837n/vN+5/7veuP+/4rz/vuC7/7XYsP+12LD/veC7/7/ivf+73rj/vd+6/7zfuf+837n/veC6/r3g
|
||||
uv6837n/vuG8+rjctP+Vu4fBAAAAAKfLnQQAAAAAAAAAAKfLnQQAAAAAlbqGwbjctP++4bz6vN+5/73g
|
||||
uv694Lr+veC6/7zfuf+837n/vuG7/7LWrf+ix5j/mcGP/5nBkP+ix5j/stas/77hu/+837n/vN+5/7zf
|
||||
uf+94Lr+veC6/rzfuf++4bz6uNy0/5W6hsEAAAAAp8udBAAAAAAAAAAAp8ucBAAAAACVuobBt9uz/73g
|
||||
u/q73rj/vN+4/rzfuP673rj/u963/73guv+u0qf/k7uH/5XAjv+dyJj/nciY/5XAjf+Tu4f/r9Ko/73g
|
||||
uv+73rf/u964/7zfuP6837j+u964/73gu/q327P/lbqGwQAAAACny5wEAAAAAAAAAACozKAEAAAAAJa7
|
||||
iMG73rf/wOO/+r7hu/++4bz/vuG8/r7hu//A477/vN64/5O6h/+axpX/oMuc/53Hl/+dx5f/oMuc/5rG
|
||||
lf+Uuof/vN65/8Djvv++4bv/vuG8/r7hvP++4bv/wOO/+rvet/+Wu4jBAAAAAKjMnwQAAAAAAAAAAKDE
|
||||
lAQAAAABkbWBwa/SqP+22bH6tNeu/7TXr/6016//tNeu/7bZsf+jx5n/lb+N/57Jmv+cx5f/nciY/53I
|
||||
mP+cx5f/nsma/5W/jP+jx5n/ttmx/7TXrv+016//tNev/rTXrv+22bH6r9Ko/5G2gcEAAAABn8SVBAAA
|
||||
AAAAAAAAl7uIBAAAAACKrXe5ocaX/5rBkPqYv43+mMCO/5jAjf6YwI7/mMCO/5C4hP+bxpb/nciY/53I
|
||||
mP+dyJj/nciY/53ImP+dyJj/m8eW/5C4g/+YwI7/mMCO/5jAjf6YwI7/mL+N/prCkPqhxpf/iq13uQAA
|
||||
AACXu4kEAAAAAAAAAACny58DAAAAAJC0f4i43LX/qNGl+5zIl/6eypr/ncmZ/p3Jmf+eyZn/n8qc/53I
|
||||
mP+dyJj/nsmY/57Jmf+eyZn/nsmY/53ImP+dyJj/n8qb/57Jmf+dyZn/ncmZ/p7Kmv+cyJf+qNGl+7nc
|
||||
tf+QtH6HAAAAAKjMngMAAAAAAAAAAJa7iQEAAAAAdZxeLKfKneix163/m8aV/Z7Imf+dyJj+nciY/53I
|
||||
mP+dyJj/nciY/53ImP+dyJj/nsmZ/57Jmf+dyJj/nciY/53ImP+dyJj/nciY/53ImP+dyJj+nsiZ/5vG
|
||||
lf2x163/psmb6HSeXiwAAAAAlryIAQAAAAAAAAAAAAAAAAAAAAAAAAADmLuKvbjctf+hy5z7nMiX/p7J
|
||||
mf+eyZn+nsmZ/57Jmf+eyZn/nsmZ/57Jmf+dyJj/nciY/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/p7J
|
||||
mf+cyJf+ocuc+7jctf+Yu4m9AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAu924AgAAAACNsntlsdOq/arS
|
||||
p/yaxpX9nsmZ/p3ImP6dyJj+nciY/p3ImP6dyJj+nciY/p3ImP6dyJj+nciY/p3ImP6dyJj+nciY/p3I
|
||||
mP6dyJj+nsmZ/prGlf2q0qb8sNOp/I6yfGQAAAAAt9yzAgAAAAAAAAAAAAAAAAAAAACBqG0CAAAAAGWP
|
||||
Syiix5jntduz/5zHl/yeyJn/nsmZ/p7Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57J
|
||||
mf+eyZn/nsmZ/57Jmf6eyJn/nMeX/LXbs/+jxpjnZ4xKKAAAAACDp20CAAAAAAAAAAAAAAAAAAAAAHSZ
|
||||
WwEAAAAABC4AB5q/jZ+12bD/oMqb+5jEk/6bxpX+msaV/prGlf6axpX+msaV/prGlf6axpX+msaV/prG
|
||||
lf6axpX+msaV/prGlf6axpX+m8aV/pjEk/6gy5v7tdmw/5u/jp4CJgAHAAAAAHSYWwEAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAIqudwIAAAAAfqNoWK7Rpv+027T6pM6g+6fRo/un0KP7p9Cj+6fQo/un0KP7p9Cj+6fQ
|
||||
o/un0KP7p9Cj+6fQo/un0KP7p9Cj+6fQo/un0KP7pM6g+7TctPqu0ab/fqNoWAAAAACKrncCAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAeaBjAQAAAABnj0wmncGQz6/SqP+v0qf9r9Gn/6/Rp/+v0af/r9Gn/6/R
|
||||
p/+v0af/r9Gn/6/Rp/+v0af/r9Gn/6/Rp/+v0af/r9Gn/6/Rp/+v0qf9r9Ko/53BkM9njUolAAAAAHqf
|
||||
YgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8o2Y+iK12Zoywe12Lr3pfjK96X4yv
|
||||
el+Mr3pfjK96X4yvel+Mr3pfjK96X4yvel+Mr3pfjK96X4yvel+Mr3pfi696X4ywe12IrXZmfaNmPgAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////////gAAAH4AAAB+AAAAfgAAAH4AAAB+AA
|
||||
AAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AA
|
||||
AAfwAAAP8AAAD/gAAB/4AAAf+AAAH/wAAD/8AAA///////////8oAAAAEAAAACAAAAABACAAAAAAAAAE
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAH2iZxiGq3E8iK1zNoesczeHrHM3h6xyN4arcTeHrHM3h6xzN4es
|
||||
czeHrHM3iK1zNoarcTx9omcYAAAAAAAAAACUuIRer9Oo/7TXrvaz1q35s9at+bTXrvm12LD5s9at+bPW
|
||||
rfmz1q35s9at+bTXrvav06j/lLiEXgAAAAAAAAAAm7+NXbrdtv+/4r77vuG7/r/ivf+737j/stas/73h
|
||||
u/+/4b3/vuG8/77hvP6/4r77ut22/5u/jV0AAAAAAAAAAJm9i12427P/veC6+73guv623LP+wNq5/ubs
|
||||
4f631rH+ud63/r3guv6837n+veC7+7jbs/+ZvYtdAAAAAAAAAACZvYtduNu0/77hvPu43bX+wdq7/u3x
|
||||
6f7a5tX+6/Dn/rjWsf653rb+veC6/r3gu/u427T/mb2LXQAAAAAAAAAAmb2LXbjbtP++4bz7uN21/sLa
|
||||
vP7F3L//rdSn/87gyf/t8er/vNm3/rret/6+4bv7uNu0/5m9i10AAAAAAAAAAJm9i12427T/veC7+73g
|
||||
uv653bX+uN21/7/ivf+y2K3/z+HJ/9PgzP6z2K/+v+K9+7jbs/+ZvYtdAAAAAAAAAACXvIpjt9uz/77h
|
||||
u/u837n/veC6/r7gu/++4bv/wOO+/7fbs/+117D+veC6/77hu/u327P/l7yKYwAAAAAAAAAAmL2KZbfa
|
||||
s/+94Lv7u9+4/73guv663bb/qs+k/6rPo/+73rj/vuG7/rveuP+94Lv7t9qz/5i9imUAAAAAAAAAAJi9
|
||||
i2W53LX/wOK++7/hvP+937n+nsWV/5nEk/+ZxJL/nsWV/73fuf6/4bz/wOK++7nctf+YvYtlAAAAAAAA
|
||||
AACTtoJlp8yf/6fNoPupzqH/oceY/pnEk/+fypr/n8qa/5nEk/+hx5j+qM6h/6fNoPuozJ//k7aCZQAA
|
||||
AAAAAAAAkbN/NKjOovubx5b/msaV/pvHlv6eyJn+nciY/p3ImP6eyZn+m8eW/prGlf6bx5b/qM6i+5G0
|
||||
fjQAAAAAAAAAAAAAAACpzaHBpM2g/53ImPyeyZn+nsmZ/p7Jmf6eyZn+nsmZ/p7Jmf6dyJj8pM2f/6nN
|
||||
oMEAAAAAAAAAAKvPowMAAAAAn8OTcKnRpf+bx5b8ncmY/p3ImP+dyJj/nciY/53ImP+dyJj+m8eW/KnR
|
||||
pf+gwpNvAAAAAKvPowOMsXsBAAAAAIKlayKozaDrqc+j/ajOofmozqH6qM6h+qjOofqozqH6qM6h+anP
|
||||
o/2ozaDqgqVrIgAAAACNsXsBAAAAAAAAAAAAAAAAiq93LZq7ijuauok4mrqJOZq6iTmauok5mrqJOZq6
|
||||
iTiau4o7iq53LQAAAAAAAAAAAAAAAP//AADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMAD
|
||||
AADAAwAAwAMAAMADAADgBwAA4AcAAP//AAA=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
561
Handler/Project/Dialog/RegExRule.Designer.cs
generated
Normal file
561
Handler/Project/Dialog/RegExRule.Designer.cs
generated
Normal file
@@ -0,0 +1,561 @@
|
||||
namespace Project.Dialog
|
||||
{
|
||||
partial class RegExRule
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RegExRule));
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
this.bn = new System.Windows.Forms.BindingNavigator(this.components);
|
||||
this.bindingNavigatorAddNewItem = new System.Windows.Forms.ToolStripButton();
|
||||
this.bs = new System.Windows.Forms.BindingSource(this.components);
|
||||
this.dataSet1 = new Project.DataSet1();
|
||||
this.bindingNavigatorCountItem = new System.Windows.Forms.ToolStripLabel();
|
||||
this.bindingNavigatorDeleteItem = new System.Windows.Forms.ToolStripButton();
|
||||
this.bindingNavigatorMoveFirstItem = new System.Windows.Forms.ToolStripButton();
|
||||
this.bindingNavigatorMovePreviousItem = new System.Windows.Forms.ToolStripButton();
|
||||
this.bindingNavigatorSeparator = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.bindingNavigatorPositionItem = new System.Windows.Forms.ToolStripTextBox();
|
||||
this.bindingNavigatorSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.bindingNavigatorMoveNextItem = new System.Windows.Forms.ToolStripButton();
|
||||
this.bindingNavigatorMoveLastItem = new System.Windows.Forms.ToolStripButton();
|
||||
this.bindingNavigatorSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.component_Reel_RegExRuleBindingNavigatorSaveItem = new System.Windows.Forms.ToolStripButton();
|
||||
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
|
||||
this.btCopy = new System.Windows.Forms.ToolStripButton();
|
||||
this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
|
||||
this.dv1 = new System.Windows.Forms.DataGridView();
|
||||
this.dvcModelName = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn();
|
||||
this.IsIgnore = new System.Windows.Forms.DataGridViewCheckBoxColumn();
|
||||
this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.dataGridViewTextBoxColumn5 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.dataGridViewCheckBoxColumn2 = new System.Windows.Forms.DataGridViewCheckBoxColumn();
|
||||
this.dataGridViewCheckBoxColumn3 = new System.Windows.Forms.DataGridViewCheckBoxColumn();
|
||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.tbPattern = new System.Windows.Forms.TextBox();
|
||||
this.tbGroups = new System.Windows.Forms.TextBox();
|
||||
this.cmbBCDTestBox = new System.Windows.Forms.ComboBox();
|
||||
this.btBcdTest = new System.Windows.Forms.Button();
|
||||
this.ta = new Project.DataSet1TableAdapters.K4EE_Component_Reel_RegExRuleTableAdapter();
|
||||
this.tam = new Project.DataSet1TableAdapters.TableAdapterManager();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.cmbModelList = new System.Windows.Forms.ComboBox();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
((System.ComponentModel.ISupportInitialize)(this.bn)).BeginInit();
|
||||
this.bn.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.bs)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.dataSet1)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.dv1)).BeginInit();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
this.panel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// bn
|
||||
//
|
||||
this.bn.AddNewItem = this.bindingNavigatorAddNewItem;
|
||||
this.bn.BindingSource = this.bs;
|
||||
this.bn.CountItem = this.bindingNavigatorCountItem;
|
||||
this.bn.DeleteItem = this.bindingNavigatorDeleteItem;
|
||||
this.bn.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||
this.bn.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.bindingNavigatorMoveFirstItem,
|
||||
this.bindingNavigatorMovePreviousItem,
|
||||
this.bindingNavigatorSeparator,
|
||||
this.bindingNavigatorPositionItem,
|
||||
this.bindingNavigatorCountItem,
|
||||
this.bindingNavigatorSeparator1,
|
||||
this.bindingNavigatorMoveNextItem,
|
||||
this.bindingNavigatorMoveLastItem,
|
||||
this.bindingNavigatorSeparator2,
|
||||
this.bindingNavigatorAddNewItem,
|
||||
this.bindingNavigatorDeleteItem,
|
||||
this.component_Reel_RegExRuleBindingNavigatorSaveItem,
|
||||
this.toolStripButton1,
|
||||
this.btCopy,
|
||||
this.toolStripButton2});
|
||||
this.bn.Location = new System.Drawing.Point(0, 609);
|
||||
this.bn.MoveFirstItem = this.bindingNavigatorMoveFirstItem;
|
||||
this.bn.MoveLastItem = this.bindingNavigatorMoveLastItem;
|
||||
this.bn.MoveNextItem = this.bindingNavigatorMoveNextItem;
|
||||
this.bn.MovePreviousItem = this.bindingNavigatorMovePreviousItem;
|
||||
this.bn.Name = "bn";
|
||||
this.bn.PositionItem = this.bindingNavigatorPositionItem;
|
||||
this.bn.Size = new System.Drawing.Size(967, 25);
|
||||
this.bn.TabIndex = 0;
|
||||
this.bn.Text = "bindingNavigator1";
|
||||
//
|
||||
// bindingNavigatorAddNewItem
|
||||
//
|
||||
this.bindingNavigatorAddNewItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorAddNewItem.Image")));
|
||||
this.bindingNavigatorAddNewItem.Name = "bindingNavigatorAddNewItem";
|
||||
this.bindingNavigatorAddNewItem.RightToLeftAutoMirrorImage = true;
|
||||
this.bindingNavigatorAddNewItem.Size = new System.Drawing.Size(65, 22);
|
||||
this.bindingNavigatorAddNewItem.Text = "Add(&A)";
|
||||
//
|
||||
// bs
|
||||
//
|
||||
this.bs.DataMember = "K4EE_Component_Reel_RegExRule";
|
||||
this.bs.DataSource = this.dataSet1;
|
||||
this.bs.Sort = "CustCode,Seq";
|
||||
this.bs.CurrentChanged += new System.EventHandler(this.bs_CurrentChanged);
|
||||
//
|
||||
// dataSet1
|
||||
//
|
||||
this.dataSet1.DataSetName = "DataSet1";
|
||||
this.dataSet1.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema;
|
||||
//
|
||||
// bindingNavigatorCountItem
|
||||
//
|
||||
this.bindingNavigatorCountItem.Name = "bindingNavigatorCountItem";
|
||||
this.bindingNavigatorCountItem.Size = new System.Drawing.Size(26, 22);
|
||||
this.bindingNavigatorCountItem.Text = "/{0}";
|
||||
this.bindingNavigatorCountItem.ToolTipText = "Total item count";
|
||||
//
|
||||
// bindingNavigatorDeleteItem
|
||||
//
|
||||
this.bindingNavigatorDeleteItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorDeleteItem.Image")));
|
||||
this.bindingNavigatorDeleteItem.Name = "bindingNavigatorDeleteItem";
|
||||
this.bindingNavigatorDeleteItem.RightToLeftAutoMirrorImage = true;
|
||||
this.bindingNavigatorDeleteItem.Size = new System.Drawing.Size(76, 22);
|
||||
this.bindingNavigatorDeleteItem.Text = "Delete(&D)";
|
||||
//
|
||||
// bindingNavigatorMoveFirstItem
|
||||
//
|
||||
this.bindingNavigatorMoveFirstItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
||||
this.bindingNavigatorMoveFirstItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorMoveFirstItem.Image")));
|
||||
this.bindingNavigatorMoveFirstItem.Name = "bindingNavigatorMoveFirstItem";
|
||||
this.bindingNavigatorMoveFirstItem.RightToLeftAutoMirrorImage = true;
|
||||
this.bindingNavigatorMoveFirstItem.Size = new System.Drawing.Size(23, 22);
|
||||
this.bindingNavigatorMoveFirstItem.Text = "Move to first";
|
||||
//
|
||||
// bindingNavigatorMovePreviousItem
|
||||
//
|
||||
this.bindingNavigatorMovePreviousItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
||||
this.bindingNavigatorMovePreviousItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorMovePreviousItem.Image")));
|
||||
this.bindingNavigatorMovePreviousItem.Name = "bindingNavigatorMovePreviousItem";
|
||||
this.bindingNavigatorMovePreviousItem.RightToLeftAutoMirrorImage = true;
|
||||
this.bindingNavigatorMovePreviousItem.Size = new System.Drawing.Size(23, 22);
|
||||
this.bindingNavigatorMovePreviousItem.Text = "Move to previous";
|
||||
//
|
||||
// bindingNavigatorSeparator
|
||||
//
|
||||
this.bindingNavigatorSeparator.Name = "bindingNavigatorSeparator";
|
||||
this.bindingNavigatorSeparator.Size = new System.Drawing.Size(6, 25);
|
||||
//
|
||||
// bindingNavigatorPositionItem
|
||||
//
|
||||
this.bindingNavigatorPositionItem.AccessibleName = "Position";
|
||||
this.bindingNavigatorPositionItem.AutoSize = false;
|
||||
this.bindingNavigatorPositionItem.Name = "bindingNavigatorPositionItem";
|
||||
this.bindingNavigatorPositionItem.Size = new System.Drawing.Size(50, 23);
|
||||
this.bindingNavigatorPositionItem.Text = "0";
|
||||
this.bindingNavigatorPositionItem.ToolTipText = "Current position";
|
||||
//
|
||||
// bindingNavigatorSeparator1
|
||||
//
|
||||
this.bindingNavigatorSeparator1.Name = "bindingNavigatorSeparator1";
|
||||
this.bindingNavigatorSeparator1.Size = new System.Drawing.Size(6, 25);
|
||||
//
|
||||
// bindingNavigatorMoveNextItem
|
||||
//
|
||||
this.bindingNavigatorMoveNextItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
||||
this.bindingNavigatorMoveNextItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorMoveNextItem.Image")));
|
||||
this.bindingNavigatorMoveNextItem.Name = "bindingNavigatorMoveNextItem";
|
||||
this.bindingNavigatorMoveNextItem.RightToLeftAutoMirrorImage = true;
|
||||
this.bindingNavigatorMoveNextItem.Size = new System.Drawing.Size(23, 22);
|
||||
this.bindingNavigatorMoveNextItem.Text = "Move to next";
|
||||
//
|
||||
// bindingNavigatorMoveLastItem
|
||||
//
|
||||
this.bindingNavigatorMoveLastItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
||||
this.bindingNavigatorMoveLastItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorMoveLastItem.Image")));
|
||||
this.bindingNavigatorMoveLastItem.Name = "bindingNavigatorMoveLastItem";
|
||||
this.bindingNavigatorMoveLastItem.RightToLeftAutoMirrorImage = true;
|
||||
this.bindingNavigatorMoveLastItem.Size = new System.Drawing.Size(23, 22);
|
||||
this.bindingNavigatorMoveLastItem.Text = "Move to last";
|
||||
//
|
||||
// bindingNavigatorSeparator2
|
||||
//
|
||||
this.bindingNavigatorSeparator2.Name = "bindingNavigatorSeparator2";
|
||||
this.bindingNavigatorSeparator2.Size = new System.Drawing.Size(6, 25);
|
||||
//
|
||||
// component_Reel_RegExRuleBindingNavigatorSaveItem
|
||||
//
|
||||
this.component_Reel_RegExRuleBindingNavigatorSaveItem.Image = ((System.Drawing.Image)(resources.GetObject("component_Reel_RegExRuleBindingNavigatorSaveItem.Image")));
|
||||
this.component_Reel_RegExRuleBindingNavigatorSaveItem.Name = "component_Reel_RegExRuleBindingNavigatorSaveItem";
|
||||
this.component_Reel_RegExRuleBindingNavigatorSaveItem.Size = new System.Drawing.Size(65, 22);
|
||||
this.component_Reel_RegExRuleBindingNavigatorSaveItem.Text = "Save(&S)";
|
||||
this.component_Reel_RegExRuleBindingNavigatorSaveItem.Click += new System.EventHandler(this.component_Reel_RegExRuleBindingNavigatorSaveItem_Click);
|
||||
//
|
||||
// toolStripButton1
|
||||
//
|
||||
this.toolStripButton1.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
|
||||
this.toolStripButton1.Image = global::Project.Properties.Resources.arrow_refresh_small;
|
||||
this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.toolStripButton1.Name = "toolStripButton1";
|
||||
this.toolStripButton1.Size = new System.Drawing.Size(81, 22);
|
||||
this.toolStripButton1.Text = "Refresh(&R)";
|
||||
this.toolStripButton1.Click += new System.EventHandler(this.toolStripButton1_Click);
|
||||
//
|
||||
// btCopy
|
||||
//
|
||||
this.btCopy.Image = global::Project.Properties.Resources.copy;
|
||||
this.btCopy.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.btCopy.Name = "btCopy";
|
||||
this.btCopy.Size = new System.Drawing.Size(71, 22);
|
||||
this.btCopy.Text = "Copy(&C)";
|
||||
this.btCopy.Click += new System.EventHandler(this.btCopy_Click);
|
||||
//
|
||||
// toolStripButton2
|
||||
//
|
||||
this.toolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton2.Image")));
|
||||
this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.toolStripButton2.Name = "toolStripButton2";
|
||||
this.toolStripButton2.Size = new System.Drawing.Size(98, 22);
|
||||
this.toolStripButton2.Text = "Export List(&O)";
|
||||
this.toolStripButton2.Click += new System.EventHandler(this.toolStripButton2_Click);
|
||||
//
|
||||
// dv1
|
||||
//
|
||||
this.dv1.AllowUserToAddRows = false;
|
||||
this.dv1.AutoGenerateColumns = false;
|
||||
this.dv1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
|
||||
this.dv1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
||||
this.dv1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
||||
this.dvcModelName,
|
||||
this.dataGridViewCheckBoxColumn1,
|
||||
this.IsIgnore,
|
||||
this.dataGridViewTextBoxColumn1,
|
||||
this.dataGridViewTextBoxColumn2,
|
||||
this.dataGridViewTextBoxColumn5,
|
||||
this.dataGridViewTextBoxColumn4,
|
||||
this.dataGridViewCheckBoxColumn2,
|
||||
this.dataGridViewCheckBoxColumn3});
|
||||
this.dv1.DataSource = this.bs;
|
||||
dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
|
||||
dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Window;
|
||||
dataGridViewCellStyle4.Font = new System.Drawing.Font("맑은 고딕", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
dataGridViewCellStyle4.Padding = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight;
|
||||
dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
|
||||
dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
|
||||
this.dv1.DefaultCellStyle = dataGridViewCellStyle4;
|
||||
this.dv1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.dv1.Location = new System.Drawing.Point(0, 27);
|
||||
this.dv1.Name = "dv1";
|
||||
this.dv1.RowTemplate.Height = 23;
|
||||
this.dv1.Size = new System.Drawing.Size(967, 380);
|
||||
this.dv1.TabIndex = 2;
|
||||
//
|
||||
// dvcModelName
|
||||
//
|
||||
this.dvcModelName.DataPropertyName = "CustCode";
|
||||
this.dvcModelName.HeaderText = "Model Name";
|
||||
this.dvcModelName.Name = "dvcModelName";
|
||||
this.dvcModelName.Visible = false;
|
||||
//
|
||||
// dataGridViewCheckBoxColumn1
|
||||
//
|
||||
this.dataGridViewCheckBoxColumn1.DataPropertyName = "IsEnable";
|
||||
this.dataGridViewCheckBoxColumn1.HeaderText = "Enable";
|
||||
this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1";
|
||||
//
|
||||
// IsIgnore
|
||||
//
|
||||
this.IsIgnore.DataPropertyName = "IsIgnore";
|
||||
this.IsIgnore.HeaderText = "Except";
|
||||
this.IsIgnore.Name = "IsIgnore";
|
||||
//
|
||||
// dataGridViewTextBoxColumn1
|
||||
//
|
||||
this.dataGridViewTextBoxColumn1.DataPropertyName = "Id";
|
||||
dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
|
||||
this.dataGridViewTextBoxColumn1.DefaultCellStyle = dataGridViewCellStyle1;
|
||||
this.dataGridViewTextBoxColumn1.HeaderText = "ID";
|
||||
this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1";
|
||||
this.dataGridViewTextBoxColumn1.ReadOnly = true;
|
||||
//
|
||||
// dataGridViewTextBoxColumn2
|
||||
//
|
||||
this.dataGridViewTextBoxColumn2.DataPropertyName = "Seq";
|
||||
dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
||||
this.dataGridViewTextBoxColumn2.DefaultCellStyle = dataGridViewCellStyle2;
|
||||
this.dataGridViewTextBoxColumn2.HeaderText = "Order";
|
||||
this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2";
|
||||
//
|
||||
// dataGridViewTextBoxColumn5
|
||||
//
|
||||
this.dataGridViewTextBoxColumn5.DataPropertyName = "Symbol";
|
||||
dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
||||
this.dataGridViewTextBoxColumn5.DefaultCellStyle = dataGridViewCellStyle3;
|
||||
this.dataGridViewTextBoxColumn5.HeaderText = "Type";
|
||||
this.dataGridViewTextBoxColumn5.Name = "dataGridViewTextBoxColumn5";
|
||||
//
|
||||
// dataGridViewTextBoxColumn4
|
||||
//
|
||||
this.dataGridViewTextBoxColumn4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
|
||||
this.dataGridViewTextBoxColumn4.DataPropertyName = "Description";
|
||||
this.dataGridViewTextBoxColumn4.HeaderText = "Description";
|
||||
this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4";
|
||||
//
|
||||
// dataGridViewCheckBoxColumn2
|
||||
//
|
||||
this.dataGridViewCheckBoxColumn2.DataPropertyName = "IsTrust";
|
||||
this.dataGridViewCheckBoxColumn2.HeaderText = "Trust";
|
||||
this.dataGridViewCheckBoxColumn2.Name = "dataGridViewCheckBoxColumn2";
|
||||
//
|
||||
// dataGridViewCheckBoxColumn3
|
||||
//
|
||||
this.dataGridViewCheckBoxColumn3.DataPropertyName = "IsAmkStd";
|
||||
this.dataGridViewCheckBoxColumn3.HeaderText = "AmkStd";
|
||||
this.dataGridViewCheckBoxColumn3.Name = "dataGridViewCheckBoxColumn3";
|
||||
//
|
||||
// tableLayoutPanel1
|
||||
//
|
||||
this.tableLayoutPanel1.ColumnCount = 2;
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 122F));
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label2, 0, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.tbPattern, 1, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.tbGroups, 1, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.cmbBCDTestBox, 1, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.btBcdTest, 0, 2);
|
||||
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 430);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
this.tableLayoutPanel1.RowCount = 3;
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 27F));
|
||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(967, 179);
|
||||
this.tableLayoutPanel1.TabIndex = 4;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.label1.Location = new System.Drawing.Point(3, 0);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(116, 76);
|
||||
this.label1.TabIndex = 0;
|
||||
this.label1.Text = "Pattern";
|
||||
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.label2.Location = new System.Drawing.Point(3, 76);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(116, 76);
|
||||
this.label2.TabIndex = 0;
|
||||
this.label2.Text = "Groups";
|
||||
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// tbPattern
|
||||
//
|
||||
this.tbPattern.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bs, "Pattern", true));
|
||||
this.tbPattern.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tbPattern.Font = new System.Drawing.Font("Consolas", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.tbPattern.ForeColor = System.Drawing.Color.Black;
|
||||
this.tbPattern.Location = new System.Drawing.Point(125, 3);
|
||||
this.tbPattern.Multiline = true;
|
||||
this.tbPattern.Name = "tbPattern";
|
||||
this.tbPattern.Size = new System.Drawing.Size(839, 70);
|
||||
this.tbPattern.TabIndex = 1;
|
||||
//
|
||||
// tbGroups
|
||||
//
|
||||
this.tbGroups.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bs, "Groups", true));
|
||||
this.tbGroups.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tbGroups.Font = new System.Drawing.Font("Consolas", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.tbGroups.ForeColor = System.Drawing.Color.Black;
|
||||
this.tbGroups.Location = new System.Drawing.Point(125, 79);
|
||||
this.tbGroups.Multiline = true;
|
||||
this.tbGroups.Name = "tbGroups";
|
||||
this.tbGroups.Size = new System.Drawing.Size(839, 70);
|
||||
this.tbGroups.TabIndex = 1;
|
||||
//
|
||||
// cmbBCDTestBox
|
||||
//
|
||||
this.cmbBCDTestBox.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.cmbBCDTestBox.Location = new System.Drawing.Point(125, 155);
|
||||
this.cmbBCDTestBox.Name = "cmbBCDTestBox";
|
||||
this.cmbBCDTestBox.Size = new System.Drawing.Size(839, 20);
|
||||
this.cmbBCDTestBox.TabIndex = 2;
|
||||
//
|
||||
// btBcdTest
|
||||
//
|
||||
this.btBcdTest.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.btBcdTest.Location = new System.Drawing.Point(3, 155);
|
||||
this.btBcdTest.Name = "btBcdTest";
|
||||
this.btBcdTest.Size = new System.Drawing.Size(116, 21);
|
||||
this.btBcdTest.TabIndex = 3;
|
||||
this.btBcdTest.Text = "Test";
|
||||
this.btBcdTest.Click += new System.EventHandler(this.btBcdTest_Click);
|
||||
//
|
||||
// ta
|
||||
//
|
||||
this.ta.ClearBeforeFill = true;
|
||||
//
|
||||
// tam
|
||||
//
|
||||
this.tam.BackupDataSetBeforeUpdate = false;
|
||||
this.tam.K4EE_Component_Reel_CustInfoTableAdapter = null;
|
||||
this.tam.K4EE_Component_Reel_PreSetTableAdapter = null;
|
||||
this.tam.K4EE_Component_Reel_Print_InformationTableAdapter = null;
|
||||
this.tam.K4EE_Component_Reel_RegExRuleTableAdapter = this.ta;
|
||||
this.tam.K4EE_Component_Reel_ResultTableAdapter = null;
|
||||
this.tam.K4EE_Component_Reel_SID_ConvertTableAdapter = null;
|
||||
this.tam.K4EE_Component_Reel_SID_InformationTableAdapter = null;
|
||||
this.tam.UpdateOrder = Project.DataSet1TableAdapters.TableAdapterManager.UpdateOrderOption.InsertUpdateDelete;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||
this.label3.Location = new System.Drawing.Point(0, 407);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Padding = new System.Windows.Forms.Padding(3, 3, 0, 0);
|
||||
this.label3.Size = new System.Drawing.Size(967, 23);
|
||||
this.label3.TabIndex = 5;
|
||||
this.label3.Text = "Barcode Type 1: QR, 2:DataMatrix, 11: Code 39 || GROPS Item : SID,VLOT,VNAME,RID," +
|
||||
"MFG,QTY";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.Controls.Add(this.cmbModelList);
|
||||
this.panel1.Controls.Add(this.label4);
|
||||
this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.panel1.Location = new System.Drawing.Point(0, 0);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Size = new System.Drawing.Size(967, 27);
|
||||
this.panel1.TabIndex = 6;
|
||||
//
|
||||
// cmbModelList
|
||||
//
|
||||
this.cmbModelList.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.cmbModelList.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbModelList.Font = new System.Drawing.Font("굴림", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.cmbModelList.Location = new System.Drawing.Point(116, 0);
|
||||
this.cmbModelList.Name = "cmbModelList";
|
||||
this.cmbModelList.Size = new System.Drawing.Size(851, 27);
|
||||
this.cmbModelList.TabIndex = 3;
|
||||
this.cmbModelList.SelectedIndexChanged += new System.EventHandler(this.cmbModelList_SelectedIndexChanged);
|
||||
//
|
||||
// label4
|
||||
//
|
||||
this.label4.Dock = System.Windows.Forms.DockStyle.Left;
|
||||
this.label4.Location = new System.Drawing.Point(0, 0);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(116, 27);
|
||||
this.label4.TabIndex = 1;
|
||||
this.label4.Text = "Model";
|
||||
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// RegExRule
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(967, 634);
|
||||
this.Controls.Add(this.dv1);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Controls.Add(this.label3);
|
||||
this.Controls.Add(this.tableLayoutPanel1);
|
||||
this.Controls.Add(this.bn);
|
||||
this.Name = "RegExRule";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "RegExRule";
|
||||
this.Load += new System.EventHandler(this.RegExRule_Load);
|
||||
((System.ComponentModel.ISupportInitialize)(this.bn)).EndInit();
|
||||
this.bn.ResumeLayout(false);
|
||||
this.bn.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.bs)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.dataSet1)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.dv1)).EndInit();
|
||||
this.tableLayoutPanel1.ResumeLayout(false);
|
||||
this.tableLayoutPanel1.PerformLayout();
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private DataSet1 dataSet1;
|
||||
private System.Windows.Forms.BindingSource bs;
|
||||
private DataSet1TableAdapters.K4EE_Component_Reel_RegExRuleTableAdapter ta;
|
||||
private DataSet1TableAdapters.TableAdapterManager tam;
|
||||
private System.Windows.Forms.BindingNavigator bn;
|
||||
private System.Windows.Forms.ToolStripButton bindingNavigatorAddNewItem;
|
||||
private System.Windows.Forms.ToolStripLabel bindingNavigatorCountItem;
|
||||
private System.Windows.Forms.ToolStripButton bindingNavigatorDeleteItem;
|
||||
private System.Windows.Forms.ToolStripButton bindingNavigatorMoveFirstItem;
|
||||
private System.Windows.Forms.ToolStripButton bindingNavigatorMovePreviousItem;
|
||||
private System.Windows.Forms.ToolStripSeparator bindingNavigatorSeparator;
|
||||
private System.Windows.Forms.ToolStripTextBox bindingNavigatorPositionItem;
|
||||
private System.Windows.Forms.ToolStripSeparator bindingNavigatorSeparator1;
|
||||
private System.Windows.Forms.ToolStripButton bindingNavigatorMoveNextItem;
|
||||
private System.Windows.Forms.ToolStripButton bindingNavigatorMoveLastItem;
|
||||
private System.Windows.Forms.ToolStripSeparator bindingNavigatorSeparator2;
|
||||
private System.Windows.Forms.ToolStripButton component_Reel_RegExRuleBindingNavigatorSaveItem;
|
||||
private System.Windows.Forms.DataGridView dv1;
|
||||
private System.Windows.Forms.ToolStripButton toolStripButton1;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.TextBox tbPattern;
|
||||
private System.Windows.Forms.TextBox tbGroups;
|
||||
private System.Windows.Forms.ToolStripButton toolStripButton2;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.ComboBox cmbBCDTestBox;
|
||||
private System.Windows.Forms.Button btBcdTest;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.ComboBox cmbModelList;
|
||||
private System.Windows.Forms.ToolStripButton btCopy;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn dvcModelName;
|
||||
private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1;
|
||||
private System.Windows.Forms.DataGridViewCheckBoxColumn IsIgnore;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn5;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4;
|
||||
private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn2;
|
||||
private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn3;
|
||||
}
|
||||
}
|
||||
367
Handler/Project/Dialog/RegExRule.cs
Normal file
367
Handler/Project/Dialog/RegExRule.cs
Normal file
@@ -0,0 +1,367 @@
|
||||
using AR;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Project.Dialog
|
||||
{
|
||||
public partial class RegExRule : Form
|
||||
{
|
||||
string bcdteststring = "";
|
||||
public RegExRule()
|
||||
{
|
||||
InitializeComponent();
|
||||
this.dv1.BorderStyle = BorderStyle.None;
|
||||
this.dataSet1.K4EE_Component_Reel_RegExRule.TableNewRow += (s1, e1) =>
|
||||
{
|
||||
if (PUB.Result.isSetvModel)
|
||||
e1.Row["CustCode"] = PUB.Result.vModel.Title;
|
||||
};
|
||||
dataGridViewTextBoxColumn1.Visible = false;
|
||||
|
||||
//모델목록을 업데이트한다.
|
||||
cmbModelList.Items.Clear();
|
||||
foreach (var dr in PUB.mdm.dataSet.OPModel.OrderBy(t => t.Title))
|
||||
cmbModelList.Items.Add(dr.Title);
|
||||
cmbModelList.Items.Add("ALL");
|
||||
|
||||
//현재 선택된 모델을 자동선택한다.
|
||||
cmbModelList.Text = PUB.Result.vModel.Title;
|
||||
this.KeyPreview = true;
|
||||
this.KeyDown += (s1, e1) =>
|
||||
{
|
||||
if (e1.KeyCode == Keys.Escape) this.Close();
|
||||
};
|
||||
|
||||
LoadSaveBCDtestData();
|
||||
}
|
||||
|
||||
void LoadSaveBCDtestData(bool load = true)
|
||||
{
|
||||
var fn = "bcdtestlist.txt";
|
||||
if (load)
|
||||
{
|
||||
this.cmbBCDTestBox.Items.Clear();
|
||||
if (System.IO.File.Exists(fn))
|
||||
{
|
||||
bcdteststring = System.IO.File.ReadAllText(fn, System.Text.Encoding.Default).Replace("\r", "");
|
||||
var lines = bcdteststring.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
foreach (var lin in lines)
|
||||
{
|
||||
this.cmbBCDTestBox.Items.Add(lin);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.cmbBCDTestBox.Items.Add($"101415540;LC15848629;TAIYOYUDEN;20000;RC18091A2526JMN;20250215");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//save
|
||||
var sb = new System.Text.StringBuilder();
|
||||
foreach (string item in this.cmbBCDTestBox.Items)
|
||||
sb.AppendLine(item);
|
||||
System.IO.File.WriteAllText(fn, sb.ToString(), System.Text.Encoding.Default);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void RegExRule_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (cmbModelList.SelectedIndex == -1 && cmbModelList.Items.Count > 0)
|
||||
cmbModelList.SelectedIndex = 0;
|
||||
}
|
||||
|
||||
private void component_Reel_RegExRuleBindingNavigatorSaveItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.Validate();
|
||||
this.bs.EndEdit();
|
||||
var cnt1 = this.ta.Update(this.dataSet1.K4EE_Component_Reel_RegExRule);
|
||||
//var cnt = this.tam.UpdateAll(this.dataSet1);
|
||||
if (cnt1 == 0)
|
||||
{
|
||||
UTIL.MsgE("No content has been saved");
|
||||
}
|
||||
else UTIL.MsgI($"{cnt1} records have been saved");
|
||||
lock (PUB.Result.BCDPatternLock)
|
||||
{
|
||||
var modelName = PUB.Result.vModel.Title;
|
||||
PUB.Result.BCDPattern = PUB.GetPatterns(modelName, false);
|
||||
PUB.Result.BCDIgnorePattern = PUB.GetPatterns(modelName, true);
|
||||
PUB.log.Add($"Model pattern loading: {PUB.Result.BCDPattern.Count}/{PUB.Result.BCDIgnorePattern.Count}");
|
||||
}
|
||||
|
||||
dv1.AutoResizeColumns();
|
||||
}
|
||||
|
||||
private void RefreshList(string cust)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
if (cust == "ALL")
|
||||
{
|
||||
dvcModelName.Visible = true;
|
||||
this.ta.FillAll(this.dataSet1.K4EE_Component_Reel_RegExRule);
|
||||
}
|
||||
else
|
||||
{
|
||||
dvcModelName.Visible = false;
|
||||
this.ta.FillByWithSample(this.dataSet1.K4EE_Component_Reel_RegExRule, cust);
|
||||
}
|
||||
|
||||
foreach (DataGridViewRow drow in this.dv1.Rows)
|
||||
{
|
||||
var drv = drow.DataBoundItem as DataRowView;
|
||||
if (drv == null) continue;
|
||||
var dr = drv.Row as DataSet1.K4EE_Component_Reel_RegExRuleRow;
|
||||
if (dr.IsCustCodeNull() || dr.CustCode.isEmpty())
|
||||
drow.DefaultCellStyle.BackColor = Color.DimGray;
|
||||
else
|
||||
drow.DefaultCellStyle.BackColor = Color.WhiteSmoke;
|
||||
}
|
||||
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
System.Windows.Forms.MessageBox.Show(ex.Message);
|
||||
}
|
||||
dv1.AutoResizeColumns();
|
||||
|
||||
}
|
||||
|
||||
private void toolStripButton1_Click(object sender, EventArgs e)
|
||||
{
|
||||
var title = cmbModelList.Text;
|
||||
if (title.isEmpty()) title = PUB.Result.vModel.Title;
|
||||
RefreshList(title);
|
||||
}
|
||||
|
||||
private void bs_CurrentChanged(object sender, EventArgs e)
|
||||
{
|
||||
var drv = this.bs.Current as DataRowView;
|
||||
if (drv == null) return;
|
||||
var dr = drv.Row as DataSet1.K4EE_Component_Reel_RegExRuleRow;
|
||||
}
|
||||
|
||||
private void toolStripButton2_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
DataSet1 ds1 = new DataSet1();
|
||||
this.ta.FillAll(ds1.K4EE_Component_Reel_RegExRule);
|
||||
|
||||
var path = UTIL.MakePath("Export", "BarcodeRule.xml");
|
||||
var fi = new System.IO.FileInfo(path);
|
||||
if (fi.Directory.Exists == false) fi.Directory.Create();
|
||||
ds1.K4EE_Component_Reel_RegExRule.WriteXml(path);
|
||||
UTIL.MsgI($"Export list File = {path},count={ds1.K4EE_Component_Reel_RegExRule.Count}");
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
System.Windows.Forms.MessageBox.Show(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private void btBcdTest_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
var bcd = cmbBCDTestBox.Text.Trim();
|
||||
|
||||
|
||||
//없는 문자라면 신규로 테스트한다.
|
||||
if (cmbBCDTestBox.Items.Contains(bcd) == false)
|
||||
cmbBCDTestBox.Items.Add(bcd);
|
||||
|
||||
//test
|
||||
LoadSaveBCDtestData(false);
|
||||
|
||||
var sb = new System.Text.StringBuilder();
|
||||
var idx = 0;
|
||||
foreach (DataSet1.K4EE_Component_Reel_RegExRuleRow dr in this.dataSet1.K4EE_Component_Reel_RegExRule)
|
||||
{
|
||||
var pattern = dr.Pattern;// tbPattern.Text.Trim();
|
||||
var grps = dr.Groups;// tbGroups.Text.Trim();
|
||||
|
||||
if (dr.IsEnable == false)
|
||||
{
|
||||
sb.AppendLine($"####{++idx} {dr.Description} - disble");
|
||||
continue;
|
||||
}
|
||||
|
||||
var regx = new Regex(pattern, RegexOptions.IgnoreCase, new TimeSpan(0, 0, 10));
|
||||
if (regx.IsMatch(bcd))
|
||||
{
|
||||
sb.AppendLine($"####{++idx} {dr.Description}");
|
||||
var matchs = regx.Matches(bcd);
|
||||
|
||||
foreach (System.Text.RegularExpressions.Match mat in matchs)
|
||||
{
|
||||
|
||||
var grpstr = this.tbGroups.Text.Trim().Split(',');
|
||||
foreach (var matchdata in grpstr)
|
||||
{
|
||||
var grpname = matchdata.Split('=')[0];
|
||||
var grpno = matchdata.Split('=')[1].toInt();
|
||||
if (grpno <= mat.Groups.Count)
|
||||
{
|
||||
var data = mat.Groups[grpno];
|
||||
sb.AppendLine($"{grpname}={data.Value}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendLine($"####{++idx} {dr.Description} - No Pattern\n{pattern}");
|
||||
}
|
||||
}
|
||||
|
||||
UTIL.MsgI(sb.ToString());
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void cmbModelList_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
var title = cmbModelList.Text;
|
||||
if (title.isEmpty()) title = PUB.Result.vModel.Title;
|
||||
RefreshList(title);
|
||||
}
|
||||
|
||||
private string ChoiceModelName()
|
||||
{
|
||||
var cmb = new ComboBox();
|
||||
cmb.Items.Clear();
|
||||
foreach (var dr in PUB.mdm.dataSet.OPModel.OrderBy(t => t.Title))
|
||||
cmb.Items.Add(dr.Title);
|
||||
|
||||
using (var f = new Form())
|
||||
{
|
||||
var lb = new Label()
|
||||
{
|
||||
Text = "Select Model",
|
||||
Dock = DockStyle.Top
|
||||
};
|
||||
var pan = new Panel()
|
||||
{
|
||||
Dock = DockStyle.Bottom,
|
||||
Height = 50,
|
||||
};
|
||||
var butok = new Button
|
||||
{
|
||||
Text = "OK",
|
||||
Width = 160,
|
||||
Dock = DockStyle.Fill,
|
||||
};
|
||||
var butng = new Button
|
||||
{
|
||||
Text = "Cancel",
|
||||
Width = 160,
|
||||
Dock = DockStyle.Right,
|
||||
};
|
||||
butok.Click += (s1, e1) =>
|
||||
{
|
||||
f.DialogResult = DialogResult.OK;
|
||||
};
|
||||
butng.Click += (s1, e1) =>
|
||||
{
|
||||
f.DialogResult = DialogResult.Cancel;
|
||||
};
|
||||
|
||||
pan.Controls.Add(butok);
|
||||
pan.Controls.Add(butng);
|
||||
|
||||
cmb.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
cmb.Dock = DockStyle.Top;
|
||||
f.StartPosition = FormStartPosition.CenterScreen;
|
||||
f.Width = 320;
|
||||
f.Height = 160;
|
||||
f.Text = "Select Model";
|
||||
f.MinimizeBox = false;
|
||||
f.MaximizeBox = false;
|
||||
f.Padding = new Padding(10);
|
||||
f.Controls.Add(pan);
|
||||
f.Controls.Add(cmb);
|
||||
f.Controls.Add(lb);
|
||||
|
||||
if (f.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
return cmb.Text;
|
||||
}
|
||||
else return string.Empty;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void btCopy_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
var drv = this.bs.Current as DataRowView;
|
||||
if (drv == null)
|
||||
{
|
||||
UTIL.MsgE("Please select an item to copy.");
|
||||
return;
|
||||
}
|
||||
|
||||
var sourceRow = drv.Row as DataSet1.K4EE_Component_Reel_RegExRuleRow;
|
||||
if (sourceRow == null) return;
|
||||
|
||||
var inputDialog = ChoiceModelName(); // AR.UTIL.InputBox("Input ModelName", sourceRow.IsCustCodeNull() ? "" : sourceRow.CustCode);
|
||||
if (inputDialog.isEmpty()) return;
|
||||
var newModelName = inputDialog;
|
||||
|
||||
//var inputDialog2 = AR.UTIL.InputBox("Input Description", sourceRow.IsDescriptionNull() ? "" : sourceRow.Description);
|
||||
//if (inputDialog2.Item1 == false) return;
|
||||
var newDescription = sourceRow.IsDescriptionNull() ? "" : sourceRow.Description;// inputDialog2.Item2;
|
||||
|
||||
var tacheck = new DataSet1TableAdapters.K4EE_Component_Reel_RegExRuleTableAdapter();
|
||||
if (tacheck.CheckExsist(newModelName, newDescription) > 0)
|
||||
{
|
||||
UTIL.MsgE("Name already exists");
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.dataSet1.K4EE_Component_Reel_RegExRule.Where(t => t.CustCode.Equals(newModelName) && t.Description.Equals(newDescription)).Count() > 0)
|
||||
{
|
||||
UTIL.MsgE("Name already exists");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var newRow = this.dataSet1.K4EE_Component_Reel_RegExRule.NewK4EE_Component_Reel_RegExRuleRow();
|
||||
|
||||
newRow.CustCode = newModelName;
|
||||
newRow.Pattern = sourceRow.IsPatternNull() ? "" : sourceRow.Pattern;
|
||||
newRow.Groups = sourceRow.IsGroupsNull() ? "" : sourceRow.Groups;
|
||||
newRow.Description = newDescription;
|
||||
newRow.IsEnable = sourceRow.IsEnable;
|
||||
newRow.IsIgnore = sourceRow.IsIgnore;
|
||||
newRow.Seq = sourceRow.Seq;
|
||||
newRow.Symbol = sourceRow.Symbol;
|
||||
newRow.IsTrust = sourceRow.IsTrust;
|
||||
newRow.IsAmkStd = sourceRow.IsAmkStd;
|
||||
this.dataSet1.K4EE_Component_Reel_RegExRule.AddK4EE_Component_Reel_RegExRuleRow(newRow);
|
||||
|
||||
this.bs.MoveLast();
|
||||
UTIL.MsgI($"[{newModelName}-{newDescription}] Rule has been copied successfully.");
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
UTIL.MsgE($"Error occurred during copying: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user