衡阳派盒市场营销有限公司

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

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

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

簡單易用的以太網(wǎng)IO控制卡:C#讀寫測試

正運動技術(shù) ? 來源:正運動技術(shù) ? 作者:正運動技術(shù) ? 2023-02-13 09:37 ? 次閱讀

今天,正運動小助手給大家分享一下運動控制卡之ECIO系列IO卡的用法,C#語言進行ECI IO卡的開發(fā)以及測試多個IO讀寫的交互速度。

一、ECI0032/ECI0064 IO卡的硬件介紹

1.功能介紹

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

poYBAGPpkQ2ATFNqAAM8j2MaMEQ771.pngECI0032 IO控制卡

pYYBAGPpkROAXfmgAALZ_SEqMic038.pngECI0064?IO控制卡

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

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

poYBAGPpkRiANxaOAACdmwbQ808799.pngpYYBAGPpkR2AJVELAAJY-L-59ts049.pngECI0032系統(tǒng)架構(gòu)圖

pYYBAGPpkSKAZzycAAJ704Cd52A846.pngECI0064系統(tǒng)架構(gòu)圖

2.硬件接口

pYYBAGPpkSaAXjIVAAD8adkg-go471.png通用輸入口電路圖

poYBAGPpkSuAPWuJAACzbsJBewQ437.png通用輸入口接線參考圖

pYYBAGPpkS-AQi1DAAEQyaRWqGw029.png通用輸出口電路圖

pYYBAGPpkTWAQN0VAADnyUi6DaE381.png通用輸出口接線參考圖

3.控制器基本信息

poYBAGPpkTmACCi7AADjwgy_HoE767.png

二、C#語言進行ECI IO卡的開發(fā)

(一)新建WinForm項目并添加函數(shù)庫

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

poYBAGPpkT-ANEu0AADLY_D7w18175.png

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

pYYBAGPpkUOAfUuEAAGmfNRUuCE104.png

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

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

poYBAGPpkUiARRqmAACmpbr-gN8693.png

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

pYYBAGPpkUyAeJz2AABvY8Eg3Dc151.png

3)選擇“Windows平臺”文件夾。

pYYBAGPpkVSAFWI2AACQkjL0iSk800.png

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

pYYBAGPpkVmAJ1V3AABXzXEOPew653.png

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

poYBAGPpkV6ASbTHAABXNEr3tU0801.png

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

poYBAGPpkWOAU2kRAACaYcnAdEI475.png

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

1)將zmcaux.cs文件復制到新建的項目里面中。

pYYBAGPpkWmAUFNzAAD80H8rBRE931.png

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

pYYBAGPpkW2AeSXSAADeT2cFJDU044.png

5.用vs打開新建的項目文件,在右邊的解決方案資源管理器中點擊顯示所有文件,然后鼠標右擊zmcaux.cs文件,點擊包括在項目中。

pYYBAGPpkXKAX9NtAARAb1NaKcw310.png

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

pYYBAGPpkXiARMcMAAEv-ng48qU376.png

7.至此,項目新建完成,可進行C#項目開發(fā)。

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

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

poYBAGPpkX6AX9-jAACvq0Opucg925.png

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

pYYBAGPpkcGAHChpAABHE1U5Z9c554.png

3.快速讀取多個輸入口當前狀態(tài)接口說明。

poYBAGPpkcaAK-0uAABDDniczdY980.png

4.快速讀取多個輸出口當前狀態(tài)接口說明。

pYYBAGPpkc6AIB4jAABM8BpmCrQ947.png

三、C#快速讀取多個IO狀態(tài)的測試例程

1.例程界面

poYBAGPpkdSAcuPzAAEm6r2uTRc517.png

2.相關(guān)代碼

①鏈接按鈕的事件處理函數(shù)中調(diào)用鏈接控制器的接口函數(shù)ZAux_OpenEth(),與控制器進行鏈接,鏈接成功后啟動定時器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("控制器鏈接失敗,請檢測IP地址!", "警告");
       LinkButton.BackColor = Color.FromArgb(255, 200, 200);
   }
}


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

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


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

//多個輸入口狀態(tài)讀取交互速度測試
private void ReadInTest_Click(object sender, EventArgs e)
{
   int j, k;
   int testNum = Convert.ToInt32(TestNum.Text.ToString());
   int readInNum = Convert.ToInt32(ReadInNum.Text.ToString());
   //快速讀取輸入口狀態(tài)接口時間測試
   byte[] InState = new byte[4];
   DateTime beforeDT = System.DateTime.Now;
   for (int count = 0; count < testNum; count++)
   {
       zmcaux.ZAux_GetModbusIn(g_handle, 0, readInNum, InState);
       if (count % 100 == 0)
       {
           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);
               }
           }
       }
   }
   DateTime afterDT = System.DateTime.Now;
   //計算beforeDT與afterDT的時間差
   TimeSpan ts = afterDT - beforeDT;
   //總耗時 ms
   ReadInTotTime.Text = ts.TotalMilliseconds.ToString("0.00");
   //平均耗時 us
   ReadInTime.Text = (ts.TotalMilliseconds * 1000 / testNum).ToString("0.00");
}


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

