Python
-
[pymodbus] PLC 32bit 쓰기Python 2023. 1. 10. 21:51
PLC에게 값을 보낼때 65535 보다 큰 수를 보내야 하는 경우가 있다. 하지만 PLC registers는 기본적으로 16bit를 지원하기 때문에 1개의 메모리 주소를 가지고는 65535보다 큰 수를 보낼수는 없다. 그렇기 때문에 PLC 담당자와 소통하여 2개의 메모리 주소를 받아야 한다. 그렇다면 2개의 메모리 주소를 받았다는 가정하에 아래 간단한 코드로 값이 제대로 들어갔는지 확인해주면 된다. from pymodbus.client.sync import ModbusTcpClient ip_address = f"{PLC_IP}" class TEST(): def __init__(self): self.client = ModbusTcpClient(ip_address) self.start_mem = f"{메모리..
-
OPC 프로토콜Python 2022. 7. 15. 22:47
OPC 란? OPC(OLE for Process Control)의 약자이며 표준화된 통신 프로토콜이다. 기존 약자를 따르는 통신이 OPCDA (OPC Classic 이라고 불림) 이며, 이후 OPCUA(Open Platform Communications Unified Architecture)로 변경되었다. 최초에 OPC Classic의 개념이 나와서 윈도우 환경에서만 돌아가는 버전이 OPC-DA 라고 하며, DCOM으로 통신하면 포트도 지정되어 있고 외부에서 접속하는 설정도 까다롭다고 한다. PLC에 OPC 기능이 있다고 하면 OPC-UA가 들어간거라고 생각하면 된다. OLE - 윈도우의 각각의 객체(Object)를 응용프로그램에서 다양하게 사용할수 있는 (Object Linking & Embedding..
-
[데이터 전처리] xml 파일에서 class 변경Python 2021. 8. 26. 12:11
예제 코드 from glob import glob from xml.etree.ElementTree import parse Annotations = glob('valid/*.xml') classes = ['심','심','한','개','발','자'] for annotation in Annotations: tree = parse(annotation) xml = tree.getroot() object = xml.findall('object') for obj_idx, obj in enumerate(object): cls_name = obj.find('name').text if cls_name == 'a' or cls_name == 'b': obj.find('name').text = '심' elif cls_name..
-
[데이터 전처리] txt 파일 xml 변환(txt2xml)Python 2021. 8. 26. 11:46
예제 코드 import glob from xml.etree.ElementTree import Element, SubElement, ElementTree import shutil img_w = 960 #이미지 가로 사이즈 img_h = 540 #이미지 세로 사이즈 classes = ['개','발','바','닥'] #yolo.txt 에서는 class가 index로 되어 있기 때문에 다시 변환하기 쉽도록 class 선언 for text in glob.glob('valid/*.txt'): #glob을 통해 valid 폴더 내 txt 불러오기 img = text.replace('.txt','jpg') #xml 내 image path를 지정하기 위해 img 경로 생성 root = Element('annotation..