我使用MX component裡面的ActUtlTypeLib類別庫,去讀寫三菱PLC的數據寄存器,
(參考網址:https://zhuanlan.zhihu.com/p/446264427)
C#程式碼如下:
using ActUtlTypeLib;
public partial class Form1 : Form
{
ActUtlTypeClass textPLC = new ActUtlTypeClass();
private void button1_Click(object sender, EventArgs e)
{
WritePLCY = 1;
textPLC.WriteDeviceRandom("X0", 1, ref WritePLCY);
timer1.Interval = 1000;
timer1.Enabled = true;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
short Readwordbcd;
textPLC.ReadDeviceRandom2("D300", 1, out Readwordbcd);
Console.WriteLine(Readwordbcd);
}
}
PLC從1計數到100萬,每計數一次就存入數據寄存器D300,
計數到32768時,發生了overflow(溢位)
C#執行時,就印出-32768,接著-32767、-32766、-32765....
但我PLC的D300顯示值是正常的(無overflow)
我使用強制轉型
Console.WriteLine((int)Readwordbcd);
Console.WriteLine((long)Readwordbcd);
無論怎麼轉型都還是會印出-32768、-32767、-32766
1.不曉得是不是ActUtlTypeLib類別庫中,
ReadDeviceRandom2方法回傳值型別只能為short
2.想請問還有什麼計算的方式,可以讓讀出的數值變正常
例如-32768變成32768、-32767變成-32769..等
謝謝