//多個輸出口狀態(tài)讀取交互速度測試
private void ReadOutTest_Click(object sender, EventArgs e)
{
   int j, k;
   int testNum = Convert.ToInt32(TestNum.Text.ToString());
   int readOutNum = Convert.ToInt32(ReadOutNum.Text.ToString());
   //快速讀取輸入口狀態(tài)接口時間測試
   byte[] OutState = new byte[4];
   DateTime beforeDT = System.DateTime.Now;
   for (int count = 0; count < testNum; count++)
   {
       zmcaux.ZAux_GetModbusOut(g_handle, 0, readOutNum, OutState); 
       if (count % 100 == 0)
       {
           for (int i = 0; i < 32; i++)
           {
               j = i / 8;
               k = i % 8;
               if (((OutState[j] >> k) & 1) == 1)
               {
                   OutStatus[i].BackColor = Color.FromArgb(200, 255, 200);
               }
               else
               {
                   OutStatus[i].BackColor = Color.FromArgb(255, 200, 200);
               }
           }
       }
   }
   DateTime afterDT = System.DateTime.Now;
   //計算beforeDT與afterDT的時間差
   TimeSpan ts = afterDT - beforeDT;
   //總耗時 ms
   ReadOutTolTime.Text = ts.TotalMilliseconds.ToString("0.00");
   //平均耗時 us
   ReadOutTime.Text = (ts.TotalMilliseconds * 1000 / testNum).ToString("0.00");
}


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

//多個輸出口狀態(tài)設(shè)置交互速度測試
private void WriteOutTest_Click(object sender, EventArgs e)
{
   int testNum = Convert.ToInt32(TestNum.Text.ToString());
   int writeOutNum = Convert.ToInt32(WriteOutNum.Text.ToString());
   //快速讀取輸入口狀態(tài)接口時間測試
   byte[] OutState = new byte[4];
   DateTime beforeDT = System.DateTime.Now;
   for (int count = 0; count < testNum; count++)
   {
       zmcaux.ZAux_GetModbusOut(g_handle, 0, writeOutNum, OutState);
   }
   DateTime afterDT = System.DateTime.Now;
   //計算beforeDT與afterDT的時間差
   TimeSpan ts = afterDT - beforeDT;
   //總耗時 ms
   WriteOutTolTime.Text = ts.TotalMilliseconds.ToString("0.00");
   //平均耗時 us
   WriteOutTime.Text = (ts.TotalMilliseconds * 1000 / testNum).ToString("0.00");
}

3.多個IO狀態(tài)與上位機交互速度測試結(jié)果

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

poYBAGPpkyKAATA5AAE4GxSMT1Q476.png

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

poYBAGPpkyiAEUHWAAE9y6sUcFw841.png

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

poYBAGPpkzyAZTYxAAEzAshm7y4218.png

四、分析與結(jié)論

以上分別是對32個輸入口的讀速度、32個輸出口的讀速度以及32個輸出口的寫速度進行測試,從上面的運行效果圖的數(shù)據(jù)顯示來看,無論是輸入口還是輸出口,它們的交互速度都保持在200us左右。當測試次數(shù)從1000次增加到1W次,甚至10W次時,交互速度依舊保持在200us左右。測試效果十分穩(wěn)定。測試數(shù)據(jù)如下表所示:

poYBAGPpk0iAdCgOAAASYnlWAtE478.png

本次,正運動技術(shù)簡單易用的以太網(wǎng)IO控制卡:C#讀寫測試,就分享到這里。

更多精彩內(nèi)容請關(guān)注“正運動小助手”公眾號,需要相關(guān)開發(fā)環(huán)境與例程代碼,請咨詢正運動技術(shù)銷售工程師

本文由正運動技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學習,一起提高中國智能制造水平。文章版權(quán)歸正運動技術(shù)所有,如有轉(zhuǎn)載請注明文章來源。

審核編輯黃宇

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

    關(guān)注

    0

    文章

    461

    瀏覽量

    39375
  • 測試
    +關(guān)注

    關(guān)注

    8

    文章

    5382

    瀏覽量

    127075
  • 以太網(wǎng)
    +關(guān)注

    關(guān)注

    40

    文章

    5460

    瀏覽量

    172751
