91黄动漫 I 欧美 日韩 国产 成人 在线 I a级成人毛片 I 农村黄色片 I 男生捅女生的肌肌 I 精品99一区二区三区 I 妃光莉av I 日日夜夜操操 I 性中国古装videossex I 久久不卡av I 美女高潮动态图 I 极品美女开粉嫩精品 I 牛牛精品一区二区 I 91精品福利视频 I 成人刺激视频 I 91国内精品视频 I 中国一级特黄毛片大片 I 校长狠狠挺进校花体内小说 I 欧美激情黄色片 I 欧美久久久一区 I 爱豆国产剧免费观看大全剧苏畅 I 麻豆国产人妻欲求不满谁演的 I 亚洲一区二区在线免费观看视频 I 国产超碰av人人做人人爽 I 精品国产第一国产综合精品 I 久久免费看av I 欧美一区二区三区白人 I 国产精品夫妻激情 I 校花被肉干高h潮不断 I 欧美最猛黑人xxxx黑人表情 I 国产欧美日韩一区二区搜索 I 极品女神露脸呻吟啪啪 I 人人天天久久 I 亚洲动漫在线 I 日本91福利区 I 五月天 桃色 开心 I av在线免费观看国产 I 男人添女人的免费视频 I 夜夜穞天天穞狠狠穞

