나는 dcm4che2 라이브러리로 프로그래밍하는 초보자이며 Query/Retrieve Level을 Patient/Series/Image로 설정하여 PACS 서버를 쿼리하는 간단한 프로그램을 작성하고 있습니다.
코드는 매우 간단하고, 어떤 경우에는, 그것을 잘 작동합니다 : 어떤 경우에는 그러나dcm4che : DIMSE RSP의 가끔 예기치 않은 메시지 ID가 있습니까?
dcmqr.setCalledAET("AET_REMOTE", true);
dcmqr.setRemoteHost("aa.bb.cc.dd");
dcmqr.setRemotePort(xxxx);
dcmqr.getKeys();
dcmqr.setDateTimeMatching(true);
dcmqr.setCFind(true);
dcmqr.setCGet(false);
dcmqr.configureTransferCapability(true);
dcmqr.setQueryLevel(DcmQR.QueryRetrieveLevel.IMAGE);
dcmqr.addMatchingKey(new int[]{Tag.PatientName},sPatientName);
dcmqr.addMatchingKey(new int[]{Tag.Modality},sModality);
dcmqr.addMatchingKey(new int[]{Tag.AccessionNumber},sAccession);
dcmqr.addMatchingKey(new int[]{Tag.SeriesNumber},sSeriesNumber);
dcmqr.addReturnKey(new int[]{Tag.SeriesDescription});
dcmqr.addReturnKey(new int[]{Tag.StudyDescription});
dcmqr.addReturnKey(new int[]{Tag.PatientBirthDate});
dcmqr.addReturnKey(new int[]{Tag.PatientSex});
List<DicomObject> result = null;
try{
dcmqr.start();
dcmqr.open();
result = dcmqr.query();
dcmqr.stop();
dcmqr.close();
}
catch(Exception e){
...
}
(내가 설정 때마다 쿼리 /에가 "이미지"레벨을 검색) (쿼리() 메소드가 실패
...
[main] INFO org.dcm4che2.net.PDUEncoder - AET_REMOTE(1) << 3:C-FIND-RQ[pcid=1, prior=0
cuid=xyz/Study Root Query/Retrieve Information Model - FIND
ts=xyz/Implicit VR Little Endian]
[AE_TITLE_X] INFO org.dcm4che2.net.PDUDecoder - AET_REMOTE(1) >> 2:C-FIND-RSP[
pcid=1, status=0H cuid=xyz/Study Root Query/Retrieve Information Model - FIND]
[main] INFO org.dcm4che2.tool.dcmqr.DcmQR - Send Query Request #3/15 using .../Study Root Query/Retrieve Information Model - FIND:
(0008,0052) CS #6 [IMAGE] Query/Retrieve Level
(0008,0060) CS #2 [CT] Modality
(0010,0010) PN #12 [xxx^yyyy] PatientÆs Name
(0020,000D) UI #42 [x.y.z.zyx...] Study Instance UID
(0020,000E) UI #56 [y.x.z.zyx...] Series Instance UID
[AE_TITLE_X] WARN org.dcm4che2.net.Association - unexpected message ID in DIMSE RSP:
(0000,0002) UI #28 [x.y.z.zax...] Affected SOP Class UID
(0000,0100) US #2 [32800] Command Field
(0000,0120) US #2 [2] Message ID Being Responded To
(0000,0800) US #2 [257] Command Data Set Type
(0000,0900) US #2 [0] Status
[AE_TITLE_X] INFO org.dcm4che2.net.PDUEncoder - AET_REMOTE(1) << A-ABORT[source=0, reason=0]
[AE_TITLE_X] INFO org.dcm4che2.net.Association - AET_REMOTE(1): close Socket[addr=/aa.bb.cc.dd,port=xxx,localport=yyy]
[main] INFO org.dcm4che2.net.PDUEncoder - AET_REMOTE(1) << 4:C-FIND-RQ[pcid=1, prior=0
cuid=.../Study Root Query/Retrieve Information Model - FIND
ts=.../Implicit VR Little Endian]
[main] WARN org.dcm4che2.net.Association - unable to send P-DATA-TF in state: Sta1
사실, 나는이 오류의 의미와 해결책을 파악 않는 것을 이해할 수 없다 : 아래의보고 "예상치 못한 DIMSE RSP의 메시지 ID")와 A-중단 명령이 발생합니다. 나는 그것이 통신 문제라고 생각한다. 누군가 나를 도울 수 있니?
감사합니다.
답장을 보내 주셔서 감사합니다. 나는 이해할 수 없다. Image 레벨에서 쿼리를 한 번만 만들고 있는데, 특정 시리즈 인스턴스 UID에 대한 이미지 목록을 얻으려고했다. 다음 RSP 메시지를 제대로 잡으려면 청취자 대기 시간을 늘려야합니까? 반대로, 예외를 잡아 더 나은 방법으로 관리 할 수 있습니까? – Michele
이전 쿼리 # 2 (AET_REMOTE (1) >> 2)에서 응답을 받기 전에 쿼리 # 3 (AET_REMOTE (1) << 3)을 작성하는 것처럼 로그에서 보입니다. 결과적으로 청취자는 이제 2가 아닌 메시지 ID 3을 기다리게됩니다. DEBUG 로그를 켜고 타이밍과 사용중인 Association을 조사해야 할 수 있습니다. – cneller
안녕하세요, 감사합니다. 나는 SeriesInstanceUID가 Composite 객체 인스턴스 레벨에서 키들 사이에리스트되지 않는다는 것을 간과했다. SOPInstanceUID로 전환하는 것을 선호합니다. 문제가 해결되었습니다. – Michele