在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

分享一下運動控制卡之ECIO系列IO卡的用法

伺服與運動控制 ? 來源:伺服與運動控制 ? 2023-02-17 17:51 ? 次閱讀

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

01 ECI0032/ECI0064 IO卡硬件介紹

1.功能介紹

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

ECI0032/ECI0064等ECI0系列采用了優化的網絡通訊協議,可以實現實時的邏輯控制和IO狀態的監控。

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

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

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

ECI0032系統架構圖

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

ECI0064系統架構圖

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#語言進行ECI IO卡的開發

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

1.在VS2015菜單“文件”→“新建”→“項目”,啟動創建項目向導。

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

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

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

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

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

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

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

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

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

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

4)根據需要選擇對應的函數庫,這里選擇64位庫。

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

5)解壓C#壓縮包,里面有C#對應的函數庫。

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

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

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

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

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

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

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

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

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

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

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

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

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

(二)PC函數介紹

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

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

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

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

3.快速讀取多個輸入口當前狀態接口說明。

指令200 ZAux_GetModbusIn
指令原型 int32 __stdcall ZAux_GetModbusIn (ZMC_HANDLE handle,int ionumfirst, int ionumend, uint8 * pValueList);
指令說明 快速讀取多個當前的輸入狀態
輸入參數
參數名 描述
handle 連接句柄
ionumfirst IN起始編號
ionumend IN結束編號
輸出參數
參數名 描述
pValueList 位狀態,按位存儲
返回值 成功返回值為0,非0詳見錯誤碼說明
指令示例 多個IO讀取
詳細說明 Modbus方式獲取出來的狀態是未反轉前的狀態。如果有用INVERT_IN反轉,讀取的狀態可能就是不對的

4.快速讀取多個輸出口當前狀態接口說明。

指令201 ZAux_GetModbusOut
指令原型 int32 __stdcall ZAux_GetModbusOut (ZMC_HANDLE handle,int ionumfirst, int ionumend, uint8 * pValueList);
指令說明 快速讀取多個當前的輸出狀態。Modbus方式獲取出來的狀態是未反轉前的狀態。如果有用INVERT_IN反轉,讀取的狀態可能就是不對的
輸入參數
參數名 描述
handle 連接句柄
ionumfirst OUT起始編號
ionumend OUT結束編號
輸出參數
參數名 描述
pValueList 位狀態,按位存儲
返回值 成功返回值為0,非0詳見錯誤碼說明
指令示例 多個IO讀取
詳細說明 Modbus方式獲取出來的狀態是未反轉前的狀態。如果有用INVERT_IN反轉,讀取的狀態可能就是不對的

03 C#快速讀取多個IO狀態測試例程

1.例程界面

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

2.相關代碼

①鏈接按鈕的事件處理函數中調用鏈接控制器的接口函數ZAux_OpenEth(),與控制器進行鏈接,鏈接成功后啟動定時器1監控控制器的IO狀態。

//鏈接控制器
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監控控制器的IO狀態。

//定時器更新IO信息
private void timer1_Tick(object sender, EventArgs e)
{
    int j, k;
    int TestNum = 50;
    //快速讀取輸入口狀態接口時間測試
    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;
//計算beforeDT與afterDT的時間差
TimeSpants=afterDT-beforeDT;
InMoitoring.Text="輸入口監控_刷新時間:"+(ts.TotalMilliseconds*1000/TestNum).ToString()+"us";
//快速讀取輸出口狀態接口時間測試
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;
//計算beforeDTOP與afterDTOP的時間差
ts=afterDTOP-beforeDTOP;
OutMoitoring.Text="輸出口監控_刷新時間:"+(ts.TotalMilliseconds*1000/TestNum).ToString()+"us";
}

③多個輸入口狀態讀取速度測試函數。

//多個輸入口狀態讀取交互速度測試
private void ReadInTest_Click(object sender, EventArgs e)
{
intj,k;
inttestNum=Convert.ToInt32(TestNum.Text.ToString());
intreadInNum=Convert.ToInt32(ReadInNum.Text.ToString());
//快速讀取輸入口狀態接口時間測試
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;
//計算beforeDT與afterDT的時間差
TimeSpants=afterDT-beforeDT;
//總耗時ms
ReadInTotTime.Text=ts.TotalMilliseconds.ToString("0.00");
//平均耗時us
ReadInTime.Text=(ts.TotalMilliseconds*1000/testNum).ToString("0.00");
}

④多個輸出口狀態讀取速度測試函數。

//多個輸出口狀態讀取交互速度測試
private void ReadOutTest_Click(object sender, EventArgs e)
{
    int j, k;
inttestNum=Convert.ToInt32(TestNum.Text.ToString());
intreadOutNum=Convert.ToInt32(ReadOutNum.Text.ToString());
//快速讀取輸入口狀態接口時間測試
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;
//計算beforeDT與afterDT的時間差
TimeSpants=afterDT-beforeDT;
//總耗時ms
ReadOutTolTime.Text=ts.TotalMilliseconds.ToString("0.00");
//平均耗時us
ReadOutTime.Text=(ts.TotalMilliseconds*1000/testNum).ToString("0.00");
}

⑤多個輸出口狀態設置速度測試函數。

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

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

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

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

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

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

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

(4)32個輸入輸出口定時器實時交互的測試結果演示。

04 分析與結論

以上分別是對32個輸入口的讀速度、32個輸出口的讀速度以及32個輸出口的寫速度進行測試,從上面的運行效果圖的數據顯示來看,無論是輸入口還是輸出口,它們的交互速度都保持在200us左右。

當測試次數從1000次增加到1W次,甚至10W次時,交互速度依舊保持在200us左右。測試效果十分穩定。測試數據如下表所示:

