精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

分享一下運(yùn)動(dòng)控制卡之ECIO系列IO卡的用法

伺服與運(yùn)動(dòng)控制 ? 來(lái)源:伺服與運(yùn)動(dòng)控制 ? 2023-02-17 17:51 ? 次閱讀

今天,給大家分享一下運(yùn)動(dòng)控制卡之ECIO系列IO卡的用法,C#語(yǔ)言進(jìn)行ECI IO卡的開(kāi)發(fā)以及測(cè)試多個(gè)IO讀寫(xiě)的交互速度。

01 ECI0032/ECI0064 IO卡硬件介紹

1.功能介紹

ECI0032/ECI0064等ECI0系列運(yùn)動(dòng)控制卡支持以太網(wǎng)RS232通訊接口電腦相連,接收電腦的指令運(yùn)行,可以通過(guò)CAN總線連接各個(gè)擴(kuò)展模塊,從而擴(kuò)展輸入輸出點(diǎn)數(shù)。

ECI0032/ECI0064等ECI0系列采用了優(yōu)化的網(wǎng)絡(luò)通訊協(xié)議,可以實(shí)現(xiàn)實(shí)時(shí)的邏輯控制和IO狀態(tài)的監(jiān)控。

ECI0032/ECI0064等ECI0系列IO卡的應(yīng)用程序可以使用VC,VB,VS,C++,C#等軟件開(kāi)發(fā),程序運(yùn)行時(shí)需要?jiǎng)討B(tài)庫(kù)zmotion.dll,調(diào)試時(shí)可以將ZDevelop軟件同時(shí)連接控制器,從而方便調(diào)試、方便觀察。

c7373520-aaa3-11ed-bfe3-dac502259ad0.png

c7511de6-aaa3-11ed-bfe3-dac502259ad0.png

ECI0032系統(tǒng)架構(gòu)圖

c76e989e-aaa3-11ed-bfe3-dac502259ad0.png

ECI0064系統(tǒng)架構(gòu)圖

2.硬件接口

c78ce3bc-aaa3-11ed-bfe3-dac502259ad0.jpg

通用輸入口電路圖

c7a34580-aaa3-11ed-bfe3-dac502259ad0.jpg

通用輸入口接線參考圖

c7b9a1f4-aaa3-11ed-bfe3-dac502259ad0.jpg

通用輸出口電路圖

c7c90720-aaa3-11ed-bfe3-dac502259ad0.jpg

通用輸出口接線參考圖

3.控制器基本信息

c7d81ad0-aaa3-11ed-bfe3-dac502259ad0.png

02 C#語(yǔ)言進(jìn)行ECI IO卡的開(kāi)發(fā)

(一)新建WinForm項(xiàng)目添加函數(shù)庫(kù)

1.在VS2015菜單“文件”→“新建”→“項(xiàng)目”,啟動(dòng)創(chuàng)建項(xiàng)目向?qū)А?/p>

c7eb5f46-aaa3-11ed-bfe3-dac502259ad0.png

2.選擇開(kāi)發(fā)語(yǔ)言為“Visual C#”和.NET Framework 4以及Windows窗體應(yīng)用程序。

c7fe1c1c-aaa3-11ed-bfe3-dac502259ad0.png

3.找到廠家提供的光盤(pán)資料里面的C#函數(shù)庫(kù),路徑如下(64位庫(kù)為例)。

1)進(jìn)入廠商提供的光盤(pán)資料找到“8.PC函數(shù)”文件夾,并點(diǎn)擊進(jìn)入。

c81dc1f2-aaa3-11ed-bfe3-dac502259ad0.png

2)選擇“函數(shù)庫(kù)2.1”文件夾。

c835ec78-aaa3-11ed-bfe3-dac502259ad0.png

3)選擇“Windows平臺(tái)”文件夾。

c84c66a6-aaa3-11ed-bfe3-dac502259ad0.png

4)根據(jù)需要選擇對(duì)應(yīng)的函數(shù)庫(kù),這里選擇64位庫(kù)。

