CODESYS Examplesをビルドするときのエラーについて

# はじめに

CODESYSで何ができるかよくわかららない、そうだサンプルプログラムを動かしてみよう😤
とやる気になったのはいいがダウンロードして動かしてみようとビルドで大量のエラーが…
ということありませんか❓

https://forge.codesys.com/prj/codesys-example/home/Home/

ということでこう設定すればビルドが出来るかもしれないという事例を勉強も兼ねてまとめてみました。
詳しいことが理解できていないため間違ってる箇所もあるかもしれません。
学習のためにデモを実行するのが目的であれば基本的には更新しますか？みたいな問いはすべて[Yes]や[最新]を選択することになります。

:::note warn
実際に工場で稼働しているなどの案件については設定方法の変更により生成されるコードも変わってくるため、予期せぬトラブルの発生や顧客によっては再テストを要求されるかもしれません。実案件では安易に設定を変更しないことをおすすめします。
:::


なお説明のスクリーンショットですがなるべく日本語と英語両方貼り付けています。
英語のタイトルがわからないと公式サイトのどこに説明があるのか探しにくいからです。

# 拡張子 [.projectarchive]と[.project]の違い

サンプルですが色々ダウンロードしてみると拡張子が2種類あります。
普通に保存すると[.project]という拡張子になります。
[ファイル]→[プロジェクトアーカイブ]→[アーカイブを保存]を選択すると[.projectarchive]で保存が出来ます。
Project Archive形式は中身はzipファイルで必要なライブラリやデバイスの定義ファイルも込みで保存が可能です。
ファイルサイズは大きくなりますが必要なファイルが全て保存されていればライブラリ等のダウンロードをしなくてもビルドが可能です。
保存時に下記のようなダイアログが出ます。これは何を含めますか？という問いです。
よくわからなければ全部チェックを入れとけばなんとかなる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/d369bdae-b003-d153-3669-1d41c08d752d.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/80a6590e-273d-5c2d-4abf-ac1500d9dcda.png)


開くときは下記のようにどこかのフォルダに解凍が必要になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/0d97a3f7-772b-b732-a149-1733784f13b2.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/e6f838e1-6537-1686-0445-72b0c26b061e.png)


詳細設定を見る下記のようなウインドウがあります。つまり開くときに必要なデバイスやライブラリも自動的にインストールしてくれます。便利ねぇ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/35c89f0d-3723-de22-f1cb-8dea8b5fe4ff.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/df246292-59bf-fd31-602d-64437affa791.png)


# プロジェクト検査(Project Inspection)

プロジェクトが保存されたバージョンよりPCにインストールされているCODESYSの方が新しい場合このような選択が出ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/5deb1824-96dc-a7d9-97d5-28860d1fe41c.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/9f007861-6554-d48b-3d50-c1a0c90a9a96.png)

上の選択肢：インストール済みの新しいバージョンのCODESYSでプロジェクトを開きます。

下の選択肢：古い同じバージョンのCODESYSでプロジェクトを開きます。
PCにインストールされてない場合は古いCODESYSを探してきて自動でダウンロードします。
(インストールされる場合とそうでない場合がある。このへんよくわからない)
既に稼働している案件など生成されるコードを変えたくない場合に使います。
デメリットは複数のバージョンのCODESYSがPCにインストールされます。
ダウンロードとインストールに時間がかかるしPCの容量も圧迫します。
このように増えていきます。またプロジェクトファイルの関連付けが一番最後にインストールしたバージョンのCODESYSに変わるのでめんどくさいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/1d2a630a-a87c-8b60-7116-2cb0e91eed0f.png)

https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_cmd_open_project.html


# プロジェクト環境
開くときにバージョンを最新にするか否かの問いがあります。
ソースコードの互換性を気にしないのであれば[すべてを最新に設定]で一括変更ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/e51d84c0-b028-1064-6501-df27527f8df1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/7d831cc0-fe95-1510-37cf-23004608291a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/06fcf17b-ce02-eec8-fea2-bcb9676e1fa3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/a5c0dc94-5cd9-13a6-2daa-6a783a734b53.png)

https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_f_dlg_project_environment.html

# プロジェクトの保存形式のアップグレード
CODESYS 3.5.15.0 で機能追加が行われたので新しい形式に変換してプロジェクトを保存するか古いままにするかの選択と思われます。

:::note warn
アップグレードすると古いCODESYSでは開けなくなります。
複数の人でプロジェクトファイルを開くような場合は、必要が無い場合は安易にアップデートしないもしくは関係者にはCODESYS最新版を配布するなど考える必要があります。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/5a4b5d4f-68d9-f64b-08ba-8f99ce92ed4c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/5e64a29d-5f08-8551-d1a2-cae838d7ec84.png)



