C#用三菱MX Component软件通讯 不能读取小数只能读取整数

weixin_44615268 2020-06-08 09:44:42
怎么让它能读取带小数的值了,
现在只能定义为Short能读取整数
定义为double就报错
short D0, D1, D2, D3, D4, D5, D6, D7, D8, D470,D10;
try
{
this.axActUtlType.ActLogicalStationNumber = 0;
this.axActUtlType.ActPassword = null;
int rtn = this.axActUtlType.Open();
if (rtn == 0)
{
PLCcom1.Text = "PLC1链接成功";
iReturnCode = axActUtlType.ReadDeviceBlock2("D470", 1, out D470);
textBox1.Text = D470.ToString();
iReturnCode = axActUtlType.ReadDeviceBlock2("D10", 1, out D10);
textBox2.Text = D10.ToString();
PLC1conn = true;
}

希望能得到师傅们的指点
...全文
1132 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
没用过不清楚,具体得看api,协议说明等。
weixin_44615268 2020-06-08
  • 打赏
  • 举报
回复 1
问题已解决谢谢师傅们的指定 short[] MX = new short[2]; try { this.axActUtlType.ActLogicalStationNumber = 0; this.axActUtlType.ActPassword = null; int rtn = this.axActUtlType.Open(); if (rtn == 0) { PLCcom1.Text = "PLC1链接成功"; iReturnCode = axActUtlType.ReadDeviceBlock2("D400", 2, out MX[0]); byte[] L = System.BitConverter.GetBytes(MX[0]); byte[] H = System.BitConverter.GetBytes(MX[1]); byte[] f = new byte[H.Length + L.Length]; Buffer.BlockCopy(L, 0, f, 0, L.Length); Buffer.BlockCopy(H, 0, f, L.Length, H.Length); float FF = BitConverter.ToSingle(f, 0); textBox4.Text = "结果应该是:" + FF.ToString();
wanghui0380 2020-06-08
  • 打赏
  • 举报
回复
没有问题,3楼已经解释过。 这是modbus协定,一个寄存器2字节,你要double自己取回来用bitconvert转换
Bridge_go 2020-06-08
  • 打赏
  • 举报
回复
读取的都是字节肯定没有小数,一个D寄存器表示2个字节 要读小数,float要4个字节,2个D(double要4个D) 例:若读D10位float的小数,就要把D10和D11都读取出来,然后通过BitConvert转换

110,568

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