2013-06-05 6 views
0

OPC DA 자동화 래퍼를 사용하여 AllenBradley PLC에 연결하고 있습니다.OPC DA 워드에 비트 쓰기

이제 단어 내에 다른 비트와 독립적으로 비트를 설정해야한다는 요구 사항이 있습니다.

이 기능을 엄격하게 달성 할 수있는 방법이 있습니까?

내가 시도 두 가지 옵션은 다음과 같습니다 OPC 서버 (인 Kepware) 별도의 비트로

설정 단어.

[FULLTAGNAME].0 
[FULLTAGNAME].1 
[FULLTAGNAME].2 

그러나이 나는 많은 별도의 OPCItem이

다른 개체를 유지할 필요가 의미 : 그래서 다른 말로 나는 각각의 단어의 비트 16 개 태그를 가지고, 태그 이름은 다음과 같이 방법은 전체 단어를 읽고 BitConverter을 사용하여 비트로 변환하고 변경해야하는 비트를 변경 한 다음 보류 단어를 다시 PLC에 씁니다.

그러나 테스트 중에 스레드 1이 해당 단어를 읽을 수 있음을 알았습니다. 쓰레드 2는 워드에 쓰면서 비트 2를 변경합니다. 쓰레드 1은 비트 4를 변경하고 전체 워드를 다시 쓰고 비트 2의 변경 사항을 덮어 씁니다.

누군가가 하나의 OPCItem을 가지고 특정 비트에 쓸 수있는 방법을 알고 있습니까 ?? 아니면 특정 비트와 관련된 많은 OPCItem을 가지고 붙어 있습니까?

감사

+1

본질적으로 옵션을 배치했다고 생각합니다. 개인적으로, 비트를 단어로 묶는 것은 나쁜 습관이라고 생각합니다. 별도로 보관하십시오. 읽기 쉽고 작업하기 쉽고 디버깅하기가 쉽고 편리합니다. 그렇습니다. 더 많은 태그가 필요합니다. 처음부터 현명하게 디자인하면 프로그래밍 방식으로 태그 파일을 생성 할 수 있으므로 추가 작업이 필요 없습니다. 참조 : http://stackoverflow.com/a/1168196/327083 –

+0

충분히 좋습니다. 나는 단어들로 비트를 만드는 것이 조금 더 심한 것에 당신에게 동의한다. 나는 내가 모르는 뭔가가 있기를 바랄 뿐이었다. 이전에 별도의 비트를 사용했지만 OPCItem [] Word1Bits = GenerateOpcItemes(); 등의 모양이 마음에 들지 않습니다. 당신의 도움을 주셔서 감사합니다. –

+0

이것은 OPC 질문 일뿐만 아니라 기본 PLC 프로토콜 질문이기도합니다. 이 PLC의 프로토콜에 대한 "OPC 드라이버"는 읽기 - 수정 - 쓰기 작업으로 WORD의 단일 비트를 수정하는 것을 구현할 수 있습니다 (즉, 전체 단어를 읽고, 쓰여지는 비트를 미세 조정 한 다음 전체 단어를 다시 씁니다) , 그래서 당신의 멀티 스레드 우려가 여전히 존재). 당신은 단지 비트 쓰기를 수행하고 있다고 생각하지만 비트 쓰기를 에뮬레이트하고 있습니다. 실제 프로토콜과 해당 프로토콜의 OPC 드라이버에 대한 세부 사항을 알지 못하면 테스트 해 볼 것입니다. – franji1

답변

0

비트의 배열을 사용하여 OPC 드라이버를 설정한다. PLC 자체는 메모리에 대한 참조를 오프셋이있는 비트 배열로 받아들입니다. 그 후에 그것은 OPC 드라이버가 실제로 이것을 어떻게 구현하는지에 대한 질문 일뿐입니다. 나는 Kepware가 그것을이 방법으로 받아 들일 것이라고 확신한다.