## コンパイラバージョンが古い場合
コンパイラバージョンが古い場合にこういうエラーが出てくることがありまあす。
理由はわかりませんがコンパイラバージョンを上げることで消えることがあります。
プロジェクト→プロジェクト環境→コンパイラバージョン の [アクション]で選択可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/6e5645d0-10af-fe53-f7b0-0139e031e6f9.png)

```text
[エラー]Internal error:System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。 場所 _3S.CoDeSys.LanguageModelManager.LDateType.Accept(ITypeVisitor typvis) 場所 ..(_IArrayType ) 場所 ..(_IVariable , IScope5 , _ICompileContext , _ISignature )～

[ERROR]Internal error:System.NullReferenceException: Object reference not set to an instance of an object. at _3S.CoDeSys.LanguageModelManager.LDateType.Accept(ITypeVisitor typvis) at ..(_IVariable , IScope5 , _ICompileContext , _ISignature )～
```


# デバイスディスクリプションのダウンロード
？マークは[不足しているデバイスディスクリプションのダウンロード]で入手できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/ff487228-b99c-9b56-8d78-599724304d17.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/88383eca-44c9-e5fb-9964-382ab877ca02.png)

# 不明なライブラリ
不明なライブラリは[不明なライブラリのダウンロード]を押すことで入手できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/27005e8d-9c23-d12c-6a57-1e8d2f117197.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/e3fa8d4d-383c-07e9-cbf0-191a5ec0df97.png)

ダウンロードでエラーになるものはダウンロードしたプロジェクトファイルにライブラリが含まれる場合があるので
そのときはライブラリリポジトリから個別にインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/07247b2c-bf35-9730-6930-a27239c7f1b9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/4d7338f8-f6ea-d9f3-72ed-b6c4c9363d01.png)

よくわからないですがストアでダウンロードしてインストールするとできる場合もあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/69b674a4-ef34-7e08-f0b1-7b492f4995fc.png)

https://store.codesys.com/en/codesys-iiot-libraries-sl.html

ストアでダウンロードするとAdd Libraryで追加できます。(追加前に一度削除してAddする)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/665cb34d-000e-2425-2a64-84617cde8764.png)

(未確認)ライブラリが CODESYS ライブラリでない場合、ダウンロードできない可能性があります。ライブラリは、OSCAT のウェブサイトからダウンロードできます。

https://store.codesys.com/en/oscat-basic.html

https://forge.codesys.com/forge/talk/Engineering/thread/4e25f8107a/

# プレースホルダー

プレースホルダーの[未解決の非連結プレースホルダーを全て利用可能な最新のバージョンに設定します]を押すことによって問題が修正できます。（意味はよくわからないけど）
最新バージョンにすることで新たなライブラリが必要になる場合もあるので不明なライブラリがないか再確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/1af8de8e-f83a-5c69-c418-e8b0c7c649d2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/aea218ff-bd80-806c-55c9-3295a1203187.png)

https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_obj_library_manager.html

# CODESYS Demo Style

CODESYS Demo Styleのテーマを使ってる場合これがないのでエラーになります。
これは下記よりダウンロードができます。

https://forge.codesys.com/prj/codesys-example/demo-visu-style/home/Home/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/9d8904d8-ab9a-d75e-28d2-1358b7ee4c93.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/1d769598-dc26-305f-e772-76e1c6f61d88.png)

問題はダウンロードしてインストールだとまたエラーになります。
これはCODESYS Demo StyleがFlat style 3.5.6.0を参照してるからです。
Flat style 3.5.6.0は古いので、インストール済みのFlat style 3.5.16.0を参照するようにXMLファイルを書き換えてその後インストールします。（このやり方が正しいかは不明）



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/588782c2-8ae3-77ac-b898-a0a890974aed.png)

ここの文字を修正して保存
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/8547b595-f467-37af-5470-ad72cdce1f83.png)

ツール→ビジュアライゼーションリポジトリのインストールで先ほどのXMLファイルを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/9f7e7439-9498-e826-7e02-c6b8ab131dd2.png)

表示されるようになった
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/37e5d9a0-2f54-e951-d84b-ccc1067da754.png)

# デバイスの更新
上記に書いてあることを全部試したけどまだエラーがある。
理由はわからないけどデバイスの更新を行うと解決した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/7ccb1866-394a-9640-5a5e-5ba472e9aaf1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/a300b3cb-07a7-0be3-e52e-b398375b3624.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/6c217d2c-3457-e499-a8cc-928e2be14296.png)

# まとめ
CODESYSはやはり難しい