2009-04-16 5 views
3

기존의 C 코드를 IEC 61131-3 호환 PLC로 이식해야한다는 요구 사항이 있습니다.C to IEC 61131-3 IL 컴파일러

코드를 개별 기능 블록으로 분할하고 해당 블록을 표준 솔루션 (래더, FB, 구조화 된 텍스트 등)에 포함시키는 옵션이 있습니다. 그러나 이렇게하려면 각 기능 블록을 빌드하기 위해 C 코드를 조각해야합니다.

IEC 스펙을 살펴보면 IEC Instruction List 형식이 컴파일러의 대상 언어가 될 수 있음을 확인했습니다.

  1. CoDeSys
  2. Beremiz

그러나 이러한 C, IEC에없는 C에 IEC 언어를 컴파일 대상이 될 것으로 보인다 다음 wikepedia 기사는 두 가지 개발 도구가 나열되어 있습니다.

다른 가능한 솔루션은 C에서 Pascal 변환기로 C 코드를 밀어 넣고 Structured Text 솔루션의 시작점으로 사용하는 것입니다.

이들 중 하나가 아닌 경우 코드를 기능 블록으로 분할하는 경로를 따라갑니다.

편집 나는 C 코드는 기존의 실시간 제어 시스템입니다 언급해야 mlieson의 응답하라는 메시지로

. 따라서 프로그램 알고리즘은 이미 PLC 환경에 적합해야합니다.

답변

2

제 생각 엔 C에서 Pascal으로의 번역자가 문제의 가치가 있다고 생각하지 않을 것입니다. 구조화 된 텍스트는 파스칼처럼 보입니다. 그러나 어디에서나 수정할 필요가있는 차이점이 있습니다.

버그 문제는 아니지만 PLC 런타임 환경이 약간 다르다는 사실을 잊지 마십시오. C 응용 프로그램은 main()에서 시작하여 main()이 반환 될 때 끝납니다. PLC는 main()을 초당 100 번 이상 반복하여 호출하고 종료하지 않습니다. 일반적으로 오랜 계산과 I/O는 C 응용 프로그램이 사용하는 것보다 다른 방식으로 코딩해야합니다.

C 소스가 많은 수천 줄의 코드가 아니라면 - 다시 작성하십시오.

+0

저는 PLC와 PC 프로그래밍에 능숙하기 때문에 모든 건축상의 차이점과 문제점을 알고 있습니다. 그러나 C 코드는 일종의 실시간 시스템을위한 것입니다 (아직 코드를 보지 못했습니다 - 다음 주입니다) –

1

변환 할 코드의 양이 수천 줄이면 손으로 코드를 기록하는 것이 가장 좋습니다.

변환 할 코드가 많은 경우 자동화 도구가 매우 효과적 일 수 있습니다. DMS Software Reengineering Toolkit을 사용하여 기계 동작 다이어그램을 RLL (PLC) 코드로 매핑하는 변환기를 만들었습니다. 또한 DMS에는 전체 C 파서/분석기/프런트 엔드가 있습니다. 조각들은 C to RLL 코드를 작성하기위한 것입니다.

이것은 쉬운 일이 아닙니다. DMS를 사용자가 원하는 것과 비슷하게 구성하려면 6 개월에서 12 개월 정도 소요될 수 있습니다. 그것이 손으로하는 것보다 적다면, 그것을 할 올바른 방법입니다.

3

아마도이 답변은 너무 늦었지만 외부 라이브러리 덕분에 CoDeSys에서 C 코드를 호출 할 수 있습니다.

당신은 당신이 작은 modifcations으로 PLC로 C 코드를 사용하여 줄 것 http://forum-en.3s-software.com/viewtopic.php?t=620

에서 CoDeSys 포럼에서 문서를 찾을 수 있습니다. 함수 또는 함수 블록 인터페이스를 정의하기 만하면됩니다.

0

불가능합니다. 간단히 말해 IL 언어는 4GL입니다 (즉, 도메인뿐 아니라 다른 IEC 61131-3 언어 - ST, FBD, LD, SFC). C 언어는 3GL입니다.

문제를 이해하려면 포인터로 IL 조작으로 표현하는 방법에 대한 질문에 대답 해보십시오. 예를 들어, 함수를 포인터로 호출하여 표현할 수 있습니다. 인터럽트는? 주변 장치 에 대한 낮은 수준의 액세스?

BTW, 일명, "프로세스와 C"를 반사 언어가 (정말, 더 많은 문제가있다). Reflex는 C와 유사한 구문을 사용하는 제어 도메인의 4GL입니다. 그러나 알려진 번역자는 C 코드와 파이썬 코드를 생성합니다.

0

가장 좋은 방법은 C 코드를 PLC 기능 블록으로 다시 코딩 할 수있는 작은 부분으로 분할하고 구조화 된 텍스트로 다시 쓰는 각 블록에 대해 C에서 PASCAL로 변환하는 것입니다. 자동화 된 변환이 아마도 당신을 실망시킬 것이므로 많은 수작업을 준비하십시오. 그것이를해야하는 이유 http://www.control.com/thread/1026228786

1

C 블록을 사용할 수있는 몇 가지 IEC 개발 환경 및 대상 하드웨어가 있습니다 ... 나는 또한 그 이유를 살펴 것 :

또한이 페이지를 살펴 IEC-61131 신고 대상. 필자는 컴플 라 이언 스에 대해 광범위하게 문서를 작성했으며 왜 스쿼트를 의미하지는 않습니다. SOFTplc 공사는 I 사용자 정의로드 가능한 모듈을 확신 할 수 있습니다 ... 그리고 그들은 ... C에서

슈나이더는 C의 기능 블록을 지원

...

인 LabVIEW도 할 수있다! IEC가 왜 중요한지 잘 모르겠습니다 !! 컴파일러가 존재한다면 확실하게 나쁜 코드를 생성 할 것입니다.

0

나는 이것을 할 때마다 방금 C에서 직접 ST로 구문 분석하고 변환했습니다. 불행하게도 ST가 일반적으로 질식사를하는 포인터를 다루는 것은 거의 없었지만 필자는 완전한 재기록이 필요한 몇 가지 기능을 만났다.