Fx3U PLC操作M寄存器问题点记录

经过2天的折腾终于发现问题在于地址错误,记下来,供参考;

        /// <summary>
        /// 强制寄存器的命令字符串生成函数;
        /// </summary>
        private int MakeWriteContactString(string strRegType, int nStartAddr, bool bState)
        {
            //STX CMD, ADDRESS,ETX,SUM1,SUM2;
            m_btOutput[0] = 0x02;
            if (bState)
                m_btOutput[1] = COMMAND_FORCE_ON;
            else
                m_btOutput[1] = COMMAND_FORCE_OFF;

            int nAddress = GetItemAddress(m_btOutput[1], strRegType, nStartAddr);
            string strAddr = Convert.ToString(nAddress, 16).PadLeft(4, Convert.ToChar("0")).ToUpper();
            byte[] b = System.Text.Encoding.Default.GetBytes(strAddr);

            m_btOutput[4] = b[0];
            m_btOutput[5] = b[1];
            m_btOutput[2] = b[2];
            m_btOutput[3] = b[3];

            m_btOutput[6] = ETX;
            byte[] btsum = System.Text.Encoding.Default.GetBytes(Convert.ToString(SUM(1, 6), 16)
                .PadLeft(2, Convert.ToChar("0")).ToUpper());
            m_btOutput[7] = btsum[0];
            m_btOutput[8] = btsum[1];
            return 9;
        }

注意里面的地址:低字节在前,高字节在后;而操作D寄存器的地址时则是高低字节顺序排列;操作D寄存器的数据又是低字节在前高字节在后。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值