だいぶ制御の方法がわかっきた気がする。
こんな感じ。(0x03ピストンSA固定文言?.カップ位置.移動速さ)
位置 0が手前 200が奥
速さ 0〜100?
あと移動しきる前に次の移動指令が入るとそっちに動くから
移動が終わるまで次の指令は待たないとダメみたい。
下は手前から奥(200)の移動は100の速度で移動完了まで300ミリ秒待ち
奥(200)から手前(0)の移動は10の速度で移動完了まで300+600で900ミリ秒待ち
これのループプログラムです。
移動量と速度で待ち時間が変わるからそのあたりは
データ取らないとダメですね。

少しでもコントローラー制作の手助けになれば幸い。

# 2> nul || echo off && cls
# 2> nul || SET n=[System.Text.Encoding]::GetEncoding(0).GetString(@(0x0d,0x0a))
# 2> nul || SET t=$t=Get-Content -Path '%~0'
# 2> nul || SET eval=Invoke-Expression
# 2> nul || PowerShell -Command %t%;$t=[system.String]::Join(%n%, $t);%eval% $t
# 2> nul || Pause
$port= new-Object System.IO.Ports.SerialPort COM3,19200,None,8,one;$port.Open();
$port.DtrEnable=$true;$port.RtsEnable=$true;$port.Encoding=[System.Text.Encoding]::GetEncoding(28591);
$base=300;
while($true){
$string=$port.Encoding.GetString(@(0x03,[byte]200,[byte]100));
$port.Write($string);
Start-Sleep -m $base;
$string=$port.Encoding.GetString(@(0x03,[byte]0,[byte]10));
$port.Write($string);
Start-Sleep -m ($base+600);
}