【C#上位機二次開發文檔】
下面是針對那些有一定C#基礎,需要做二次開發的上位機工程師,整理的一些C#操作PLC的方法。
PCHMI.PClass.SystemRun;//判斷控件是否啟動完成,只有啟動完成之后才可以使用操控PLC的指令。
PCHMI.PClass.Login();//權限登錄,輸入密碼
PCHMI.PClass.UpPwd();//權限修改,修改密碼
PCHMI.PClass.IsPlcLink(0);//判斷通訊狀態,"0"表示第一個PLC
PCHMI.PClass.NowAuthority = 1;//獲取或設置當前權限
PCHMI.PClass.Language = 0; //獲取或設置當前使用的語言
PCHMI.CONFIG.PLC_OFF[0]=True//關閉第一個PLC通訊
PCHMI.UpConfig.ReBoot()//重啟程序,可以用在長時間通訊超時,無法恢復的情況下使用。
new PCHMI.UpConfig().ShowDialog();//調用通信配置窗口
new PCHMI.PClass().Speech("你好!");//將文字轉語音播放出來
new PCHMI.MODBUS監控豎屏().Show();//打開Modbus-Tcp服務器監控窗口
【文件讀寫】
new PCHMI.PClass().WFile(@"D:\PLCIP.TXT", "123");//將字符串"123"保存到指定的文件
new PCHMI.PClass().RFile(@"D:\PLCIP.TXT");//從指定的文件讀取內容
【配方功能】
new PCHMI.配方().CALL_TECH("配方文件名", "配方名");//從指定的配方文件調用配方
new PCHMI.配方().SAVE_TECH("配方文件名"); //保存指定配方文件名的配方
new PCHMI.配方().DEL_TECH("配方文件名"); //刪除指定配方文件名的配方
【打印功能】
new PCHMI.PRINT().PrintControl(面板1, "", true);//打印控件里的畫面 1、表控件名 2、打印機驅動名 3、是否預覽
PCHMI.PRINTDGV.Print(數據表1.GridView,"","");//打印表格 1、表控件名 2、打印機驅動名 3、標題
PCHMI.PRINTDGV.PrintPreview(數據表1.GridView,"","");//打印預覽表格 1、表控件名 2、打印機驅動名 3、標題
【數據庫操作】
里面使用的是SQL標准語法,不了解的先到網上學習SQL語法
//創建一個表
new PCHMI.DATABASE().SQL_EXECUTE(0, "CREATE TABLE TAB(A INTEGER,B INTEGER)");
//添加一條記錄到數據庫
new PCHMI.DATABASE().SQL_EXECUTE(0, "INSERT INTO [TAB$] VALUES(100,200)");
//刪除A=100的這條記錄
new PCHMI.DATABASE().SQL_EXECUTE(0, "DELETE FROM [TAB$] WHERE A=100");
//修改字段內容,記得加條件,不然、所有記錄一起修改
new PCHMI.DATABASE().SQL_EXECUTE(0, "UPDATE [TAB$] SET A=50,B=60");
//查詢第一條記錄
DataTable DTAB=new PCHMI.DATABASE().SQL_SELECT(0, "SELECT TOP 1 * FROM [TAB$]");
//DataTable轉換成List<string[]>類型
List<string[]> VAL = new PCHMI.DATABASE().DTAB_LISTSTRs(DTAB);
【讀寫寄存器】
5.0之后的版本盡量使用下面的方法,這些方法可以支持標簽地址,使用標簽地址的時候前面需要加"U:",之前的方法可能在后面的版本中逐漸取消掉。
//寫寄存器(寫U地址用下面的SET方法,使用PLC地址請使用后面的SEND方法)
new PCHMI.VAR().SET_BIT(0,"U0.0", 1); //位寫入
new PCHMI.VAR().SET_WORD(0,"U00", 1); //字寫入
new PCHMI.VAR().SET_WORDs(0, "U00", new UInt16[]{ 1, 2, 3 });//多字寫入
new PCHMI.VAR().SET_DWORD(0, "U00", 1);//雙字寫入
new PCHMI.VAR().SET_LWORD(0, "U00", 1);//四字寫入
new PCHMI.VAR().SET_INT16(0, "U00", 1);//INT16寫入
new PCHMI.VAR().SET_INT32(0, "U00", 1);//INT32字寫入
new PCHMI.VAR().SET_INT64(0, "U00", 1);//INT64字寫入
new PCHMI.VAR().SET_F32(0, "U00", 0.1f);//F32字寫入
new PCHMI.VAR().SET_STRING(0, "U00", "HELLO WORLD!");//寫入字符串
//讀寄存器(讀寄存器,如果使用了在界面中從未使用過的地址,第一次讀取系統需要注冊,可能讀取上來的數據為空。之后再讀取就有數據了。如果不想要第一次讀取的空數據,可以在窗口的LOAD事件里在啟動代碼的后面對地址讀取一次,下次再讀取相同的地址就不會為空數據了。)
new PCHMI.VAR().GET_BIT(0, "D0.0");//讀位
new PCHMI.VAR().GET_INT16(0, "D00");//讀INT16
new PCHMI.VAR().GET_INT32(0, "D00");//讀INT32
new PCHMI.VAR().GET_UINT16(0, "D00");//讀UINT16
new PCHMI.VAR().GET_UINT32(0, "D00");//讀UINT32
new PCHMI.VAR().GET_F32(0, "D00");//讀F32
new PCHMI.VAR().GET_F32s(0, "D00",10);//讀多個F32
new PCHMI.VAR().GET_STRING(0, "D00", 10);//讀字符串
new PCHMI.VAR().GET_SIEMENS_STRING(0, "D00", 10);//讀西門子字符串
new PCHMI.VAR().GET_INT16s(0, "D00", 10);//讀多個INT16
new PCHMI.VAR().GET_INT32s(0, "D00", 10);//讀多個INT32
new PCHMI.VAR().GET_UINT16s(0, "D00", 10);//讀多個UINT16
new PCHMI.VAR().GET_UINT32s(0, "D00", 10);//多個讀UINT32
//控制PLC寄存器
new PCHMI.VAR().SEND_CTRL(0, "D0.0", "置位", "");
new PCHMI.VAR().SEND_CTRL(0, "D0.0", "復位", "");
new PCHMI.VAR().SEND_CTRL(0, "D0.0", "瞬動", "");
new PCHMI.VAR().SEND_CTRL(0, "D0.0", "半秒瞬動", "");
new PCHMI.VAR().SEND_CTRL(0, "D0.0", "一秒瞬動", "");
new PCHMI.VAR().SEND_CTRL(0, "D0.0", "反轉", "");
new PCHMI.VAR().SEND_CTRL(0, "D00", "字加", "1");
new PCHMI.VAR().SEND_CTRL(0, "D00", "字減", "1");
new PCHMI.VAR().SEND_CTRL(0, "D00", "雙字加", "1");
new PCHMI.VAR().SEND_CTRL(0, "D00", "雙字減", "1");
new PCHMI.VAR().SEND_CTRL(0, "D00", "字寫入", "1");
new PCHMI.VAR().SEND_CTRL(0, "D00", "雙字寫入", "1");
new PCHMI.VAR().SEND_CTRL(0, "D00", "多字寫入", "1,2,3");
new PCHMI.VAR().SEND_CTRL(0, "D00", "字符串寫入", "HELLO WORLD!");
//寫入PLC寄存器
new PCHMI.VAR().SEND_UINT16s(0, "D00", new UInt16[] { 1, 2, 3 });//向連續PLC地址D00寫入:1,2,3
new PCHMI.VAR().SEND_UINT32s(0, "D00", new UInt32[] { 1, 2, 3 });//向連續PLC地址D00寫入:1,2,3
new PCHMI.VAR().SEND_F32s(0, "D00", new float[] { 1.1f, 2.1f, 3.1f });//向連續PLC地址D00寫入:1.1,2.1,3.1
new PCHMI.VAR().SEND_UINT16s(0, "D00", new UInt16[] { "1", "2", "3" });//向連續PLC地址D00寫入:1,2,3
new PCHMI.VAR().SEND_UINT32s(0, "D00", new UInt32[] { "1", "2", "3" });//向連續PLC地址D00寫入:1,2,3
new PCHMI.VAR().SEND_F32s(0, "D00", new float[] { "1.1", "2.1", "3.1" });//向連續PLC地址D00寫入:1.1,2.1,3.1
new PCHMI.VAR().SEND_BIT(0, "D0.0", 1);//發送位
new PCHMI.VAR().SEND_INT16(0, "D00", 1);//發送INT16
new PCHMI.VAR().SEND_UINT16(0, "D00", 1);//發UINT16
new PCHMI.VAR().SEND_INT32(0, "D00", 1);//發送INT32
new PCHMI.VAR().SEND_UINT32(0, "D00", 1);//發送UINT32
new PCHMI.VAR().SEND_F32(0, "D00", 0.1f);//發送F32
new PCHMI.VAR().SEND_STRING(0, "D00", "HELLO WORLD!");//發送字符串
new PCHMI.VAR().SEND_SIEMENS_STRING(0, "D00", "HELLO WORLD!");//發送西門子字符串
//控制PLC寄存器
new PCHMI.VAR().SEND_VAL(0, "D0.0", "BIT", "1");
new PCHMI.VAR().SEND_VAL(0, "D00", "INT16", "-1");
new PCHMI.VAR().SEND_VAL(0, "D00", "INT32", "-1");
new PCHMI.VAR().SEND_VAL(0, "D00", "UINT16", "1");
new PCHMI.VAR().SEND_VAL(0, "D00", "UINT32", "1");
new PCHMI.VAR().SEND_VAL(0, "D00", "F32", "0.1");
new PCHMI.VAR().SEND_VAL(0, "D00", "STRING", "HELLO WORLD!");
new PCHMI.VAR().SEND_VAL(0, "D00", "SIEMENS_STRING", "HELLO WORLD!");