收藏 人收藏

    評論

    相關(guān)推薦

    簡單易用以太網(wǎng)數(shù)據(jù)采集應(yīng)用開發(fā)之C#

    C#語言以太網(wǎng)數(shù)據(jù)采集的開發(fā)。
    的頭像 發(fā)表于 05-17 14:25 ?842次閱讀
    <b class='flag-5'>簡單</b><b class='flag-5'>易用</b>的<b class='flag-5'>以太網(wǎng)</b>數(shù)據(jù)采集<b class='flag-5'>卡</b>應(yīng)用開發(fā)之<b class='flag-5'>C#</b>

    PCIe EtherCAT實時運動控制卡PCIE464的IO與編碼器讀寫應(yīng)用

    C#進行PCIe EtherCAT運動控制卡的項目開發(fā)和快速讀取多個IO和軸編碼器位置的例程。
    的頭像 發(fā)表于 07-17 14:47 ?889次閱讀
    PCIe EtherCAT實時運動<b class='flag-5'>控制卡</b>PCIE464的<b class='flag-5'>IO</b>與編碼器<b class='flag-5'>讀寫</b>應(yīng)用

    EtherCAT運動控制卡之ECI2820如何使用

    軸直線插補、任意圓弧插補、空間圓弧、螺旋插補、電子凸輪、電子齒輪、同步跟隨、虛擬軸、機械手指令等;采用優(yōu)化的網(wǎng)絡(luò)通訊協(xié)議可以實現(xiàn)實時的運動控制。  ECI2828系列運動運動控制卡支持以太網(wǎng),232 通訊接口和電腦相連,接收電
    發(fā)表于 09-01 06:24

    C#教程之IC讀寫

    C#教程之IC讀寫,很好的C#資料,快來學習吧。
    發(fā)表于 04-21 09:52 ?26次下載

    C#教程之視頻采集讀寫

    C#教程之視頻采集讀寫,很好的C#資料,快來學習吧。
    發(fā)表于 04-21 09:52 ?27次下載

    以太網(wǎng)遠程IO模塊的選型

    以太網(wǎng)遠程IO模塊
    發(fā)表于 11-17 15:24 ?1119次閱讀
    <b class='flag-5'>以太網(wǎng)</b>遠程<b class='flag-5'>IO</b>模塊的選型

    正運動ECI0032 IO控制卡用戶手冊

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

    正運動ECI0064 IO控制卡用戶手冊

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

    正運動ECI0064C IO控制卡用戶手冊

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

    EtherCAT運動控制卡的硬件接線與C#的硬件外設(shè)讀寫與回零運動

    EtherCAT運動控制卡進行硬件接線與C#的硬件外設(shè)讀寫與回零運動
    的頭像 發(fā)表于 11-08 16:26 ?2521次閱讀
    EtherCAT運動<b class='flag-5'>控制卡</b>的硬件接線與<b class='flag-5'>C#</b>的硬件外設(shè)<b class='flag-5'>讀寫</b>與回零運動

    EtherCAT運動控制卡的硬件接線與C#的單軸運動控制

    EtherCAT運動控制卡實現(xiàn)C#的單軸運動控制的例程
    的頭像 發(fā)表于 10-22 16:07 ?3005次閱讀
    EtherCAT運動<b class='flag-5'>控制卡</b>的硬件接線與<b class='flag-5'>C#</b>的單軸運動<b class='flag-5'>控制</b>

    具有PMIC和汽車以太網(wǎng)的AM263x控制卡

    電子發(fā)燒友網(wǎng)站提供《具有PMIC和汽車以太網(wǎng)的AM263x控制卡.pdf》資料免費下載
    發(fā)表于 10-31 09:33 ?0次下載
    具有PMIC和汽車<b class='flag-5'>以太網(wǎng)</b>的AM263x<b class='flag-5'>控制卡</b>

    以太網(wǎng)IO控制卡C#實時讀寫時間測試

    C#語言進行ECI IO的項目開發(fā)和快速讀取多個IO狀態(tài)與上位機交互速度的測試結(jié)果
    的頭像 發(fā)表于 11-21 13:50 ?288次閱讀
    <b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>IO</b><b class='flag-5'>控制卡</b>:<b class='flag-5'>C#</b>實時<b class='flag-5'>讀寫</b>時間<b class='flag-5'>測試</b>

    運動控制卡網(wǎng)絡(luò)通訊的心跳檢測之C#上位機編程

    使用C#上位機編程實現(xiàn)運動控制卡網(wǎng)絡(luò)通訊的心跳檢測功能
    的頭像 發(fā)表于 12-24 10:54 ?248次閱讀
    運動<b class='flag-5'>控制卡</b>網(wǎng)絡(luò)通訊的心跳檢測之<b class='flag-5'>C#</b>上位機編程
    百家乐官网有试玩的吗| 博狗百家乐官网真实| 百家乐官网有哪些注| 百家乐官网试玩活动| 滨海湾百家乐官网娱乐城| 百家乐官网直揽经验| 视频百家乐官网平台| 百家乐记算| 大发888游戏平台黄埔| 前郭尔| 百家乐官网赌博破解方法| 百家百家乐官网官网网站| 百家乐推锅| 大发888玩法技巧| 百家乐官网游戏的玩法| 爱拼百家乐官网的玩法技巧和规则| 电玩城百家乐技巧| 博彩机| 德州扑克| 百家乐官网视频麻将游戏| 综合百家乐官网博彩论坛| 91百家乐的玩法技巧和规则| 大赢家娱乐| 百家乐官网正规站| 百家乐牌路图表下| 城步| 院子围墙砌18还是24| 百家乐透明发牌机| 辉县市| 杨公24山分金兼向吉凶| 大发888手机版| 百家乐官网怎么推算| 百家乐哪家有优惠| 威尼斯人娱乐场首页| 百家百家乐视频游戏世界| 西吉县| 南京百家乐官网电| 大发888提款怎么提| 百家乐官网群121398015| 百家乐赌局| 泰安市|