ronkang
倍加福總線
級別: 略有小成
精華主題: 0
發帖數量: 144 個
工控威望: 348 點
下載積分: 914 分
在線時間: 192(小時)
注冊時間: 2008-06-24
最后登錄: 2025-12-08
查看ronkang的 主題 / 回貼
樓主  發表于: 2021-01-13 13:31
SR20帶7臺G120XA變頻器,走USS通訊,一個子程序中使用7個USS_CTRL指令讀寫變頻器。另一個子程序中使用7個USS_RPM_R指令輪訓讀取7臺變頻器電流,現在問題是:
1.兩個子程序都在主程序中調用時,USS_RPM_R沒有任何錯誤,但是USS_CTRL平均15秒就會報錯,錯誤代碼2。2這個代碼不知什么原因引起。
2.主程序中只調用USS_CTRL這個子程序時,7個USS_CTRL指令無任何錯誤。
請專家指點一下,USS_RPM_R是輪詢順序執行的,應該沒有問題,會不會是和USS_CTRL指令沖突了?問題到底出在哪里?有什么解決辦法,麻煩大家了
zhou1211
級別: 略有小成
精華主題: 1 篇
發帖數量: 208 個
工控威望: 363 點
下載積分: 1174 分
在線時間: 66(小時)
注冊時間: 2013-11-04
最后登錄: 2025-01-09
查看zhou1211的 主題 / 回貼
1樓  發表于: 2021-01-13 16:08
你這明顯要分時中斷
zhou1211
級別: 略有小成
精華主題: 1 篇
發帖數量: 208 個
工控威望: 363 點
下載積分: 1174 分
在線時間: 66(小時)
注冊時間: 2013-11-04
最后登錄: 2025-01-09
查看zhou1211的 主題 / 回貼
2樓  發表于: 2021-01-14 15:21
你一個循環周期很容易出現uss_ctrl 和Uss_RPM_R 時間間隔不夠,這樣就被掛起報錯
zhou1211
級別: 略有小成
精華主題: 1 篇
發帖數量: 208 個
工控威望: 363 點
下載積分: 1174 分
在線時間: 66(小時)
注冊時間: 2013-11-04
最后登錄: 2025-01-09
查看zhou1211的 主題 / 回貼
3樓  發表于: 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), (* 站點地址 *)
        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;(*參數修改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;(*參數修改OFF*)
    END_CASE
END_IF
zhou1211
級別: 略有小成
精華主題: 1 篇
發帖數量: 208 個
工控威望: 363 點
下載積分: 1174 分
在線時間: 66(小時)
注冊時間: 2013-11-04
最后登錄: 2025-01-09
查看zhou1211的 主題 / 回貼
4樓  發表于: 2021-01-14 15:35
通訊沒你想的那么簡單,對時間有要求,你的輪詢讀沒問題是每一步都分開了在做,并且,即使你的通訊對象只有一個,也會出現同樣的情況,你這存在2中通訊操作就必須在進行另一種的時候中斷一種,我的程序是用codesys寫的,2種模式切換,但不能同時進行,實際上切換過程時間很短,在確認發出和收到回信再切回去
zhou1211
級別: 略有小成
精華主題: 1 篇
發帖數量: 208 個
工控威望: 363 點
下載積分: 1174 分
在線時間: 66(小時)
注冊時間: 2013-11-04
最后登錄: 2025-01-09
查看zhou1211的 主題 / 回貼
5樓  發表于: 2021-01-15 08:30
引用
引用第7樓ronkang于2021-01-14 19:08發表的  :
樓上兄弟,USS通訊沒你說的這么復雜吧。西門子手冊也沒你說的要中斷一個通訊才能啟用另一個通訊。只說了USS讀寫指令同一時刻只能使用一個。

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


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

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

主站蜘蛛池模板: 亚洲在线视频免费观看 | 国产片av不卡在线观看国语 | 18禁亚洲深夜福利人口 | 国产一级一级片 | 国产精品偷伦视频免费观看国产 | 国产思思99re99在线观看 | 日韩欧美中文 | 亚洲精品不卡无码福利在线观看 | 亚洲偷自拍国综合色帝国 | 女人被黑人狂躁c到高潮小说 | 日韩精品亚洲aⅴ在线影院 看美女毛片 | 亚洲人人玩人人添人人 | 亚洲精品久久区二区三区蜜桃臀 | 成人羞羞视频播放网站 | sb少妇高潮二区久久久久 | 亚洲成人免费在线 | 国产高清在线精品一区app | 伊人久久大香线蕉av网 | 黄色大片在线免费看 | 欧美最猛性xxxxx(亚洲精品) | 337p人体 欧洲人体 亚洲 | 91视频第一页 | 久操资源| 永久免费网站直接看 | 2023av在线 | 亚洲老妈激情一区二区三区 | 欧美999| 人妻精品丝袜一区二区无码av | 免费国产玉足脚交视频 | 亚洲美女爱爱视频 | 少妇精品亚洲一区二区成人 | 特级小箩利无码毛片 | 2020精品国产户外 | 无码国内精品久久综合88 | 黄色一级片视频播放 | 亚洲精品大片www | 女人高爱潮aa级毛片视频免费 | 91视频免费观看网站 | 国产成人精品午夜视频' | 精品久久综合 | 一本久道久久 | 18禁美女黄网站色大片在线 | 国产吞精囗交免费视频网站 | 欧美 亚洲 另类 综合网 | 蜜桃久久久aaaa成人网一区 | 私密视频在线观看 | 亚洲香蕉视频综合在线 | 黄色av免费在线 | av一区在线 | 国产三级久久久精品麻豆三级 | 成人欧美大片 | 亚洲综合在线中文字幕 | 亚洲精品久久国产精品 | 少妇人妻偷人精品免费视频 | 新91av| 亚洲中午字幕 | 国产成人61精品免费看片 | 国产精成a品人v在线播放 | 国产人成网线在线播放va | 欧美抠逼视频 | 国产精品99久久久久久久女警 | 国产欧美一区二区三区视频 | 国产图片区 | 国产成人亚洲精品无码青 | 精品福利网站 | 久草黄色 | 综合欧美亚洲日本一区 | 天天爱天天做天天做天天吃中文 | 毛片基地站 | 国产精品毛片无码 | 国产精品久久天天躁 | 国产无套露脸在线观看 | 国内精品福利视频 | 国产精品无码无卡在线观看久 | 可播放的亚洲男同网站 | 国产精品国产三级国产aⅴ中文 | 国产无套乱子伦精彩是白视频 | 亚洲国内精品 | 亚欧乱色国产精品免费 | 亚洲制服丝袜精品久久 | 久久精品亚洲一区二区三区画质 | 国产成人69视频午夜福利在线观看 | 国产成人无码av在线播放不卡 | 色桃av | 亚洲欧洲日产国码综合在线 | 国产真实露脸乱子伦 | 女人的天堂网 | 免费国产白丝喷水娇喘视频 | 永久免费不卡在线观看黄网站 | 久久久久久国产精品免费免费 | 国内少妇高清露脸精品视频 | 在线看片免费人成视频电影 | 亚洲一本之道 | 国产视频一级 | 精品视频一二三区 | 亚洲国产www | 中文字幕日韩美女 | 中文字幕在线观看第二页 | 久久国语对白 |