2026-02-13 20:36:46 +09:00

133 lines
9.1 KiB
C#

using Aurora.Util.HislogPlus;
using AuroraPLC;
using Hermes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WeldingCommon.Devices;
namespace ILSOS_CCW_H52A.Device
{
partial class PLCControllerCCWH52A
{
public (int err, bool data) ReadBit(eBitInput inputAddr, ePLCDevice device = ePLCDevice.B, bool isInput = true) => base.ReadBit((int)inputAddr, device, isInput);
public int WriteBit(eBitOutput outputAddr, bool onOff, ePLCDevice device = ePLCDevice.B, bool isOutput = true) => base.WriteBit((int)outputAddr, onOff, device, isOutput);
public (int err, short data) ReadWord(eWordInput inputAddr, ePLCDevice device = ePLCDevice.W, bool isInput = true) => base.ReadWord((int)inputAddr, device, isInput);
public int WriteWord(eWordOutput outputAddr, short shData, ePLCDevice device = ePLCDevice.W, bool isOutput = true) => base.WriteWord((int)outputAddr, shData, device, isOutput);
public (int err, int data) ReadDWord(eWordInput inputAddr, ePLCDevice device = ePLCDevice.W, bool isInput = true) => base.ReadDWord((int)inputAddr, device, isInput);
public int WriteDWord(eWordOutput outputAddr, int iVal, ePLCDevice device = ePLCDevice.W, bool isOutput = true) => base.WriteDWord((int)outputAddr, iVal, device, isOutput);
public (int err, short[] datas) ReadWords(eWordInput startAddress, eWordInput endAddress, ePLCDevice device = ePLCDevice.W, bool isInput = true) => base.ReadWordBlock((int)startAddress, endAddress - startAddress + 1, device, isInput);
public int WriteWords(eWordOutput startAddress, eWordOutput endAddress, short[] data, ePLCDevice device = ePLCDevice.W, bool isOutput = true) => base.WriteWordBlock((int)startAddress, endAddress - startAddress, data, device, isOutput);
public string ReadASCII(eWordInput start, eWordInput end)
{
StringBuilder sb = new StringBuilder();
var words = ReadWords(start, end);
foreach (var word in words.datas)
sb.Append(Conv_ReadData(PLCBase.eDataType.Type_Ascii, word, 0, false, false));
return sb.ToString();
}
public override void MappingPLCAddr()
{
PLC_AUTO_REQAddr = (int)eBitInput.PLC_AUTO_REQ;
PLC_MANUAL_REQAddr = (int)eBitInput.PLC_MANUAL_REQ;
PLC_RECIPE_CHANGE_REQAddr = (int)eBitInput.PLC_RECIPE_CHANGE_REQ;
PLC_RECIPE_CHANGE_COMPLETE_ARKAddr = (int)eBitInput.PLC_RECIPE_CHANGE_COMP_ARK;
PLC_RECIPE_NOAddr = (int)eWordInput.PLC_RECIPE_NO;
PLC_LIVE_STATUSAddr = (int)eBitInput.PLC_LIVE_STATUS;
PLC_EMO_STATUSAddr = (int)eBitInput.PLC_EMO_STATUS;
PLC_USE_DISPLACEMENT_SENSORAddr = (int)eBitInput.PLC_USE_DISPLACEMENT_SENSOR; //용접 변위센서 사용
PLC_STAGE_MOVINGAddr = (int)eBitInput.PLC_STAGE_MOVING; //Rotary Stage가 움직이고 있을 때 On
PLC_USE_WELD_JIG_1Addr = (int)eBitInput.PLC_USE_WELD_JIG_1; //지그 1번 용접수행 여부
PLC_USE_WELD_JIG_2Addr = (int)eBitInput.PLC_USE_WELD_JIG_2; //지그 2번 용접수행 여부
PLC_USE_WELD_JIG_3Addr = (int)eBitInput.PLC_USE_WELD_JIG_3; //지그 3번 용접수행 여부
PLC_USE_WELD_JIG_4Addr = (int)eBitInput.PLC_USE_WELD_JIG_4; //지그 4번 용접수행 여부
PLC_USE_WELD_JIG_5Addr = (int)eBitInput.PLC_USE_WELD_JIG_5; //지그 5번 용접수행 여부
PLC_USE_WELD_JIG_6Addr = (int)eBitInput.PLC_USE_WELD_JIG_6; //지그 6번 용접수행 여부
PLC_USE_WELD_JIG_7Addr = (int)eBitInput.PLC_USE_WELD_JIG_7; //지그 7번 용접수행 여부
PLC_USE_WELD_JIG_8Addr = (int)eBitInput.PLC_USE_WELD_JIG_8; //지그 8번 용접수행 여부
PLC_USE_WELD_JIG_9Addr = (int)eBitInput.PLC_USE_WELD_JIG_9; //지그 9번 용접수행 여부
PLC_USE_WELD_JIG_10Addr = (int)eBitInput.PLC_USE_WELD_JIG_10; //지그 10번 용접수행 여부
PLC_USE_WELD_JIG_11Addr = (int)eBitInput.PLC_USE_WELD_JIG_11; //지그 11번 용접수행 여부
PLC_USE_WELD_JIG_12Addr = (int)eBitInput.PLC_USE_WELD_JIG_12; //지그 12번 용접수행 여부
PLC_USE_WELD_JIG_13Addr = (int)eBitInput.PLC_USE_WELD_JIG_13; //지그 13번 용접수행 여부
PLC_USE_WELD_JIG_14Addr = (int)eBitInput.PLC_USE_WELD_JIG_14; //지그 14번 용접수행 여부
PLC_USE_WELD_JIG_15Addr = (int)eBitInput.PLC_USE_WELD_JIG_15; //지그 15번 용접수행 여부
PLC_USE_WELD_JIG_16Addr = (int)eBitInput.PLC_USE_WELD_JIG_16; //지그 16번 용접수행 여부
PC_LIVE_STATUSAddr = (int)eBitOutput.PC_LIVE_STATUS;
PC_AUTO_STATUSAddr = (int)eBitOutput.PC_AUTO_STATUS; //PC 자동운전 상태
PC_AUTO_COMPLETEAddr = (int)eBitOutput.PC_AUTO_COMPLETE; //PC 자동운전 변경 완료
PC_MANUAL_COMPLETEAddr = (int)eBitOutput.PC_MANUAL_COMPLETE; //PC 수동운전 변경 완료
PC_LIGHT_ALARM_STATUSAddr = (int)eBitOutput.PC_LIGHT_ALARM_STATUS; //PC 경알람 상태
PC_HEAVY_ALARM_STATUSAddr = (int)eBitOutput.PC_HEAVY_ALARM_STATUS; //PC 중알람 상태
PC_RECIPE_CHANGE_COMPLETEAddr = (int)eBitOutput.PC_RECIPE_CHANGE_COMPLETE; //PC 레시피 변경 완료
PC_LASER_READYAddr = (int)eBitOutput.PC_LASER_READY; //PC Laser Ready 상태
PC_LASER_ONAddr = (int)eBitOutput.PC_LASER_ON;
PC_WELD_COMPLETE_1Addr = (int)eBitOutput.PC_WELD_COMPLETE_1; //지그 1번 용접완료 여부
PC_WELD_COMPLETE_2Addr = (int)eBitOutput.PC_WELD_COMPLETE_2; //지그 2번 용접완료 여부
PC_WELD_COMPLETE_3ADdr = (int)eBitOutput.PC_WELD_COMPLETE_3; //지그 3번 용접완료 여부
PC_WELD_COMPLETE_4Addr = (int)eBitOutput.PC_WELD_COMPLETE_4; //지그 4번 용접완료 여부
PC_WELD_COMPLETE_5Addr = (int)eBitOutput.PC_WELD_COMPLETE_5; //지그 5번 용접완료 여부
PC_WELD_COMPLETE_6Addr = (int)eBitOutput.PC_WELD_COMPLETE_6; //지그 6번 용접완료 여부
PC_WELD_COMPLETE_7Addr = (int)eBitOutput.PC_WELD_COMPLETE_7; //지그 7번 용접완료 여부
PC_WELD_COMPLETE_8Addr = (int)eBitOutput.PC_WELD_COMPLETE_8; //지그 8번 용접완료 여부
PC_WELD_COMPLETE_9Addr = (int)eBitOutput.PC_WELD_COMPLETE_9; //지그 9번 용접완료 여부
PC_WELD_COMPLETE_10Addr = (int)eBitOutput.PC_WELD_COMPLETE_10; //지그 10번 용접완료 여부
PC_WELD_COMPLETE_11Addr = (int)eBitOutput.PC_WELD_COMPLETE_11; //지그 11번 용접완료 여부
PC_WELD_COMPLETE_12Addr = (int)eBitOutput.PC_WELD_COMPLETE_12; //지그 12번 용접완료 여부
PC_WELD_COMPLETE_13Addr = (int)eBitOutput.PC_WELD_COMPLETE_13; //지그 13번 용접완료 여부
PC_WELD_COMPLETE_14Addr = (int)eBitOutput.PC_WELD_COMPLETE_14; //지그 14번 용접완료 여부
PC_WELD_COMPLETE_15Addr = (int)eBitOutput.PC_WELD_COMPLETE_15; //지그 15번 용접완료 여부
PC_WELD_COMPLETE_16Addr = (int)eBitOutput.PC_WELD_COMPLETE_16; //지그 16번 용접완료 여부
}
public double ReadDWordByDivision(eWordInput input)
{
var result = ReadDWord((int)input);
if (result.err != E1.OK) {
// 로그 에러 넣기
//Log.E("Error While Reading Double Word Division {0}", result.err.ToString());
}
double divisionIndex = ConvertTo2WordDivisionIndex(input.ToString());
return (result.data / (double)divisionIndex);
}
public int ConvertTo2WordDivisionIndex(string id)
{
if (id.Contains("RECIPE") || id.Contains("RAMPING_START_POWER") || id.Contains("RAMPING_START_A_POWER") || id.Contains("RAMPING_START_B_POWER") || id.Contains("RAMPING_END_POWER") || id.Contains("DELAY"))
return 1;
else if (id.Contains("LASER_POWER") || id.Contains("SPEED"))
return 10;
else
return 1000;
}
public int ToggleBit(eBitInput readBit, eBitOutput writeBit)
{
int ret = 0;
if (ReadBit(readBit).data)
ret = WriteBit(writeBit, false);
else
ret = WriteBit(writeBit, true);
Log.I($"{Enum.GetName(typeof(eBitOutput), writeBit)} -> {!ReadBit(readBit).data}");
return ret;
}
}
}