C PC與三菱Q系列PLC通訊小實驗中遇到的問題

2021-08-10 01:16:08 字數 2485 閱讀 1508

解決:this.invoke(new methodinvoker(delegate()

));2.想要程式一直讀取plc暫存器的值並顯示出來,於是使用了乙個while迴圈,但這時結果顯示有誤。

解決:將這個while迴圈寫入執行緒中。

注意使用執行緒的話,需要引用庫,新增乙個using system.threading;

new thread(delegate()

else if (lpshdevicevalue == 0)

else

this.lamp.text = lpshdevicevalue.tostring();

}));}}

}).start();

3.win10系統,debug的時候出現錯誤號:80040154,顯示註冊類問題。

解決:將執行平台變為x86,configuration manager-active solution platform(x86)

4.使用readdevicerandom2(lpszdevicename, inumberofdevicename, out lpshdevicevalue)函式時,當需要讀取幾個連續的device時,需要將這幾個裝置名稱用回車間隔開來。

lpszdevicename = "sd210" + "\n" + "sd211" + "\n" + "sd212" + "\n" + "sd213";

rreturncode = act.readdevicerandom2(lpszdevicename, inumberofdevicename, out lpshdevicevalue[0]);

這樣就會返回一串值的位址。

5.字串的擷取

tihex1 = weekhex.substring(0, 2) + datehex.substring(0, 2);

0是擷取的起始位置(也就是最高位),2是需要擷取的字元個數。

6.十進位制轉換成十六進製制及字串

this.showread.text = lpshdevicevalue.tostring();//轉換字串

displaydata = lpshdevicevalue.tostring("x");//轉換十六進製制

7.將ascii碼轉換成十進位制數

//byte array = system.text.encoding.ascii.getbytes (lpshdevicevalue.tostring());

//string asciistr2 = null;

//for (int i = 0; i < array.length; i++)

//將十進位制轉換成ascii碼

displaydata = lpshdevicevalue.tostring("x");

byte  array = new byte[(displaydata.length+1)/2];

int index = ((displaydata.length + 1) / 2)-1;

for (int i = 0; i < displaydata.length; i += 2)

//注意這裡,由於plc中儲存時低八位與高八位呼喚,所以這裡將displaydata最高位賦值給array最低位

8.什麼時候需要用到強制轉換

int是32位,short是16位

將short轉換成int是可以自動轉換

將int換成short需要強制轉換

9.乙個以bcd碼形式在plc儲存的值,若它以十進位制形式作為返回值,則這個返回值的十六進製制是這個bcd碼

例如:乙個bcd碼是0001 0111 0001 0000,即1710

將這個二進位制bcd碼轉換成十進位制就是5904,而5904的十六進製制正好是1710

10.三菱q系列plc,儲存cpu時間的暫存器

sd210,年的低兩位,月;sd211,日期,小時;sd212,分鐘,秒鐘;sd213,年的高兩位,星期

11.基於vs讀取三菱q系列plc的步驟

step1:新增引用,actutltypelib

step2:定義乙個這樣的類,actutltype act = new actutltype();//act是這類的名稱

step3:開啟,讓pc開始讀取plc程式,ireturncode =act.open();

若返回0,則開啟成功

step4:讀取,ireturncode = act.readdevicerandom2( lpszdevicename,inumberofdevicename,out lpshdevicevalue);

寫入,wreturncode = act.writedevicerandom2(lpszdevicename, inumberofdevicename, ref lpshdevicevalue);

step5:停止讀取,returncode = act.close();

12.使用communication setting utility建立乙個新的logical station number時,最後提示失敗的話。

嘗試使用管理員身份開啟就可以解決了。

三菱FX系列PLC學習

1.plc工作原理 plc將程式儲存在使用者儲存器當中,驅動其執行,相對比微型計算機軟體,plc程式則不同的是,微型計算機整個流程則是從規定的開始 至結束完整工作流程。相對與plc執行,則是從位於0位址開始,掃瞄完成整個程式的位址,則算完成了一次掃瞄週期,然後再從新從0位址開 始掃瞄,整個工作流程為...

三菱Q系列讀寫資料

這兩天看了下三菱q系列的mc協議,網上沒找到類似的delphi 自己手寫乙份,以下是傳送讀指令的 貼出來,有用的朋友可以拿去看看,注 這份是qna的c24模組的幀3c相容的第四種格式的協議規範,時間關係,其他的格式沒寫,有需要的博友到通訊手冊裡找找就有了。procedure tform1.butto...

三菱FX系列PLC的通訊協議

一 fx系列與計算機通訊所用到的命令碼 命令命令碼 目標裝置 元件讀取 cmd 0 x,y,m,s,t,c,d 元件寫入 cmd 1 x,y,m,s,t,c,d 強迫 on cmd 7 x,y,m,s,t,c 強迫 off cmd 8 x,y,m,s,t,c 所用字元 enq05h 來自計算機的請求...