[問題] short整數資料overflow解決方式

作者: popo14777 (草草)   2022-07-23 18:11:40
我使用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..等
謝謝
作者: annies5 (念渝)   2022-07-23 22:52:00
為何一定要用short?
作者: antpro (-_*|| 宅)   2022-07-26 12:24:00
用兩個 short 組成一個 int?

Links booklink

Contact Us: admin [ a t ] ucptt.com