总线运动卡读通用IO的小程序,一次读取全部模块的IO

勇哥注:

这段小代码放这里,是为了记录了一个常用常忘的知识。

实验的时候,此卡自带4个输入IO,另外总线上连接了两个16位的输入DI。

因此共有36个输入DI。

测试的时候故意短接了三个输入IO点。


这款卡的按字节读取全部IO的api是MCCE135.mcc_io_read_inbyte(),说明如下:


short mcc_io_read_inbyte(WORD CardNo,WORD StartByte,WORD ByteNum, BYTE 

*ValueList);

功 能: 按 byte 读取控制卡输入端口的电平;

参 数:CardNo: 控制卡卡号,取值范围:0-7;

StartByte: 总线 Di 起始字节数,取值范围:0-128;

ByteNum:需要读取的总线 Di 总字节数量,取值范围:0-128;

ValueList: Di 端口电平值数组,转换为 2 进制后对应每一位 bit,

其中 0:表示低电平(on),1:表示高电平(off);


:此api功能不错,它可以一次读取主板IO+全部扩展IO,可以读取主板+64个16口的DI模块。

相当于一次读取1036个输入IO。



image.png


image.png



程序如下:


(1)Convert.ToString(byteData[i], 2)  转2进制串

(2).PadLeft(8, '0')  这个用于在左边补0,其实这里用不上,因为一个byte固定为8位,不需要补0。

(3).ToCharArray().Reverse().ToArray()  这个是把位次序反转过来,如果不返过来则影响阅读。(一般我们习惯左边第1个位是一个byte的第1位)



            byte[] byteData = new byte[5];
            MCCE135.mcc_io_read_inbyte((ushort)m_nCardNo, 0, 5, byteData);
            StringBuilder sb1 = new StringBuilder();
            for (int i = 0; i < 5; i++)
            {
                sb1.Append( (Convert.ToString(byteData[i], 2).PadLeft(8, '0')).ToCharArray().Reverse().ToArray());
                sb1.Append(Environment.NewLine);
            }
            timer1.Stop();
            MessageBox.Show(sb1.ToString());


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
本帖最后由 勇哥,很想停止 于 2025-01-09 16:12:42 编辑

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年2月    »
12
3456789
10111213141516
17181920212223
2425262728
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864