c86176e0-aaa3-11ed-bfe3-dac502259ad0.png

5)解壓C#壓縮包,里面有C#對(duì)應(yīng)的函數(shù)庫(kù)。

c874a026-aaa3-11ed-bfe3-dac502259ad0.png

6)函數(shù)庫(kù)具體路徑如下。

c8888b9a-aaa3-11ed-bfe3-dac502259ad0.png

4.將廠商提供的C#的庫(kù)文件以及相關(guān)文件復(fù)制到新建的項(xiàng)目中。

1)將zmcaux.cs文件復(fù)制到新建的項(xiàng)目里面中。

c89dec88-aaa3-11ed-bfe3-dac502259ad0.png

2)將zaux.dll和zmotion.dll文件放入bindebug文件夾中。

c8aa8f1a-aaa3-11ed-bfe3-dac502259ad0.png

5.用vs打開(kāi)新建的項(xiàng)目文件,在右邊的解決方案資源管理器中點(diǎn)擊顯示所有文件,然后鼠標(biāo)右擊zmcaux.cs文件,點(diǎn)擊包括在項(xiàng)目中。

c8bd1e50-aaa3-11ed-bfe3-dac502259ad0.jpg

6.雙擊Form1.cs里面的Form1,出現(xiàn)代碼編輯界面,在文件開(kāi)頭寫(xiě)入using cszmcaux,并聲明控制器句柄g_handle。

c8da3300-aaa3-11ed-bfe3-dac502259ad0.png

7.至此,項(xiàng)目新建完成,可進(jìn)行C#項(xiàng)目開(kāi)發(fā)。

(二)PC函數(shù)介紹

1.PC函數(shù)手冊(cè)可在光盤(pán)資料查看,具體路徑如下。

c8ed0a02-aaa3-11ed-bfe3-dac502259ad0.png

2.鏈接控制器,獲取鏈接句柄。

指令3 ZAux_OpenEth
指令原型 int32 __stdcall ZAux_OpenEth(char *ipaddr, ZMC_HANDLE * phandle)
指令說(shuō)明 以太網(wǎng)連接控制器
輸入參數(shù)
參數(shù)名 描述
Ipaddr 連接的IP地址
輸出參數(shù)
參數(shù)名 描述
Phandle 返回的連接句柄
返回值 成功返回值為0,非0詳見(jiàn)錯(cuò)誤碼說(shuō)明
指令示例 網(wǎng)口連接控制器
詳細(xì)說(shuō)明 1.網(wǎng)口采用RJ45標(biāo)準(zhǔn)網(wǎng)線接口,通訊速率為100Mbit/s。
2.控制器出廠的IP地址為192.168.0.11,端口號(hào)為502。對(duì)端通訊設(shè)備需與控制器處于同一網(wǎng)段,才可進(jìn)行連接。
3.最常用的控制器連接方式。
4.ZMC_HANDLE 類(lèi)型:Zmotion庫(kù)中,專門(mén)用于控制卡連接數(shù)據(jù)定義類(lèi)型。

3.快速讀取多個(gè)輸入口當(dāng)前狀態(tài)接口說(shuō)明。

指令200 ZAux_GetModbusIn
指令原型 int32 __stdcall ZAux_GetModbusIn (ZMC_HANDLE handle,int ionumfirst, int ionumend, uint8 * pValueList);
指令說(shuō)明 快速讀取多個(gè)當(dāng)前的輸入狀態(tài)
輸入?yún)?shù)
參數(shù)名 描述
handle 連接句柄
ionumfirst IN起始編號(hào)
ionumend IN結(jié)束編號(hào)
輸出參數(shù)
參數(shù)名 描述
pValueList 位狀態(tài),按位存儲(chǔ)
返回值 成功返回值為0,非0詳見(jiàn)錯(cuò)誤碼說(shuō)明
指令示例 多個(gè)IO讀取
詳細(xì)說(shuō)明 Modbus方式獲取出來(lái)的狀態(tài)是未反轉(zhuǎn)前的狀態(tài)。如果有用INVERT_IN反轉(zhuǎn),讀取的狀態(tài)可能就是不對(duì)的

