• <cite id="uwv89"></cite>
      1. 亚洲综合小综合中文字幕,国产久爱免费精品视频,精品国产品香蕉在线,国产午夜精品在人线播放,精品一二三四区在线观看,国产成人无码免费看视频软件 ,色欲久久人妻内射,午夜在线观看成人av
        ronkang
        倍加福總線
        級別: 略有小成
        精華主題: 0
        發(fā)帖數(shù)量: 148 個
        工控威望: 348 點(diǎn)
        下載積分: 914 分
        在線時間: 192(小時)
        注冊時間: 2008-06-24
        最后登錄: 2025-08-25
        查看ronkang的 主題 / 回貼
        樓主  發(fā)表于: 2021-01-13 13:31
        SR20帶7臺G120XA變頻器,走USS通訊,一個子程序中使用7個USS_CTRL指令讀寫變頻器。另一個子程序中使用7個USS_RPM_R指令輪訓(xùn)讀取7臺變頻器電流,現(xiàn)在問題是:
        1.兩個子程序都在主程序中調(diào)用時,USS_RPM_R沒有任何錯誤,但是USS_CTRL平均15秒就會報錯,錯誤代碼2。2這個代碼不知什么原因引起。
        2.主程序中只調(diào)用USS_CTRL這個子程序時,7個USS_CTRL指令無任何錯誤。
        請專家指點(diǎn)一下,USS_RPM_R是輪詢順序執(zhí)行的,應(yīng)該沒有問題,會不會是和USS_CTRL指令沖突了?問題到底出在哪里?有什么解決辦法,麻煩大家了
        zhou1211
        級別: 略有小成
        精華主題: 1 篇
        發(fā)帖數(shù)量: 206 個
        工控威望: 363 點(diǎn)
        下載積分: 1174 分
        在線時間: 66(小時)
        注冊時間: 2013-11-04
        最后登錄: 2025-01-09
        查看zhou1211的 主題 / 回貼
        1樓  發(fā)表于: 2021-01-13 16:08
        你這明顯要分時中斷
        zhou1211
        級別: 略有小成
        精華主題: 1 篇
        發(fā)帖數(shù)量: 206 個
        工控威望: 363 點(diǎn)
        下載積分: 1174 分
        在線時間: 66(小時)
        注冊時間: 2013-11-04
        最后登錄: 2025-01-09
        查看zhou1211的 主題 / 回貼
        2樓  發(fā)表于: 2021-01-14 15:21
        你一個循環(huán)周期很容易出現(xiàn)uss_ctrl 和Uss_RPM_R 時間間隔不夠,這樣就被掛起報錯
        zhou1211
        級別: 略有小成
        精華主題: 1 篇
        發(fā)帖數(shù)量: 206 個
        工控威望: 363 點(diǎn)
        下載積分: 1174 分
        在線時間: 66(小時)
        注冊時間: 2013-11-04
        最后登錄: 2025-01-09
        查看zhou1211的 主題 / 回貼
        3樓  發(fā)表于: 2021-01-14 15:31
        IF iAdrOfInsulation =0 THEN
            iAdrOfInsulation :=91;
        END_IF
        IF bSensorCorrectionHMI THEN
            eCommandNum := 5;
        END_IF
        IF bParamAlterHMI THEN
            eCommandNum := 7;
        END_IF

        CASE eCommandNum OF(*SystemTotalData :=1,SubcircuitAnodeToGlobeResistance,ProductParamRead,SubcircuitCathodeToGlobeResistance,SensorCorrection,AddrAlter,ParamAlter*)
        SystemTotalData:
            wMBAdr := 16#0320;
            iLen    := 7;
            bReadEnable := TRUE;
            bWriteEnable :=FALSE;
        SubcircuitAnodeToGlobeResistance:
            wMBAdr := 16#03E8;
            iLen    := iSubTotal;
            bReadEnable := TRUE;
            bWriteEnable :=FALSE;
        ProductParamRead:
            wMBAdr := 16#0510;
            iLen    := 5;
            bReadEnable := TRUE;
            bWriteEnable :=FALSE;
        SubcircuitCathodeToGlobeResistance:
            wMBAdr := 16#04B0;
            iLen    := iSubTotal;
            bReadEnable := TRUE;
            bWriteEnable :=FALSE;
        SensorCorrection:
            wMBAdr := 16#680;
            wWriteDate    := 16#7;
            bReadEnable := FALSE;
            bWriteEnable :=TRUE;
        AddrAlter:
            bReadEnable := FALSE;
            bWriteEnable :=TRUE;
            wMBAdr := 16#1218;
            IF iWantedAdr <>0 THEN
                wWriteDate    := UINT_TO_WORD(iWantedAdr);
            ELSE
                wWriteDate    := 16#5B;
            END_IF
        ParamAlter:
            bReadEnable := FALSE;
            bWriteEnable :=TRUE;
            IF bSubcircuitCAlterHMI THEN
                wMBAdr := 16#71A;
                wWriteDate    := UINT_TO_WORD(iWantedSubcircuitAmount);
            END_IF
            IF bAlarmLimitSetHMI THEN
                wMBAdr := 16#71C;
                wWriteDate    := UINT_TO_WORD(iWantedResistanceLimit);
            END_IF
            IF bResistanceCheckRangeSetHMI THEN
                wMBAdr := 16#71E;
                wWriteDate    := UINT_TO_WORD(iWantedResistanceCheckRange);
            END_IF
        END_CASE


        IF NOT bAlter THEN
            CASE iState OF
            0:    fbMBCom.ReadRegs(Execute := FALSE);
                istate := istate +1;
            1:

                fbMBCom.ReadRegs(
                UnitID := UINT_TO_BYTE(iAdrOfInsulation), (* 站點(diǎn)地址 *)
                Quantity := iLEN,
                MBAddr := wMBAdr,
                CbLength := iLEN*2,
                pMemoryAddr:= ADR(wMemoryDate[1]),
                Execute := TRUE AND bReadEnable ,
                Timeout := t#5s,
                Busy => );
                IF NOT fbMBCom.BUSY THEN
                    fbMBCom.ReadRegs(Execute := FALSE);
                    IF fbMBCom.Error THEN
                        iState :=0;
                    ELSE
                        istate := istate +1;
                    END_IF
                END_IF
            2:
                CASE eCommandNum OF
                    1:
                        FOR i :=1 TO 7 DO
                            IF i=3 OR i=4 THEN
                            iSysTotalDate := WORD_TO_UINT(wMemoryDate AND 16#3FFF);
                            ELSE
                            iSysTotalDate := WORD_TO_UINT(wMemoryDate);
                            END_IF
                        END_FOR
                        iSubTotal := iSysTotalDate[2];
                        IF wMemoryDate[3].14 THEN
                            bErrList[1] := TRUE;
                        ELSE
                            bErrList[1] := FALSE;
                        END_IF
                        IF wMemoryDate[4].14 THEN
                            bErrList[2] := TRUE;
                        ELSE
                            bErrList[2] := FALSE;
                        END_IF
                    2:
                        FOR i :=1 TO 5 DO
                            iProductParam := WORD_TO_INT(wMemoryDate);
                        END_FOR
                    3:
                        FOR i :=1 TO iSubTotal DO
                            iSubP_EarthR := WORD_TO_INT(wMemoryDate AND 16#3FFF);
                            IF wMemoryDate.15 THEN
                                bErrList[2+i] := TRUE;
                            ELSE
                                bErrList[2+i] := TRUE;
                            END_IF
                            IF wMemoryDate.14 THEN
                                bErrList[2+iSubTotal+i] := TRUE;
                            ELSE
                                bErrList[2+iSubTotal+i] := TRUE;
                            END_IF
                        END_FOR
                    4:
                        FOR i :=1 TO iSubTotal DO
                            iSubN_EarthR := WORD_TO_INT(wMemoryDate AND 16#3FFF);
                            IF wMemoryDate.15 THEN
                                bErrList[2+2*iSubTotal+i] := TRUE;
                            ELSE
                                bErrList[2+2*iSubTotal+i] := TRUE;
                            END_IF
                            IF wMemoryDate.14 THEN
                                bErrList[2+3*iSubTotal+i] := TRUE;
                            ELSE
                                bErrList[2+3*iSubTotal+i] := TRUE;
                            END_IF
                        END_FOR
                END_CASE
                FOR i := 1 TO 64 DO
                    wMemoryDate := 0;
                END_FOR
                istate :=0;
                eCommandNum := eCommandNum +1;
                IF eCommandNum >4 THEN
                    eCommandNum :=1;
                END_IF
                bAlter := bStopHmi;(*參數(shù)修改ON*)
            END_CASE
        ELSE
            CASE istate OF
            0:    fbMBCom.WriteSingleRegister(Execute := FALSE);
                istate := istate +1;
            1:
                fbMBCom.WriteSingleRegister(
                    UnitID := UINT_TO_BYTE(iAdrOfInsulation),
                    Quantity := 1,
                    MBAddr := wMBAdr,
                    CbLength := SIZEOF(wWriteDate),
                    pMemoryAddr:= ADR(wWriteDate),
                    Execute := TRUE AND bWriteEnable,
                    Timeout := t#5000ms,
                    Busy => );
                IF NOT fbMBCom.BUSY THEN
                    fbMBCom.WriteSingleRegister(Execute := FALSE);
                    IF fbMBCom.Error THEN
                        istate := 0;
                    ELSE
                        istate :=istate +1;
                    END_IF
                END_IF
            2:
                CASE eCommandNum OF
                    5:;
                    6:
                        IF iWantedAdr = BYTE_TO_UINT(fbMBCom.InData.D[4]) THEN
                            iAdrOfInsulation := iWantedAdr;
                        END_IF
                    7:;
                END_CASE
                bWriteEnable :=FALSE;
                eCommandNum :=1;
                iState :=0;
                bAlter := bStopHmi;(*參數(shù)修改OFF*)
            END_CASE
        END_IF
        zhou1211
        級別: 略有小成
        精華主題: 1 篇
        發(fā)帖數(shù)量: 206 個
        工控威望: 363 點(diǎn)
        下載積分: 1174 分
        在線時間: 66(小時)
        注冊時間: 2013-11-04
        最后登錄: 2025-01-09
        查看zhou1211的 主題 / 回貼
        4樓  發(fā)表于: 2021-01-14 15:35
        通訊沒你想的那么簡單,對時間有要求,你的輪詢讀沒問題是每一步都分開了在做,并且,即使你的通訊對象只有一個,也會出現(xiàn)同樣的情況,你這存在2中通訊操作就必須在進(jìn)行另一種的時候中斷一種,我的程序是用codesys寫的,2種模式切換,但不能同時進(jìn)行,實(shí)際上切換過程時間很短,在確認(rèn)發(fā)出和收到回信再切回去
        zhou1211
        級別: 略有小成
        精華主題: 1 篇
        發(fā)帖數(shù)量: 206 個
        工控威望: 363 點(diǎn)
        下載積分: 1174 分
        在線時間: 66(小時)
        注冊時間: 2013-11-04
        最后登錄: 2025-01-09
        查看zhou1211的 主題 / 回貼
        5樓  發(fā)表于: 2021-01-15 08:30
        引用
        引用第7樓ronkang于2021-01-14 19:08發(fā)表的  :
        樓上兄弟,USS通訊沒你說的這么復(fù)雜吧。西門子手冊也沒你說的要中斷一個通訊才能啟用另一個通訊。只說了USS讀寫指令同一時刻只能使用一個。

            你對通訊認(rèn)識還不夠,因?yàn)槟?個指令都是存在詢問幀,因此他就像modbus的控制字一樣,需要逐條發(fā)送,它又不能像CAN那樣打包發(fā)送,空閑接收。
        你這種情況就算同時發(fā)送那也只是直接下條覆蓋上條,主要還是時間間隔不夠,例如:modbus幀間隔是3.5個字符,在一條發(fā)送完沒間隔完就直接下一條,那么2條會串在一塊形成合并幀;
        這種幀99.99%的概率是不合法,無法被響應(yīng),因?yàn)樾r?yàn)通不過。
            另外,你的設(shè)備越多數(shù)據(jù)量越大,你需要做的間隔就越長,波特率本身就是描述通訊速率的,可以計算得出你做程序該有的間隔。


        PS: 上面的程序并不復(fù)雜,上面是modbus協(xié)議,也是讀和寫。codesys本身就是開放性的,你調(diào)用的是一整塊功能,它調(diào)用可以切入內(nèi)部調(diào)用函數(shù)。即使像你那種調(diào)用也有時候會寫得很復(fù)雜,你沒用到而已。  比如: 你詢問一個設(shè)備,設(shè)備回的狀態(tài)可能使你不得不選擇N種參數(shù),我上面的就是,讀寫在上面的case中其實(shí)只出現(xiàn)了2次,其他都是數(shù)據(jù)處理
        zhou1211
        級別: 略有小成
        精華主題: 1 篇
        發(fā)帖數(shù)量: 206 個
        工控威望: 363 點(diǎn)
        下載積分: 1174 分
        在線時間: 66(小時)
        注冊時間: 2013-11-04
        最后登錄: 2025-01-09
        查看zhou1211的 主題 / 回貼
        6樓  發(fā)表于: 2021-01-15 08:44
        我說的中斷是廣義上的中斷,和PLC外部中斷不是一個概念,但和定時中斷類似,就是你必須先知道與通訊的設(shè)備是否成功的完成了上一次,而不是只管發(fā),到時收一堆報錯,這種情況當(dāng)年初學(xué)plc就是這樣。
        拿個最簡單的電池SOC can2.0標(biāo)準(zhǔn)協(xié)議  只讀報文來講,plc不需要寫數(shù)據(jù)幀,只管讀,對象的報文分成4種幀,權(quán)重50ms 100ms 200ms 1s  ,一是長度不一樣,二是重要程度不一樣,那么這四種必須在確定其中一種發(fā)送完了才能發(fā)另一種,否則極可能出現(xiàn)1s間隔的不重要報文永遠(yuǎn)發(fā)不出去
        zhou1211
        級別: 略有小成
        精華主題: 1 篇
        發(fā)帖數(shù)量: 206 個
        工控威望: 363 點(diǎn)
        下載積分: 1174 分
        在線時間: 66(小時)
        注冊時間: 2013-11-04
        最后登錄: 2025-01-09
        查看zhou1211的 主題 / 回貼
        7樓  發(fā)表于: 2021-01-17 09:41
        程序是很簡單,但到實(shí)際應(yīng)用的時候有不確定性,通信原理都是一樣,協(xié)議也只約定規(guī)則,這些規(guī)則無非就是限制
        緊要
        1. 數(shù)據(jù)幀的開始標(biāo)志
        2. 數(shù)據(jù)長度;
        3. 結(jié)束標(biāo)志;
        4. 校驗(yàn)方式;
        非緊要,在前面4個重點(diǎn)正確的情況下,后面的一般不會有錯
        5. 故障碼;
        6. 最大長度

        你的問題可能原因
        1.  發(fā)送緩存區(qū)因相近間隔時間進(jìn)入過多的數(shù)據(jù)量,導(dǎo)致發(fā)送長度不支持,發(fā)送失敗;
        2.  沒有檢測握手標(biāo)志(發(fā)送完成標(biāo)志,接收完成標(biāo)志),每個通訊功能塊都有一個Done 位(雙工只注意單個done),新手靠拉長收發(fā)時間,中手看標(biāo)志,老手看綜合狀態(tài);像485線,你發(fā)一幀數(shù)據(jù),必須等收到信息完成,或者確實(shí)超時才能發(fā)下一次詢問;
        檢測的方法最直接是用串口調(diào)試工具去監(jiān)測收發(fā)數(shù)據(jù)的實(shí)際狀態(tài),這樣才能判斷錯出在哪了,有時候你的數(shù)據(jù)沒問題,而通訊的對方可能有問題,比如,你CPU運(yùn)行速度1ms周期,而對方在處理不同數(shù)據(jù)時響應(yīng)時間不一樣,以前測試過一款微型伺服,詢問狀態(tài)響應(yīng)2ms,控制指令響應(yīng)時間很長,讀數(shù)組狀態(tài)的時候響應(yīng)時間也很長,所有經(jīng)常被程序認(rèn)為是發(fā)送超時
        寫程序前先了解被通訊對象的素質(zhì)也很重要,先用串口工具測試各種你要用到指令,然后加快收發(fā)速度,去測試響應(yīng)極限,別一上去就干到極限,然后悶逼不知道怎么解決。當(dāng)確實(shí)遇到了問題,那么再回過同用通訊工具采樣你發(fā)和它發(fā)的狀態(tài)找原因
        zhou1211
        級別: 略有小成
        精華主題: 1 篇
        發(fā)帖數(shù)量: 206 個
        工控威望: 363 點(diǎn)
        下載積分: 1174 分
        在線時間: 66(小時)
        注冊時間: 2013-11-04
        最后登錄: 2025-01-09
        查看zhou1211的 主題 / 回貼
        8樓  發(fā)表于: 2021-01-17 11:22
        圖片:
        所以說你根本看不懂我那個程序,那個程序不復(fù)雜,里面數(shù)據(jù)判斷占了大部分,真正收發(fā)指令只占了很小的一部分,你寫一個通訊程序也是一樣的,當(dāng)然,電機(jī)控制用固定功能塊做的,或者說你只需要固定控制方式,所以顯得簡單;
        我程序里面包含了通訊參數(shù)的修改,首先是修改了通訊默認(rèn)地址,再就是模仿modbus切換控制字寫對象的參數(shù),然后根據(jù)不同的控制模式解析對應(yīng)數(shù)據(jù)
        你做通訊感覺才入門,上圖是對應(yīng)實(shí)現(xiàn)的功能
        大致就是通訊建立,先讀出前排2組數(shù)據(jù),那2組如果和實(shí)際設(shè)備有出入則通過下面的寫操作修改掉,其余時間是在讀取右邊2列有效數(shù)據(jù),這個設(shè)備沒有修改軟件,所以得做通訊程序去修改報警范圍之類的參數(shù),不是每一個給你的設(shè)備都會給你配一個參數(shù)修改軟件,也不是每一個操作工都知道怎么去修改一個設(shè)備,尤其是第三方,那么你就必須在你的HMI上開放一個接口去方便修改
        [ 此帖被zhou1211在2021-01-17 11:39重新編輯 ]

        主站蜘蛛池模板: 美女无遮挡免费视频网站| 亚洲色婷婷综合开心网| 福利一区二区1000| 亚洲老女人区一区二视频| 亚洲老妇女亚洲老熟女久| 性做久久久久久久| 国产农村激情免费专区| 最新精品国偷自产在线| 做暖暖视频在线看片免费| 综合偷自拍亚洲乱中文字幕| 国产精品自在线拍国产手机版| 国产午夜精品理论大片| 亚洲国产精品一区二区三| 亚洲天码中文字幕第一页| 少妇激情一区二区三区视频| 性色av一区二区三区精品| 九九久久人妻精品一区色| 国产精品日本一区二区不卡视频 | 国产精品污双胞胎在线观看| 国产av一区二区午夜福利| 精品国产一区AV天美传媒| 欧美在线人视频在线观看| 日本久久99成人网站| 亚洲人妻中文字幕一区| 四虎永久精品免费视频| 澳门永久av免费网站| 国产色无码精品视频免费| 无遮无挡爽爽免费视频| 性欧美VIDEOFREE高清大喷水| 四虎在线成人免费观看| 九九热在线精品视频首页| 久久精品国产精品第一区| 久久国产综合色免费观看| 九九热精品视频在线免费| 九九热在线视频观看精品| 粉嫩在线一区二区三区视频| 国模精品视频一区二区三区| 国产视频不卡一区二区三区| 国产盗摄视频一区二区三区| 成熟熟女国产精品一区二区 | 狠狠亚洲色一日本高清色|