フォームに配置するコントロール名称
①checkBox_ReadStructOnOff
②label_ReadStructValue
③label_ReadStructString
④label_ReadStructArray0
⑤label_ReadStructArray1
⑥button_ReadStruct
⑦checkBox_WriteStructOnOff
⑧textBox_WriteStructValue
⑨textBox_WriteStructString
⑩textBox_WriteStructArray0
⑪textBox_WriteStructArray1
⑫button_WriteStruct
※TwinCAT3の構造体のINT型のアドレスはByte 0, 2, 4, 6, …からスタートする
TwinCAT3では、変数と構造体は8Byteのアラインメントでメモリ配置される
(→変数間のメモリギャップは最大7Byte)
同じ構造体メンバ変数のサイズを元に、相対アドレスを計算した例:
※構造体のサイズは
min(最大データ型byte数, アラインメントbyte数) xn
(nは整数) となる
参考URL: https://infosys.beckhoff.com/content/1033/tc3_plc_intro/45035999813133451.html
PLCプログラムで構造体メンバ変数間の相対アドレスを確認した例:
構造体を{attribute ‘pack_mode’} で宣言すると、メモリ配置の最大メモリギャップを指定可能。`0`あるいは`1`はメモリギャップなしに対応
例:’pack_mode’ := ‘0’ (or ‘1’)
TwinCATPLC側の構造体を宣言
C#側の構造体を宣言
TwinCATで宣言した構造体と、メモリレイアウトが完全に一致するよう定義する
※「ANY TYPE」を使用した、構造体をマーシャリングしての読み書きについて
https://infosys.beckhoff.com/content/1033/tc3_ads.net/9407526667.html
Readボタンのクリックイベントの処理を追加
非同期読み込み処理を追加
Writeボタンのクリックイベントの処理を追加
非同期書き込み処理を追加
PLCプログラムを実行し、次にC#プログラムを実行する
▶️ 実習4へ