4.快速讀取多個(gè)輸出口當(dāng)前狀態(tài)接口說(shuō)明。

指令201 ZAux_GetModbusOut
指令原型 int32 __stdcall ZAux_GetModbusOut (ZMC_HANDLE handle,int ionumfirst, int ionumend, uint8 * pValueList);
指令說(shuō)明 快速讀取多個(gè)當(dāng)前的輸出狀態(tài)。Modbus方式獲取出來(lái)的狀態(tài)是未反轉(zhuǎn)前的狀態(tài)。如果有用INVERT_IN反轉(zhuǎn),讀取的狀態(tài)可能就是不對(duì)的
輸入?yún)?shù)
參數(shù)名 描述
handle 連接句柄
ionumfirst OUT起始編號(hào)
ionumend OUT結(jié)束編號(hào)
輸出參數(shù)
參數(shù)名 描述
pValueList 位狀態(tài),按位存儲(chǔ)
返回值 成功返回值為0,非0詳見(jiàn)錯(cuò)誤碼說(shuō)明
指令示例 多個(gè)IO讀取
詳細(xì)說(shuō)明 Modbus方式獲取出來(lái)的狀態(tài)是未反轉(zhuǎn)前的狀態(tài)。如果有用INVERT_IN反轉(zhuǎn),讀取的狀態(tài)可能就是不對(duì)的

03 C#快速讀取多個(gè)IO狀態(tài)測(cè)試?yán)?/strong>

1.例程界面

c8fe9af6-aaa3-11ed-bfe3-dac502259ad0.png

2.相關(guān)代碼

①鏈接按鈕的事件處理函數(shù)中調(diào)用鏈接控制器的接口函數(shù)ZAux_OpenEth(),與控制器進(jìn)行鏈接,鏈接成功后啟動(dòng)定時(shí)器1監(jiān)控控制器的IO狀態(tài)。

//鏈接控制器
private void LinkButton_Click(object sender, EventArgs e)
{
    zmcaux.ZAux_OpenEth(IP_comboBox.Text, out g_handle);
    if (g_handle != (IntPtr)0)
    {
        // MessageBox.Show("控制器鏈接成功!", "提示");
        timer1.Enabled = true;
        LinkButton.BackColor = Color.FromArgb(200, 255, 200);
    }
    else
    {
        MessageBox.Show("控制器鏈接失敗,請(qǐng)檢測(cè)IP地址!", "警告");
        LinkButton.BackColor = Color.FromArgb(255, 200, 200);
    }
}

②通過(guò)定時(shí)器1監(jiān)控控制器的IO狀態(tài)。

//定時(shí)器更新IO信息
private void timer1_Tick(object sender, EventArgs e)
{
    int j, k;
    int TestNum = 50;
    //快速讀取輸入口狀態(tài)接口時(shí)間測(cè)試
    byte[] InState = new byte[4];
    DateTime beforeDT = System.DateTime.Now;
    for (int count = 0; count < TestNum; count++)
    {
        zmcaux.ZAux_GetModbusIn(g_handle, 0, 32, InState);
        for (int i = 0; i < 32; i++)
        {
            j = i / 8;
????????????k?=?i?%?8; 
????????????if?(((InState[j]?>>k)&1)==1)
{
InStatus[i].BackColor=Color.FromArgb(200,255,200); 
}
else
{
InStatus[i].BackColor=Color.FromArgb(255,200,200);
}
}
}
DateTimeafterDT=System.DateTime.Now;
//計(jì)算beforeDT與afterDT的時(shí)間差
TimeSpants=afterDT-beforeDT;
InMoitoring.Text="輸入口監(jiān)控_刷新時(shí)間:"+(ts.TotalMilliseconds*1000/TestNum).ToString()+"us";
//快速讀取輸出口狀態(tài)接口時(shí)間測(cè)試
byte[]OutState=newbyte[4];
DateTimebeforeDTOP=System.DateTime.Now;
for(intcount=0;count>k)&1)==1)
{
    OutStatus[i].BackColor=Color.FromArgb(200,255,200);
}
else
{
OutStatus[i].BackColor=Color.FromArgb(255,200,200);
}
}
}
DateTimeafterDTOP=System.DateTime.Now;
//計(jì)算beforeDTOP與afterDTOP的時(shí)間差
ts=afterDTOP-beforeDTOP;
OutMoitoring.Text="輸出口監(jiān)控_刷新時(shí)間:"+(ts.TotalMilliseconds*1000/TestNum).ToString()+"us";
}