測試次數 讀32個輸入口 讀32個輸出口 寫32個輸出口
1000 228.39us 197.47us 196.47us
10000 225.99us 195.29us 194.17us
100000 225.37us 194.59us 194.45us






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 以太網
    +關注

    關注

    40

    文章

    5466

    瀏覽量

    172871
  • CAN總線
    +關注

    關注

    145

    文章

    1957

    瀏覽量

    131167
  • RS232接口
    +關注

    關注

    0

    文章

    85

    瀏覽量

    20633
  • 運動控制卡
    +關注

    關注

    7

    文章

    114

    瀏覽量

    15535

原文標題:簡單易用的以太網IO控制卡:C#讀寫測試

文章出處:【微信號:伺服與運動控制,微信公眾號:伺服與運動控制】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    EtherCAT運動控制卡的自定義運動曲線

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

    運動控制卡

    本人對運動控制卡無所知,想問一下運動控制是不是也像數據采集
    發表于 06-05 00:45

    運動控制卡

    有沒有高手懂得弄運動控制卡?可以教一下小白我,怎么入門,用什么軟件去編程他。
    發表于 06-13 10:50

    ACS運動控制卡 精選資料分享

    簡介: ACS是款以色列的運動控制卡控制直線電機,運動精度到u級別。常用在工業領域。1.使用:運動
    發表于 09-01 07:31

    分享一下運動控制卡應用開發教程之Python

    與大家分享一下運動控制卡應用開發教程之Python。 、ECI2828硬件介紹ECI2828系列運動
    發表于 09-01 08:36

    EtherCAT運動控制卡ECI2820如何使用

    今天,正運動技術給大家分享一下EtherCAT運動控制卡ECI2820如何使用C#實現運動暫停
    發表于 09-01 06:24

    六軸運動控制卡介紹

    六軸運動控制卡
    發表于 07-16 11:29 ?1.1w次閱讀

    研控運動控制卡的編程小技巧

    運動控制卡開發應用中,運動順序執行是最常見的編程問題之,關系到設備后續控制動作能否正常運行。下面,我們分享研控
    的頭像 發表于 12-24 18:57 ?2209次閱讀

    運動控制卡能仿真嗎?

    其實不同品牌運動控制卡對仿真的支持是不樣的,有些品牌不支持,有的品牌則支持,今天跟大家分享一下,基于正運動Zmotion
    的頭像 發表于 02-22 15:54 ?1504次閱讀
    <b class='flag-5'>運動</b><b class='flag-5'>控制卡</b>能仿真嗎?

    運動ECI0032 IO控制卡用戶手冊

    ECI0032 是正運動技術開發的款網絡 IO 控制卡,采用優化的網絡通訊協議可以實現實時的 IO
    發表于 05-10 09:15 ?0次下載

    運動ECI0064 IO控制卡用戶手冊

    ECI0064 是正運動技術開發的款網絡 IO 控制卡,采用優化的網絡通訊協議可以實現實時的 IO
    發表于 05-10 15:38 ?0次下載

    阿爾泰科技 運動控制卡的簡要介紹

    軸協調控制種高性能的步進/伺服電機運動控制卡,包括脈沖輸出、脈沖計數、數字輸入、數字輸出、D/A輸出等功能,它能夠發出連續的、高頻率的脈沖串,
    的頭像 發表于 06-14 15:39 ?904次閱讀

    運動控制卡與PLC的區別

    PLC專長在于邏輯IO控制運動控制卡就跟專業伺服電機的控制運動而已他的指令很簡單
    發表于 06-29 14:13 ?2418次閱讀

    運動控制卡伺服電機如何控制

    運動控制卡伺服電機控制是現代工業自動化領域中項重要的技術,它涉及到運動控制卡、伺服電機、
    的頭像 發表于 06-12 14:13 ?1070次閱讀

    運動控制卡周期上報實時數據IO狀態C++篇

    使用C++進行運動控制卡的周期上報功能實現
    的頭像 發表于 12-17 13:59 ?373次閱讀
    <b class='flag-5'>運動</b><b class='flag-5'>控制卡</b>周期上報實時數據<b class='flag-5'>IO</b>狀態<b class='flag-5'>之</b>C++篇
    主站蜘蛛池模板: 狼狼色丁香久久女婷婷综合 | 韩国三级hd中文字幕久久精品 | 奇米影视大全 | 天天爽夜夜爽人人爽免费 | 又黄又湿又爽吸乳视频 | 韩国在线a免费观看网站 | 欧美黑人黄色片 | 日本口工福利漫画无遮挡 | 精品成人毛片一区二区视 | 欧美日韩国产乱了伦 | 又粗又大的机巴好爽欧美 | 日本www色视频成人免费网站 | 欧美精品xx | 在线看黄网站 | 玖操在线 | 色站视频 | 日本又粗又长一进一出抽搐 | 天堂网最新 | 好男人社区www在线资源视频 | 亚洲综合免费 | 国产二三区 | 午夜三级视频 | 在线亚洲精品中文字幕美乳 | 天天综合网在线 | 久久精品国产精品亚洲毛片 | 欧美在线视频一区二区三区 | 乱小说录目伦200篇将曲勒 | 色噜噜狠狠色综合欧洲 | 亚洲色图综合在线 | 色一情一乱一乱91av | 在线看逼 | 国产精品视频永久免费播放 | 日本大片黄色 | 你懂的福利网站 | 久久午夜综合久久 | a天堂中文在线官网 | 在线五月婷婷 | freesexvideo性欧美医生护士 | 天天干天天谢 | 最近高清免费观看视频 | 人人做人人爽国产视 |