2026-06-05 13:44:39 +09:00

409 lines
16 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AuroraHeightSensor.Keyence
{
enum e_HS_ERROR_CODE
{
ERROR_DIFFERENT_RETURN_COUNT = -3, // add new error
ERROR_DIFFERENT_MAIN_COMMAND = -2, // add new error
ERROR_NO = -1,
ERROR_COMMAND = 0,
ERROR_STATUS = 1,
ERROR_COMMAND_LENGTH = 20,
ERROR_PARAMETER_COUNT = 21,
ERROR_INDIVIDUAL_PARAMETER = 22,
ERROR_TIMEOVER = 88,
ERROR_OTHER = 99
};
enum e_HS_OUTPUT
{
CH_OUT_DUAL = 0,
CH_OUT1 = 1,
CH_OUT2 = 2
};
enum e_HS_HEAD
{
HEAD_A = 1,
HEAD_B = 2
};
enum e_HS_MEASUREMENT_MODE
{
NORMAL = 0,
TRANSLUCENT = 1,
TRANSPARENT = 2,
TRANSPARENT2 = 3,
MULTIREFRECTIVE = 4
};
enum e_HS_FILTER_MODE
{
FILTER_AVERAGE = 0,
FILTER_LOWPASS = 1,
FILTER_HIGHPASS = 2
}
public partial class HeightSensorLKG85 {
private bool CMD_MeasureControl_GetMeasureValue(int channel, ref double value) {
if (!CheckRange(channel, (int)e_HS_OUTPUT.CH_OUT1, (int)e_HS_OUTPUT.CH_OUT2)) {
return false;
}
string strSendCommand = string.Empty;
strSendCommand = string.Format("M{0}", (int)(e_HS_OUTPUT)channel);
string strReceiveValue = string.Empty;
if (ReceiveValue(strSendCommand, ref strReceiveValue) == false) {
return false;
}
// receive
// TODO : receive value 에 'CR' 이 붙어 있을 수 있음. check 필요
var splitedStr = strReceiveValue.Split(',');
if (splitedStr.Length < 2) {
return false;
}
if (GetFormatMeasureData(splitedStr[1], ref value) == false) {
return false;
}
return true;
}
// BOOL CHeightSensorCom::cmdGetMeasureValue(int iCH,double& dValue)
private bool CMD_MeasureControl_GetMeasureValueDual(ref double value1, ref double value2) {
string strSendCommand = string.Empty;
strSendCommand = string.Format("M{0}", (int)e_HS_OUTPUT.CH_OUT_DUAL);
string strReceiveValue = string.Empty;
if (ReceiveValue(strSendCommand, ref strReceiveValue) == false) {
return false;
}
// receive
// TODO : receive value 에 'CR' 이 붙어 있을 수 있음. check 필요
var splitedStr = strReceiveValue.Split(',');
if (splitedStr.Length < 3) {
return false;
}
if (GetFormatMeasureData(splitedStr[1], ref value1) == false) {
return false;
}
if (GetFormatMeasureData(splitedStr[2], ref value2) == false) {
return false;
}
return true;
}
// BOOL CHeightSensorCom::cmdSetAutoZeroOn(int iCH,BOOL bOn)
private bool CMD_MeasureControl_SetAutoZero(int channel, bool flagOn) {
if (!CheckRange(channel, (int)e_HS_OUTPUT.CH_OUT_DUAL, (int)e_HS_OUTPUT.CH_OUT2)) {
return false;
}
string strSendCommand = string.Empty;
if (flagOn == true) {
strSendCommand = string.Format("V{0}", channel);
} else {
strSendCommand = string.Format("W{0}", channel);
}
return SendCommand(strSendCommand);
}
// BOOL CHeightSensorCom::cmdSetTimingOn(int iCH,BOOL bOn)
private bool CMD_MeasureControl_SetTiming(int channel, bool flagOn) {
if (!CheckRange(channel, (int)e_HS_OUTPUT.CH_OUT_DUAL, (int)e_HS_OUTPUT.CH_OUT2)) {
return false;
}
string strSendCommand = string.Empty;
strSendCommand = string.Format("T{0},{1}", flagOn ? 1 : 0, channel);
return SendCommand(strSendCommand);
}
// BOOL CHeightSensorCom::cmdSetReset(int iCH)
bool CMD_MeasureControl_SetReset(int channel) {
if (!CheckRange(channel, (int)e_HS_OUTPUT.CH_OUT_DUAL, (int)e_HS_OUTPUT.CH_OUT2)) {
return false;
}
string strSendCommand = string.Empty;
strSendCommand = string.Format("VR,{0}", channel);
return SendCommand(strSendCommand);
}
// BOOL CHeightSensorCom::cmdSetPanelLockOn(BOOL bOn)
private bool CMD_MeasureControl_SetPanelLock(bool flagOn) {
string strSendCommand = string.Empty;
strSendCommand = string.Format("KL,{0}", flagOn ? 1 : 0);
return SendCommand(strSendCommand);
}
// BOOL CHeightSensorCom::cmdSetDisplayPanel(int iCH)
bool CMD_SettingChange_SetDisplayPanel(int channel) {
if (!CheckRange(channel, (int)e_HS_OUTPUT.CH_OUT_DUAL, (int)e_HS_OUTPUT.CH_OUT2)) {
return false;
}
string strSendCommand = string.Empty;
strSendCommand = string.Format("DC,{0}", channel);
return SendCommand(strSendCommand);
}
// limit setting, tolerance setting
// BOOL CHeightSensorCom::cmdSetLimit(int iCH,double dUpperLimit,double dLowLimit,double dHysteresis)
private bool CMD_SettingChange_SetLimit(int channel, double maxLimit, double minLimit, double hysteresis) {
if (!CheckRange(channel, (int)e_HS_OUTPUT.CH_OUT1, (int)e_HS_OUTPUT.CH_OUT2)) {
return false;
}
string strSendCommand = string.Empty;
strSendCommand = string.Format("SW,LM,{0},{1}{2},{3}{4},0{5}{6}", channel
, GetSign(maxLimit), GetMeasureDoubleFormat(maxLimit, 6)
, GetSign(minLimit), GetMeasureDoubleFormat(minLimit, 6)
, GetSign(hysteresis), GetMeasureDoubleFormat(hysteresis, 5));
return SendCommand(strSendCommand);
}
// BOOL CHeightSensorCom::cmdSetABLE(int iHead,BOOL bAutoMode)
private bool CMD_SettingChange_SetHead_ABLE(int head, bool flagAutoMode) {
if (!CheckRange(head, (int)e_HS_HEAD.HEAD_A, (int)e_HS_HEAD.HEAD_B)) {
return false;
}
string strSendCommand = string.Empty;
strSendCommand = string.Format("SW,HA,M,{0},{1}", head, flagAutoMode ? 0 : 1);
return SendCommand(strSendCommand);
}
// BOOL CHeightSensorCom::cmdSetABLEControlRange(int iHead,int iUpperLimit,int iLowLimit)
private bool CMD_SettingChange_SetHead_ABLEControlRange(int head, int minLimit, int maxLimit) {
if (!CheckRange(head, (int)e_HS_HEAD.HEAD_A, (int)e_HS_HEAD.HEAD_B)) {
return false;
}
if (!CheckRange(minLimit, 1, 99)) {
return false;
}
if (!CheckRange(maxLimit, 1, 99)) {
return false;
}
string strSendCommand = string.Empty;
strSendCommand = string.Format("SW,HA,R,{0},{1},{2}", head
, GetMeasureDoubleFormat(maxLimit, 2), GetMeasureDoubleFormat(minLimit, 2));
return SendCommand(strSendCommand);
}
// BOOL CHeightSensorCom::cmdSetMeasurementMode(int iHead,int iMode)
private bool CMD_SettingChange_SetHead_SetMeasurementMode(int head, int mode) {
if (!CheckRange(head, (int)e_HS_HEAD.HEAD_A, (int)e_HS_HEAD.HEAD_B)) {
return false;
}
if (!CheckRange(mode, (int)e_HS_MEASUREMENT_MODE.NORMAL, (int)e_HS_MEASUREMENT_MODE.MULTIREFRECTIVE)) {
return false;
}
string strSendCommand = string.Empty;
strSendCommand = string.Format("SW,HB,{0},{1}", head, mode);
return SendCommand(strSendCommand);
}
// BOOL CHeightSensorCom::cmdSetNumberOfAlarmProcessing(int iHead,int iTime)
private bool CMD_SettingChange_SetHead_SetAlarmProcessingNumber(int head, int time) {
if (!CheckRange(head, (int)e_HS_HEAD.HEAD_A, (int)e_HS_HEAD.HEAD_B)) {
return false;
}
if (!CheckRange(time, 0, 999)) {
return false;
}
string strSendCommand = string.Empty;
strSendCommand = string.Format("SW,HC,N,{0},{1}", head, GetMeasureDoubleFormat(time, 3));
return SendCommand(strSendCommand);
}
// BOOL CHeightSensorCom::cmdSetAlarmLevel(int iHead,int iLevel)
private bool CMD_SettingChange_SetHead_SetAlarmLevel(int head, int level) {
if (!CheckRange(head, (int)e_HS_HEAD.HEAD_A, (int)e_HS_HEAD.HEAD_B)) {
return false;
}
if (!CheckRange(level, 0, 9)) {
return false;
}
string strSendCommand = string.Empty;
strSendCommand = string.Format("SW,HC,L,{0},{1}", head, level);
return SendCommand(strSendCommand);
}
// BOOL CHeightSensorCom::cmdSetABLECalibrationStart(int iHead)
private bool CMD_SettingChange_SetHead_ABLECalibrationStart(int head) {
if (!CheckRange(head, (int)e_HS_HEAD.HEAD_A, (int)e_HS_HEAD.HEAD_B)) {
return false;
}
string strSendCommand = string.Empty;
strSendCommand = string.Format("SW,HD,S,{0}", head);
return SendCommand(strSendCommand);
}
// BOOL CHeightSensorCom::cmdSetABLECalibrationFinish()
private bool CMD_SettingChange_SetHead_ABLECalibrationFinish() {
string strSendCommand = string.Empty;
strSendCommand = string.Format("SW,HD,P");
return SendCommand(strSendCommand);
}
// BOOL CHeightSensorCom::cmdSetABLECalibrationStop()
private bool CMD_SettingChange_SetHead_ABLECalibrationStop() {
string strSendCommand = string.Empty;
strSendCommand = string.Format("SW,HD,C");
return SendCommand(strSendCommand);
}
// bDiffuse reflection = 0
// Mirror reflection = 1
// BOOL CHeightSensorCom::cmdSetMountingMode(int iHead,BOOL bDiffuse)
private bool CMD_SettingChange_SetHead_ABLECalibrationStop(int head, bool flagDiffuseReflection) {
if (!CheckRange(head, (int)e_HS_HEAD.HEAD_A, (int)e_HS_HEAD.HEAD_B)) {
return false;
}
string strSendCommand = string.Empty;
strSendCommand = string.Format("SW,HE,{0},{1}", head, flagDiffuseReflection ? 0 : 1);
return SendCommand(strSendCommand);
}
// BOOL CHeightSensorCom::cmdSetCalcurationMethod(int iCalMethod,int iWaveForm)
private bool CMD_SettingChange_SetOut_SetCalcurationMethod(int channel, int calcurationMethod, int waveForm) {
// Not Implement Yet
return false;
}
// BOOL CHeightSensorCom::cmdSetScaling(int iHead,int iCH,double dMeasVal1,double dDispVal1,double dMeasVal2,double dDispVal2)
// TODO : command 의 설정값 format 은 spec 문서에 맞게 변경함. (확인 필요)
private bool CMD_SettingChange_SetOut_SetScaling(int head, int channel
, double measurementValue1, double displayValue1
, double measurementValue2, double displayValue2) {
if (!CheckRange(head, (int)e_HS_HEAD.HEAD_A, (int)e_HS_HEAD.HEAD_B)) {
return false;
}
if (!CheckRange(channel, (int)e_HS_OUTPUT.CH_OUT1, (int)e_HS_OUTPUT.CH_OUT2)) {
return false;
}
//1 : Head A of OUT1
//2 : Head B of OUT1
//3 : Head A of OUT2
//4 : Head B of OUT2
int requestChannelHead = (channel == (int)e_HS_OUTPUT.CH_OUT1) ? head : (head + (int)e_HS_OUTPUT.CH_OUT2);
string strSendCommand = string.Empty;
strSendCommand = string.Format("SW,OB,{0},{1}{2},{3}{4},{5}{6},{7}{8}", requestChannelHead
, GetSign(measurementValue1), GetMeasureDoubleFormat(measurementValue1, 6)
, GetSign(displayValue1), GetMeasureDoubleFormat(displayValue1, 6)
, GetSign(measurementValue2), GetMeasureDoubleFormat(measurementValue2, 6)
, GetSign(displayValue2), GetMeasureDoubleFormat(displayValue2, 6));
return SendCommand(strSendCommand);
}
// BOOL CHeightSensorCom::cmdSetAnalogOutputScaling(int iCH,double dDispVal1,double dOutputVal1,double dDispVal2,double dOutputVal2)
// TODO : command 의 설정값 format 은 spec 문서에 맞게 변경함. (확인 필요)
private bool CMD_SettingChange_SetOut_SetScaling(int channel, double measurementValue1, double displayValue1
, double measurementValue2, double displayValue2) {
if (!CheckRange(channel, (int)e_HS_OUTPUT.CH_OUT1, (int)e_HS_OUTPUT.CH_OUT2)) {
return false;
}
string strSendCommand = string.Empty;
strSendCommand = string.Format("SW,OH,{0},{1}{2},{3}{4},{5}{6},{7}{8}", channel
, GetSign(measurementValue1), GetMeasureDoubleFormat(measurementValue1 * 1000, 6)
, GetSign(displayValue1), GetMeasureDoubleFormat(displayValue1 * 1000, 6)
, GetSign(measurementValue2), GetMeasureDoubleFormat(measurementValue2 * 1000, 6)
, GetSign(displayValue2), GetMeasureDoubleFormat(displayValue2 * 1000, 6));
return SendCommand(strSendCommand);
}
//Number of times of averaging , Cutoff frequency
//0 : 1 times 0 : 1000Hz
//1 : 4 times 1 : 300Hz
//2 : 16 times 2 : 100Hz
//3 : 64 times 3 : 30Hz
//4 : 256 times 4 : 10Hz
//5 : 1024 times 5 : 3Hz
//6 : 4096 times 6 : 1Hz
//7 : 16384 times 7 : 0.3Hz
//8 : 65536 times 8 : 0.1Hz
//9 : 262144 times
// BOOL CHeightSensorCom::cmdSetFilter(int iCH,int iFilterMode,int iFilterVal)
private bool CMD_SettingChange_SetOut_SetFilter(int channel, int filterMode, int filterFrequency) {
if (!CheckRange(channel, (int)e_HS_OUTPUT.CH_OUT1, (int)e_HS_OUTPUT.CH_OUT2)) {
return false;
}
if (!CheckRange(filterMode, (int)e_HS_FILTER_MODE.FILTER_AVERAGE, (int)e_HS_FILTER_MODE.FILTER_HIGHPASS)) {
return false;
}
if (!CheckRange(filterFrequency, 0, 9)) {
return false;
}
string strSendCommand = string.Empty;
strSendCommand = string.Format("SW,OC,{0},{1},{2}", channel, filterMode, filterFrequency);
return SendCommand(strSendCommand);
}
private bool CMD_SettingChange_SetOut_SetTriggerMode(int channel, int triggerMode) {
if (!CheckRange(channel, (int)e_HS_OUTPUT.CH_OUT1, (int)e_HS_OUTPUT.CH_OUT2)) {
return false;
}
if (!CheckRange(triggerMode, 0, 1)) {
return false;
}
string strSendCommand = string.Empty;
strSendCommand = string.Format("SW,OE,M,{0},{1}", channel, triggerMode);
return SendCommand(strSendCommand);
}
// BOOL CHeightSensorCom::cmdSetOffset(int iCH,double dOffset)
private bool CMD_SettingChange_SetOut_SetOffset(int channel, double value) {
if (!CheckRange(channel, (int)e_HS_OUTPUT.CH_OUT1, (int)e_HS_OUTPUT.CH_OUT2)) {
return false;
}
string strSendCommand = string.Empty;
strSendCommand = string.Format("SW,OF,{0},{1}{2}", channel, GetSign(value), GetMeasureDoubleFormat(value, 6));
return SendCommand(strSendCommand);
}
}
}