③多個(gè)輸入口狀態(tài)讀取速度測(cè)試函數(shù)。

//多個(gè)輸入口狀態(tài)讀取交互速度測(cè)試
private void ReadInTest_Click(object sender, EventArgs e)
{
intj,k;
inttestNum=Convert.ToInt32(TestNum.Text.ToString());
intreadInNum=Convert.ToInt32(ReadInNum.Text.ToString());
//快速讀取輸入口狀態(tài)接口時(shí)間測(cè)試
byte[]InState=newbyte[4];
DateTimebeforeDT=System.DateTime.Now;
for(intcount=0;count>k)&1)==1)
{
InStatus[i].BackColor=Color.FromArgb(200,255,200);
}
else
{
InStatus[i].BackColor=Color.FromArgb(255,200,200);
}
}
}
}
DateTimeafterDT=System.DateTime.Now;
//計(jì)算beforeDT與afterDT的時(shí)間差
TimeSpants=afterDT-beforeDT;
//總耗時(shí)ms
ReadInTotTime.Text=ts.TotalMilliseconds.ToString("0.00");
//平均耗時(shí)us
ReadInTime.Text=(ts.TotalMilliseconds*1000/testNum).ToString("0.00");
}

④多個(gè)輸出口狀態(tài)讀取速度測(cè)試函數(shù)。

//多個(gè)輸出口狀態(tài)讀取交互速度測(cè)試
private void ReadOutTest_Click(object sender, EventArgs e)
{
    int j, k;
inttestNum=Convert.ToInt32(TestNum.Text.ToString());
intreadOutNum=Convert.ToInt32(ReadOutNum.Text.ToString());
//快速讀取輸入口狀態(tài)接口時(shí)間測(cè)試
byte[]OutState=newbyte[4];
DateTimebeforeDT=System.DateTime.Now;
for(intcount=0;count>k)&1)==1)
{
OutStatus[i].BackColor=Color.FromArgb(200,255,200);
}
else
{
OutStatus[i].BackColor=Color.FromArgb(255,200,200);
}
}
}
}
DateTimeafterDT=System.DateTime.Now;
//計(jì)算beforeDT與afterDT的時(shí)間差
TimeSpants=afterDT-beforeDT;
//總耗時(shí)ms
ReadOutTolTime.Text=ts.TotalMilliseconds.ToString("0.00");
//平均耗時(shí)us
ReadOutTime.Text=(ts.TotalMilliseconds*1000/testNum).ToString("0.00");
}

⑤多個(gè)輸出口狀態(tài)設(shè)置速度測(cè)試函數(shù)。

