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

看板C_Sharp (C#)作者 (草草)時間2年前 (2022/07/23 18:11), 2年前編輯推噓0(002)
留言2則, 2人參與, 2年前最新討論串1/5 (看更多)
我使用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..等 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.161.142.214 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1658571102.A.62E.html ※ 編輯: popo14777 (118.161.142.214 臺灣), 07/23/2022 18:12:39 ※ 編輯: popo14777 (118.161.142.214 臺灣), 07/23/2022 18:15:01

07/23 22:52, 2年前 , 1F
為何一定要用short?
07/23 22:52, 1F
你是說short Readwordbcd嗎? 如果改int Readwordbcd,ReadDeviceRandom2方法就會無法編譯 要改為ReadDeviceRandom方法才可以編譯, 但輸出後只要超過65565(rang:0~65535)還是會overflow... 註:Readwordbcd為變數名稱 ※ 編輯: popo14777 (118.161.142.214 臺灣), 07/23/2022 23:57:41

07/26 12:24, 2年前 , 2F
用兩個 short 組成一個 int?
07/26 12:24, 2F
文章代碼(AID): #1YsybUOk (C_Sharp)
文章代碼(AID): #1YsybUOk (C_Sharp)