차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 다음 판 | 이전 판 | ||
|
platform:ethercat:100_api:20_eg:cmp_one [2020/05/12 14:52] winoars 만듦 |
platform:ethercat:100_api:20_eg:cmp_one [2024/07/08 18:23] (현재) |
||
|---|---|---|---|
| 줄 12: | 줄 12: | ||
| using ec = ComiLib.EtherCAT.SafeNativeMethods; | using ec = ComiLib.EtherCAT.SafeNativeMethods; | ||
| + | |||
| + | uint logBitAddr = 0; // 출력 채널에 대한 LogicBitAddress | ||
| + | int method = 0; // CMP 출력 조건 | ||
| + | int cntrType = 0; // CMP 위치 조건. Command / Feedback | ||
| + | int logic = 0; // CMP 출력 로직. | ||
| + | int duration = 10; // CMP 출력 유지 시간. 단위 ms. | ||
| + | |||
| + | double cmpPosition = 0; | ||
| + | static ec.CallbackFunc callBackFunc; | ||
| + | | ||
| private void btnCmpOneStart_Click(object sender, EventArgs e) | private void btnCmpOneStart_Click(object sender, EventArgs e) | ||
| { | { | ||
| - | if (lbxPosition.Items.Count == 0) | + | // 출력 환경을 설정한다. |
| - | return; | + | // CMP 출력 채널을 확인하여 LogicBitAddress로 변환 |
| + | // Local 채널도 사용 가능하지만, | ||
| + | if (usingOutputCh) // 범용 Output 채널 사용 시 | ||
| + | { | ||
| + | int ch = 0; // CMP 출력 채널 | ||
| + | logBitAddr = ec.ecdoLogBitAddr_FromGlobalChannel(netID, | ||
| + | if (errorCode != 0) | ||
| + | { | ||
| + | // 에러처리 | ||
| + | } | ||
| + | } | ||
| + | else // OnBoard(마스터 보드) DO 사용 시 | ||
| + | { | ||
| + | int ch = 0; | ||
| + | logBitAddr = ec.ecdoLogBitAddr_FromOnboardChannel(netID, | ||
| + | if (errorCode != 0) | ||
| + | { | ||
| + | // 에러처리 | ||
| + | } | ||
| + | } | ||
| - | // 출력 | + | // 이전 |
| - | SetCondition(); | + | ec.ecmSxCmpOne_ClearOutResult(netID, |
| + | if (errorCode != 0) | ||
| + | { | ||
| + | // 에러처리 | ||
| + | } | ||
| + | |||
| + | cmpCount = 0; | ||
| + | logic = 0; // CMP 출력 로직. 0 : Logic A. 1 : Logic B | ||
| + | duration = 100; // CMP 출력 유지 시간. 단위 ms. | ||
| + | |||
| + | // CMP 출력채널 정보를 | ||
| + | ec.ecmSxCmpOne_SetChannel(netID, axisID, logBitAddr, logic, duration, ref errorCode); | ||
| + | if (errorCode != 0) | ||
| + | { | ||
| + | // 에러처리 | ||
| + | } | ||
| // CMP 출력조건을 설정한다. | // CMP 출력조건을 설정한다. | ||
| 줄 74: | 줄 118: | ||
| } | } | ||
| } | } | ||
| - | |||
| - | private void SetCondition() | ||
| - | { | ||
| - | // CMP 출력 채널을 확인하여 LogicBitAddress로 변환 | ||
| - | // Local 채널도 사용 가능하지만, | ||
| - | if (usingOutputCh) // 범용 Output 채널 사용 시 | ||
| - | { | ||
| - | int ch = 0; // CMP 출력 채널 | ||
| - | logBitAddr = ec.ecdoLogBitAddr_FromGlobalChannel(netID, | ||
| - | if (errorCode != 0) | ||
| - | { | ||
| - | // 에러처리 | ||
| - | } | ||
| - | } | ||
| - | else // OnBoard(마스터 보드) DO 사용 시 | ||
| - | { | ||
| - | int ch = 0; | ||
| - | logBitAddr = ec.ecdoLogBitAddr_FromOnboardChannel(netID, | ||
| - | if (errorCode != 0) | ||
| - | { | ||
| - | // 에러처리 | ||
| - | } | ||
| - | } | ||
| - | |||
| - | // 이전 출력 결과를 초기화한다. | ||
| - | ec.ecmSxCmpOne_ClearOutResult(netID, | ||
| - | if (errorCode != 0) | ||
| - | { | ||
| - | // 에러처리 | ||
| - | } | ||
| - | |||
| - | cmpCount = 0; | ||
| - | logic = 0; // CMP 출력 로직. 0 : Logic A. 1 : Logic B | ||
| - | duration = 100; // CMP 출력 유지 시간. 단위 ms. | ||
| - | |||
| - | // CMP 출력채널 정보를 설정한다. | ||
| - | ec.ecmSxCmpOne_SetChannel(netID, | ||
| - | if (errorCode != 0) | ||
| - | { | ||
| - | // 에러처리 | ||
| - | } | ||
| - | } | ||
| - | |||
| private void btnCmpOneStop_Click(object sender, EventArgs e) | private void btnCmpOneStop_Click(object sender, EventArgs e) | ||