//多個(gè)輸出口狀態(tài)設(shè)置交互速度測(cè)試
private void WriteOutTest_Click(object sender, EventArgs e)
{
inttestNum=Convert.ToInt32(TestNum.Text.ToString());
intwriteOutNum=Convert.ToInt32(WriteOutNum.Text.ToString());
//快速讀取輸入口狀態(tài)接口時(shí)間測(cè)試
byte[]OutState=newbyte[4];
DateTimebeforeDT=System.DateTime.Now;
for(intcount=0;count
3.多個(gè)IO狀態(tài)與上位機(jī)交互速度測(cè)試結(jié)果

(1)32個(gè)輸入輸出口讀寫(xiě)1000次,交互速度測(cè)試結(jié)果。

c9149ba8-aaa3-11ed-bfe3-dac502259ad0.png

(2)32個(gè)輸入輸出口讀寫(xiě)1W次,交互速度測(cè)試結(jié)果。

c928f634-aaa3-11ed-bfe3-dac502259ad0.png

(3)32個(gè)輸入輸出口讀寫(xiě)10W次,交互速度測(cè)試結(jié)果。

c93b6792-aaa3-11ed-bfe3-dac502259ad0.png

(4)32個(gè)輸入輸出口定時(shí)器實(shí)時(shí)交互的測(cè)試結(jié)果演示。

04 分析與結(jié)論

以上分別是對(duì)32個(gè)輸入口的讀速度、32個(gè)輸出口的讀速度以及32個(gè)輸出口的寫(xiě)速度進(jìn)行測(cè)試,從上面的運(yùn)行效果圖的數(shù)據(jù)顯示來(lái)看,無(wú)論是輸入口還是輸出口,它們的交互速度都保持在200us左右。

當(dāng)測(cè)試次數(shù)從1000次增加到1W次,甚至10W次時(shí),交互速度依舊保持在200us左右。測(cè)試效果十分穩(wěn)定。測(cè)試數(shù)據(jù)如下表所示:

測(cè)試次數(shù) 讀32個(gè)輸入口 讀32個(gè)輸出口 寫(xiě)32個(gè)輸出口
1000 228.39us 197.47us 196.47us
10000 225.99us 195.29us 194.17us
100000 225.37us 194.59us 194.45us






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 以太網(wǎng)
    +關(guān)注

    關(guān)注

    40

    文章

    5374

    瀏覽量

    171096
  • CAN總線
    +關(guān)注

    關(guān)注

    145

    文章

    1936

    瀏覽量

    130628
  • RS232接口
    +關(guān)注

    關(guān)注

    0

    文章

    73

    瀏覽量

    20523
  • 運(yùn)動(dòng)控制卡

    關(guān)注

    7

    文章

    108

    瀏覽量

    15444

原文標(biāo)題:簡(jiǎn)單易用的以太網(wǎng)IO控制卡:C#讀寫(xiě)測(cè)試

文章出處:【微信號(hào):伺服與運(yùn)動(dòng)控制,微信公眾號(hào):伺服與運(yùn)動(dòng)控制】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    EtherCAT運(yùn)動(dòng)控制卡的自定義運(yùn)動(dòng)曲線

    今天,正運(yùn)動(dòng)小助手給大家分享一下EtherCAT運(yùn)動(dòng)控制卡的自定義運(yùn)動(dòng)曲線,主要介紹一下如何通過(guò)
    的頭像 發(fā)表于 09-27 11:19 ?1839次閱讀
    EtherCAT<b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制卡</b>的自定義<b class='flag-5'>運(yùn)動(dòng)</b>曲線

    運(yùn)動(dòng)控制卡

    本人對(duì)運(yùn)動(dòng)控制卡無(wú)所知,想問(wèn)一下運(yùn)動(dòng)控制是不是也像數(shù)據(jù)采集
    發(fā)表于 06-05 00:45

    運(yùn)動(dòng)控制卡

    有沒(méi)有高手懂得弄運(yùn)動(dòng)控制卡?可以教一下小白我,怎么入門(mén),用什么軟件去編程他。
    發(fā)表于 06-13 10:50

    分享通用運(yùn)動(dòng)控制卡資料

    分享通用運(yùn)動(dòng)控制卡資料,喜歡可以頂一下
    發(fā)表于 11-15 09:44

    ACS運(yùn)動(dòng)控制卡 精選資料分享

    簡(jiǎn)介: ACS是款以色列的運(yùn)動(dòng)控制卡控制直線電機(jī),運(yùn)動(dòng)精度到u級(jí)別。常用在工業(yè)領(lǐng)域。1.使用:運(yùn)動(dòng)
    發(fā)表于 09-01 07:31

    分享一下運(yùn)動(dòng)控制卡應(yīng)用開(kāi)發(fā)教程之Python

    與大家分享一下運(yùn)動(dòng)控制卡應(yīng)用開(kāi)發(fā)教程之Python。 、ECI2828硬件介紹ECI2828系列運(yùn)動(dòng)
    發(fā)表于 09-01 08:36

    EtherCAT運(yùn)動(dòng)控制卡ECI2820如何使用

    今天,正運(yùn)動(dòng)技術(shù)給大家分享一下EtherCAT運(yùn)動(dòng)控制卡ECI2820如何使用C#實(shí)現(xiàn)運(yùn)動(dòng)暫停
    發(fā)表于 09-01 06:24

    六軸運(yùn)動(dòng)控制卡介紹

    六軸運(yùn)動(dòng)控制卡
    發(fā)表于 07-16 11:29 ?1.1w次閱讀

    研控運(yùn)動(dòng)控制卡的編程小技巧

    運(yùn)動(dòng)控制卡開(kāi)發(fā)應(yīng)用中,運(yùn)動(dòng)順序執(zhí)行是最常見(jiàn)的編程問(wèn)題之,關(guān)系到設(shè)備后續(xù)控制動(dòng)作能否正常運(yùn)行。下面,我們分享研控
    的頭像 發(fā)表于 12-24 18:57 ?2060次閱讀

    運(yùn)動(dòng)控制卡能仿真嗎?

    其實(shí)不同品牌運(yùn)動(dòng)控制卡對(duì)仿真的支持是不樣的,有些品牌不支持,有的品牌則支持,今天跟大家分享一下,基于正運(yùn)動(dòng)Zmotion
    的頭像 發(fā)表于 02-22 15:54 ?1307次閱讀
    <b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制卡</b>能仿真嗎?

    運(yùn)動(dòng)ECI0032 IO控制卡用戶手冊(cè)

    ECI0032 是正運(yùn)動(dòng)技術(shù)開(kāi)發(fā)的款網(wǎng)絡(luò) IO 控制卡,采用優(yōu)化的網(wǎng)絡(luò)通訊協(xié)議可以實(shí)現(xiàn)實(shí)時(shí)的 IO
    發(fā)表于 05-10 09:15 ?0次下載

    運(yùn)動(dòng)ECI0064 IO控制卡用戶手冊(cè)

    ECI0064 是正運(yùn)動(dòng)技術(shù)開(kāi)發(fā)的款網(wǎng)絡(luò) IO 控制卡,采用優(yōu)化的網(wǎng)絡(luò)通訊協(xié)議可以實(shí)現(xiàn)實(shí)時(shí)的 IO
    發(fā)表于 05-10 15:38 ?0次下載

    阿爾泰科技 運(yùn)動(dòng)控制卡的簡(jiǎn)要介紹

    軸協(xié)調(diào)控制種高性能的步進(jìn)/伺服電機(jī)運(yùn)動(dòng)控制卡,包括脈沖輸出、脈沖計(jì)數(shù)、數(shù)字輸入、數(shù)字輸出、D/A輸出等功能,它能夠發(fā)出連續(xù)的、高頻率的脈沖串,運(yùn)
    的頭像 發(fā)表于 06-14 15:39 ?800次閱讀

    運(yùn)動(dòng)控制卡與PLC的區(qū)別

    PLC專長(zhǎng)在于邏輯IO控制運(yùn)動(dòng)控制卡就跟專業(yè)伺服電機(jī)的控制對(duì)運(yùn)動(dòng)而已他的指令很簡(jiǎn)單
    發(fā)表于 06-29 14:13 ?2265次閱讀

    運(yùn)動(dòng)控制卡伺服電機(jī)如何控制

    運(yùn)動(dòng)控制卡伺服電機(jī)控制是現(xiàn)代工業(yè)自動(dòng)化領(lǐng)域中項(xiàng)重要的技術(shù),它涉及到運(yùn)動(dòng)控制卡、伺服電機(jī)、
    的頭像 發(fā)表于 06-12 14:13 ?779次閱讀